Всем доброй ночи!
Примитивно распралллелил часть кода с помощью библиотеки <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;
Всем заранее спасибо!