/*
cl -EHsc -openmp -MD -I<TBB_INC_DIR> sort.cpp -link -libpath:<TBB_LIB_DIR>
*/
#include <windows.h> // GetTickCount
#include <algorithm> // std::sort
#include <iostream> // std::cout,endl
#include <tbb/parallel_sort.h> // tbb::parallel_sort
void execute(int N) {
std::cout << "N = " << N << std::endl;
int *data = new int[N];
long sum = 0;
// 地味に単スレッド
{
srand(1);
std::cout << "std::sort ..." << std::flush;
for ( int j = 0; j < 10; ++j ) {
for ( int i = 0; i < N; ++i ) data[i] = std::rand();
long t = GetTickCount();
std::sort(data, data+N);
t = GetTickCount() - t;
sum += t;
}
std::cout << sum/10.0 << std::endl;
sum = 0;
}
// 派手に複スレッド
{
srand(1);
std::cout << "tbb::parallel_sort ..." << std::flush;
for ( int j = 0; j < 10; ++j ) {
for ( int i = 0; i < N; ++i ) data[i] = std::rand();
long t = GetTickCount();
tbb::parallel_sort(data, data+N);
t = GetTickCount() - t;
sum += t;
}
std::cout << sum/10.0 << std::endl;
sum = 0;
}
delete[] data;
}
int main() {
int N[] = { 100000, 200000, 400000, 800000, 1600000, 3200000, 6400000 };
std::for_each(N, N+7, &execute);
}