У меня есть два приложения: одно многопоточное, а другое полностью последовательное. Оба приложения выполняют одну и ту же задачу. Я пытаюсь рассчитать ускорение многопоточного приложения. Почему-то я получаю больше времени для многопоточного кода (147.19 us
) по сравнению с последовательным (41 us
). Есть ли другой способ для профилирования настенного времени?
#include "iostream"#include "ctime"#include "thread"#include "chrono"#include "iomanip"
#include <sys/time.h>
int deltaTime(struct timeval *tv1, struct timeval *tv2){
return ((tv2->tv_sec - tv1->tv_sec)*1000000)+ tv2->tv_usec - tv1->tv_usec;
}
void execute_for_wallTime(int wall_time)
{
struct timeval tvStart, tvNow;
gettimeofday(&tvStart, NULL);
for (int m = 0; wall_time; ++m){
gettimeofday(&tvNow, NULL);
if(deltaTime(&tvStart,&tvNow) >=wall_time) {
return;
}
}
}
int sc_main(int argc, char* argv[])
{
std::clock_t c_start = std::clock();
auto t_start = std::chrono::high_resolution_clock::now();//multi-thread code
// std::thread t1(execute_for_wallTime, 10);
// std::thread t2(execute_for_wallTime, 13);
// std::thread t3(execute_for_wallTime, 16);
// t1.join();
// t2.join();
// t3.join();
//Sequential Code
execute_for_wallTime(10);
execute_for_wallTime(13);
execute_for_wallTime(16);
std::clock_t c_end = std::clock();
auto t_end = std::chrono::high_resolution_clock::now();
std::cout << std::fixed << std::setprecision(2) << "CPU time used: "<< 1000.0 * (c_end-c_start) / CLOCKS_PER_SEC << " ms\n"<< "Wall clock time passed: "<< std::chrono::duration<double, std::micro>(t_end-
t_start).count()
<< " us\n";
return 0;
}
Задача ещё не решена.
Других решений пока нет …