在我的主要功能我設置:HTOP和OpenMP線程
omp_set_num_threads(20);
告訴OpenMP的使用20個線程(可有40個線程)。
然後我執行我的代碼,其中包含了指令:
#pragma omp parallel for shared(x,y,z)
主for循環,並通過監控HTOP CPU使用率(也許不是最好的方式,但仍然)。 for循環必須執行50個「任務」,每個任務都需要很長時間。我通過htop觀察到的是,任務完成後,線程數會下降。具體來說,使用20個線程,我期望編輯看到2000%的CPU使用率,直到剩餘的任務少於20個之後線程應該「釋放」自己。但是,我所看到的是2000%,在完成n個任務後,我看到了2000% - (n * 100%)的表現。因此,看起來任務完成後,線程關閉而不是完成新任務。
這是預料之中還是聽起來很奇怪?
因此,在20個任務之後,CPU使用率下降到零,並且您的並行循環永遠不會結束? –
否,結束。我的問題是爲什麼線程在仍有任務需要處理時顯示死亡。 – user1938803
由於50除以20是2.5,並且大多數編譯器的默認循環調度是「靜態」,因此一半線程處理兩次迭代,另一半處理三次迭代。 –