LINUX.ORG.RU

C++ threads нет прироста производительности

 ,


1

4

Всем доброй ночи!

Примитивно распралллелил часть кода с помощью библиотеки <threads>. На винде все работает, в конкретной ситуации время выполнения в 2.5 раза меньше по сравнению с не параллельным вариантом. Но сейчас запустил на Ubuntu 20, и на ней никакого прироста нет (к слову, работает корректно). В чем может быть проблема?

Компилирую вот так: g++ -std=c++0x -pthread main.cpp Inverse.cpp Matrix.cpp f.cpp -o a

Вот кусок кода:

int n_cores = thread::hardware_concurrency(); //с этим все в порядке; выводится 4
thread *th = new thread[n_cores];
for(int z=0;z<n_cores;z++){
		if(z== n_cores-1){
			th[z] = thread([&X,&A,p,z,n_cores,n](){
				for(int i = z*n/n_cores;i < n;i++){
					if(i != p){
						double k = A.get(i,p);
						X.RowSub(i,p,k);
						A.RowSub(i,p,k);
					}
				}
			});
		}else{
			th[z] = thread([&X,&A,p,z,n_cores,n](){
				for(int i = z*n/n_cores;i < (z+1)*n/n_cores;i++){
					if(i != p){
						double k = A.get(i,p);
						X.RowSub(i,p,k);
						A.RowSub(i,p,k);
					}
				}
			});
		}
}
for(int z=0;z<n_cores;z++){
	th[z].join();
}
delete[] th;

Всем заранее спасибо!


Ответ на: комментарий от fsb4000

Да вроде нормально замеряю. Время не параллельного кода совпадает с тем, что на винде.

int start_time =  clock();
Inverse_th(*A,X);
int end_time = clock(); 
int search_time = end_time - start_time;
cout << (double)search_time/CLOCKS_PER_SEC<< " sec" << endl;

faade
() автор топика
Ответ на: комментарий от faade

Ну вот, как я и предположил, ты замеряешь время неправильно.

fsb4000 ★★★★★
()

немного не по теме, но чем тебе не угодил openmp?

Sahas ★★★★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.