{'fraction_non_alphanumeric': 0.018996590355577204, 'fraction_numerical': 0.000974184120798831, 'mean_word_length': 5.398753894080997, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
Stream computing on graphics hardware

The raw compute performance of today's graphics processor is truly amazing. With peak performance of over 60 GFLOPS, the compute power of today's graphics processor (GPU) dwarfs that of the commodity CPU at a price of only a few hundred dollars. As the programmability and performance of modern graphics hardware continues to increase, many researchers are looking to graphics hardware to solve computationally intensive problems previously performed on general purpose CPUs. The challenge, however, is how to re-target these processors from game rendering to general computation, such as numerical modeling, scientific computing, or signal processing. Traditional graphics APIs abstract the GPU as a rendering device, involving textures, triangles, and pixels. Mapping an algorithm to use these primitives is not a straightforward operation, even for the most advanced graphics developers. 
In this dissertation, we explore the concept of stream computing with GPUs. We describe the stream processor abstraction and how this abstraction and corresponding programming model can efficiently represent computation on the GPU. To formalize the model, we present Brook for GPUs, a programming system for general-purpose computation on programmable graphics hardware. Brook extends C to include simple data-parallel constructs, enabling the use of the GPU as a streaming co-processor. We present a compiler and runtime system that abstracts and virtualizes many aspects of graphics hardware. In addition, we present an analysis of the effectiveness of the GPU as a streaming processor and evaluate the performance of a collection of benchmark applications in comparison to their CPU implementations. For a variety of the applications explored in this dissertation, we demonstrate that our Brook implementations performs up to seven times faster than their CPU counterparts. We also discuss some of the algorithmic decisions which are critical for efficient execution when using the stream programming model for the GPU.