1. A method of executing requests for data from a memory, comprising: segregating threads into a first thread type and a second thread type, each thread of the first thread type issuing at least one first thread request type for data from a memory, and each thread of the second thread type issuing at least one second thread request type for data from the memory; forming first batches, each first batch comprising primarily request of a single thread request type; and executing the requests of each first batch.