4
這是關於我剛纔的問題:D concurrent writing to bufferd taskpool等待,直到所有的任務都做了
說你有一段代碼,包括2個連續的代碼塊A和B,其中B依賴於A.此在編程中很常見。 A和B兩者由一個循環,其中每一次迭代可以並行運行的:當A完成時,才能執行
double[] array = [ ... ]; // has N elements
// A
for (int i = 0; i < N; i++)
{
job1(array[i]); // new task
}
// wait for all job1's to be done
// B
for (int i = 0; i < N; i++)
{
job2(array[i]); // new task
}
乙。如何在執行B之前等到A的所有任務完成?
我可以看到你的觀點。然而,如果我們想用foreach迭代那些並不那麼簡單的事情呢?如果你想迭代奇數指數呢?我需要建立一個新的數組,以便我可以使用foreach嗎?有scopedTask這幾乎做我所需要的,除了它的作用域的迭代,而不是作爲一個整體的循環... –
@Daevius:如果你想迭代奇數指數,你可以使用std.range.stride或foreach( i; parallel(std.range.iota(1,array.length,2))。std.parallelism是在假設std.algorithm和std.range中的高階範圍提供了這種靈活性的情況下創建的必須在std.parallelism的設計中明確地規劃 – dsimcha
確實,由於範圍創建的許多功能,這是一個整潔的設計。使用我的二維FFT算法在四分之一時,速度提高了約200%核心:),謝謝。順便說一句,真的不是真的與希臘字母Iota有關嗎? ^^ –