1. A method for processing an input data stream comprising a plurality of input data elements, the method comprising: storing the input data elements of the input data stream in memory; defining a number of thread arrays to be executed concurrently by parallel processing hardware, each thread array comprising a number of concurrent threads, each thread having a unique thread identifier and each thread array having a unique array identifier, wherein each thread is assigned to process one or more of the input data elements, an input data element for a given thread being selected from an address in memory that is a function of the unique thread identifier and the unique array identifier associated with the thread, such that increasing unique thread identifiers correspond to increasing memory addresses; executing, using the parallel processing hardware, the number of thread arrays to process the input data stream and write an output data stream to the memory, wherein executing one of the plurality of thread arrays includes: organizing the threads of the thread array into a plurality of SIMD groups, wherein at least a first one of the SIMD groups includes a plurality of threads; and retrieving the input data elements for all threads of the first SIMD group from the memory in a single memory access operation.