rand_test
testing how rand behaves within main thread and separate thread. On some systems it takes double the time if it's in separate thread.unknown
c_cpp
3 years ago
2.1 kB
4
Indexable
#include <cstdio>
#include <stdexcept>
#include <thread>
#include <future>
#include <malloc.h>
#include <time.h>
#define TEST_ITERATIONS 100*1000*1000
void *testNN(void *dummy) {
volatile double x;
for (int i = 0; i < TEST_ITERATIONS; ++i) {
x = rand();
x *= rand();
}
return nullptr;
}
int main(){
time_t start = time(nullptr);
{ // for future to join thread
int testVariant = 2;
std::future<void *> f[12];
switch(testVariant){
case 1:
printf("main thread test\n");
testNN(nullptr); // 12s
break;
case 2:
printf("pthreads test\n");
pthread_t thread_id;
pthread_create(&thread_id, NULL, testNN, nullptr);
pthread_join(thread_id, NULL); //27s
break;
case 3:
printf("std::async test\n");
f[0] = std::async(std::launch::async, testNN, nullptr); // 27s
break;
case 4:
printf("std::async x12 test\n");
// for multithreaded testing:
f[0] = std::async(std::launch::async, testNN, nullptr);
f[1] = std::async(std::launch::async, testNN, nullptr);
f[2] = std::async(std::launch::async, testNN, nullptr);
f[3] = std::async(std::launch::async, testNN, nullptr);
f[4] = std::async(std::launch::async, testNN, nullptr);
f[5] = std::async(std::launch::async, testNN, nullptr);
f[6] = std::async(std::launch::async, testNN, nullptr);
f[7] = std::async(std::launch::async, testNN, nullptr);
f[8] = std::async(std::launch::async, testNN, nullptr);
f[9] = std::async(std::launch::async, testNN, nullptr);
f[10] = std::async(std::launch::async, testNN, nullptr);
f[11] = std::async(std::launch::async, testNN, nullptr);
break;
}// case
}
time_t runTime = time(nullptr);
runTime -= start;
printf("calc done in %lds (%ld calc/s)\n", runTime, TEST_ITERATIONS / runTime);
}
Editor is loading...