Я сделал небольшую программу, чтобы наблюдать за ускорением использования двух потоков. Я задаю время для заполнения массива. A основной поток и call1 call function_1 для инициализации разных половин массива. Я ожидал увидеть более быстрые результаты, используя два потока. Вместо этого у меня есть более медленные времена, и код с комментариями работает быстрее. Где я ошибаюсь?Производительность нити C++
#include <chrono>
#include <iostream>
#include <vector>
#include <thread>
void function_1(int I, int J, int *B){
for (int i = I; i<(J+1); i++) {
B[i] = 100;
//std::cout << B[i] << std::endl;
}
}
int *count;
int main(int argc, const char * argv[])
{
count = new int[20000];
std::chrono::steady_clock::time_point t1 = std::chrono::steady_clock::now();
//function_1(0, 19999, count);
std::thread thread1(function_1, 0, 9999, count);
thread1.join();
function_1(10000, 19999, count);
std::chrono::steady_clock::time_point t2 = std::chrono::steady_clock::now();
auto time_span = std::chrono::duration_cast<std::chrono::microseconds>(t2 - t1).count();
std::cout << "time taken is :" <<time_span << " ms"<<std::endl;
return 0;
}
Я переместил thread1.join() после вызова main в функцию_1. По какой-то причине использование двух потоков еще медленнее, чем использование одного потока с кодом с комментариями. – gumby
Тест кажется слишком тривиальным. Управление потоками, скорее всего, влияет на вашу производительность отрицательно. Нитки - это не беспроигрышный способ параллельной работы. –
@Mario: Это действительно небольшое количество работы. Вы можете попробовать сделать массив в 10 или 100 раз больше. – Blastfurnace