1. A computer-implemented method for processing data, the method comprising: defining, in a processor, a thread array having a plurality of threads, each thread configured to execute a same program on a subset of an input data set; assigning, by the processor, each of the threads in the thread array a unique thread identifier value to be used to determine the subset of the input data set to be processed by each respective thread, wherein each unique thread identifier value is unique within the thread array; and executing, by the processor, the plurality of threads in the thread array concurrently with each other, wherein during execution, each thread uses the unique thread identifier value assigned thereto as an input to compute at least one program-specified function of the unique thread identifier value, wherein the plurality of threads includes a first thread configured to execute the same program on a first subset of the input data set and a second thread configured to execute the same program on a second subset of the input data set, and wherein data in the first subset overlaps with the second subset.