1. A method for exploiting available parallelism in a computer system to process a plurality of data elements, the method comprising: defining program code for processing at least one of the plurality of data elements; defining a first number (n 1 ) of blocks, each block including a number (n e ) of the plurality of data elements; defining a thread array corresponding to each block, each thread array including a number (n 0 ) of threads of execution of the program code sufficient to process each of the n e data elements in the corresponding block; automatically distributing the n 1 thread arrays among one or more of a number C tot of processing cores of the computer system; operating each of the one or more processing cores to execute each of the thread arrays distributed thereto, wherein executing a thread array includes executing the n 0 threads of the program code to process each of the n e data elements in the corresponding block and storing a result of processing each of the n e data elements in a memory.