Her bölüm için birden fazla iş parçacığı kullanarak kod bölümlerini paralel olarak yürütmenin bir yolunu arıyorum. Örneğin, 16 iş parçacığım ve iki görevim varsa, bu iki görevi aynı anda yürütmek için her biri 8 iş parçacığı istiyorum. OpenMP, genel kodu paralel olarak yürüten birkaç yapılandırmaya (section
, task
) sahiptir, ancak bunlar tek iş parçacıklıdır. Benim senaryoda, section
veya task
kullanarak, 14 iş parçacığı tarafından boş yere otururken, iki görevden birini yürüten bir iş parçacığı ile sonuçlanır.OpenMP'de bir kod bölümüne birden fazla iş parçacığı atayabilir miyim?
OpenMP'de bile böyle bir şey var mı? Eğer öyleyse, bunu nasıl yaparım ve değilse, bu amaçla ne kullanabilirim?
Zaman ayırdığınız için teşekkürler!
düzenlemek 2:
bana bir örnek kodunu bu soru üzerine genişletelim: Bu kullanarak iç içe paralel bölgeleri yapabilirsiniz
class some_class{
void task(){
cout<<"Entering the task method"<<endl;
#pragma openmp parallel for
for(int i=0; i < large_matrix.rows(); i++){
perform_thread_safe_operation(large_matrix.getRow(i));
}
}
matrix large_matrix;
};
void main(){
//I have 16 cores, so I want to spawn 16 threads
some_class o1;
some_class o2;
// I want 8 of the 16 threads to execute this line:
o1.task();
// and 8 remaining threads to execute this line:
o2.task();
}
Ben sadece bir çözüm ile benim cevap güncellendi. – Mysticial