I’ve put the source to my Async::Worker system, documentation and examples here.
From the examples, how to offload batches of work for processing in parallel:
int main(int argc, const char* const argv[]) { static const size_t NumberOfElements = 20000000 ; static const size_t GroupSize = 8192 ; Numbers numbers ; numbers.resize(NumberOfElements) ; for ( size_t i = 0 ; i < NumberOfElements ; ++i ) { numbers[i] = (rand() & 65535) + 1 ; } uint64_t parallelResult = 0 ; // Dispatch groups of numbers to workers. Numbers::iterator it = numbers.begin() ; do { Numbers::iterator end = std::min(it + GroupSize, numbers.end()) ; Async::Queue(new CrunchNumbersRange(it, end, ¶llelResult)) ; it = end ; } while ( it != numbers.end() ) ; // Wait for all the results, calling Result() on each // returned object to produce a total. Async::GetResults() ; printf("Done. Calculated sum as %lu.\n", (unsigned long int)parallelResult) ; return 0 ; }
Recent Comments