[英]Using OpenMP to parallelize a for loop
我是OpenMP的新手。 當我使用並行化for
循環時
#pragma omp parallel for num_threads(4)
for(i=0;i<4;i++){
//some parallelizable code
}
是否保證每個線程都只取一個i
值? 當num_threads
不等於for循環的總次數或不平均分配for循環的總次數時,通常如何在線程之間分配循環工作? 是否可以使用命令指定每個線程僅使用i
一個值,或者每個線程使用i
的值個數?
循環結構中的工作划分由進度表決定。 如果不存在schedule
子句,則使用def-sched-var調度,它是實現定義的。
您可以使用schedule (static, 1)
,在您的情況下,它可以確保每個線程都將恰好獲得一個值。
我強烈建議您看一下OpenMP規范 ,表2.5和2.7.1.1。
進行這種假設可能有正當的理由,但總的來說,循環代碼的正確性不應該依賴於此。 首先,我會將其視為性能提示。
根據您的用例,您可能需要考慮任務或只是並行構造。 如果您將此類詳細信息用於循環,請確保在標准中對循環進行了詳細說明,而不僅僅是在您的特定實現中有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.