Я хотел бы вызывать функцию небольшое количество раз (т.е. 4 раза), используя многопоточность.Используя пример из блога Solarian Programmer (https://solarianprogrammer.com/2011/12/16/cpp-11-thread-tutorial/),) я написал эту простую программу на c ++ 11:
#include <iostream>
#include <thread>
#include <ctime>
#include <math.h>
#define PI 3.14159265358979323846
static const int num_threads = 4;
void call_from_thread(int tid) {
std::cout << log(2) - 0.5*log(2*PI) - log(1.05) - pow(2.3-0.5,2)/(2*pow(1.05,2))<<std::endl;
}
int main() {
std::thread t[num_threads];
std::clock_t start;
start = std::clock();
//Launch a group of threads
for (int i = 0; i < num_threads; ++i) {
t[i] = std::thread(call_from_thread, i);
}
std::cout << "Launched from the main\n";
for (int i = 0; i < num_threads; ++i) {
t[i].join();
}
std::cout << "Time: " << (std::clock() - start) / (double)(CLOCKS_PER_SEC / 1000) << " ms" << std::endl;
return 0;
}
Конечно, этот пример тривиален, иМне здесь не нужна многопоточность, так как функция всегда возвращает один и тот же результат. Но я планирую немного изменить эту функцию, чтобы иметь некоторые различия между потоками. При запуске этого кода я получил что-то вроде:
Time: 0.806 ms
Теперь, если я изменю приведенный выше код, чтобы разрешить только однопоточный код, у меня будет следующее:
int main() {
std::thread t[num_threads];
std::clock_t start;
start = std::clock();
//Launch a group of threads
for (int i = 0; i < num_threads; ++i) {
call_from_thread(i);
}
std::cout << "Launched from the main\n";
std::cout << "Time: " << (std::clock() - start) / (double)(CLOCKS_PER_SEC / 1000) << " ms" << std::endl;
return 0;
}
Здесь время выполнения намного меньше:
Time: 0.116 ms
Итак, мой вопрос: могу ли я вызывать эту простую функцию несколько раз, используя многопоточность, чтобы ускорить мой код? В основном, я хотел бы перейти ниже этих 0,116 мс.
Примечание такжеЯ новичок в C ++ и параллелизме, поэтому извините, если мой вопрос не кажется актуальным.