work-stealing

    0熱度

    1回答

    下面的代碼旨在展示一個簡單的遞歸叉連接的使用(find max),我知道Java JIT可以在一個簡單的單線程循環中更快地實現這一點,但它僅僅用於演示。 我最初使用ForkJoin框架實現了find max,該框架適用於大型雙打數組(1024 * 1024)。 我覺得我應該可以使用ForkJoin框架,只使用Executor.workStealingPool()和Callables/Futures

    1熱度

    1回答

    在我的程序中,我對每個在內核lauch中發佈的塊都有一個工作變量。每個塊停留在一個循環中,在其deque中進行處理,處理它並將動態生成的工作推回。一組deque標誌被維護,指示哪些deques是活動的,即有工作。如果一個deque是空的,內核會進入另一個循環,試圖從另一個塊的雙端隊列中竊取工作。當沒有更多的deques被激活時,達到停止條件。 在測試中,我設置了所有以1個工作項開始的deques。

    6熱度

    3回答

    在我的項目中,我構建了一個Java執行框架,它接收來自客戶端的工作請求。工作(不同規模)被分解爲一組任務,然後排隊等待處理。有單獨的隊列來處理每種類型的任務,每個隊列都與一個ThreadPool相關聯。 ThreadPools的配置方式使得引擎的整體性能最佳。 這種設計可以幫助我們有效地平衡請求,而大型請求不會佔用系統資源。然而,有時當某些隊列爲空並且它們各自的線程池閒置時,解決方案變得無效。 爲

    0熱度

    1回答

    我正在閱讀描述Cilk竊取調度性能的文件。 1)我的理解是,調度程序不知道關鍵路徑的任務,只是試圖通過竊取任務圖中不「深」的任務來維持其執行。那是對的嗎? 2)另外,Cilk工作竊取調度程序是否假設所有任務具有相似的複雜性?如果任務的複雜性不統一,是不是調度程序在實現最佳性能方面不夠靈活,即最佳的負載平衡?

    2熱度

    3回答

    爲什麼我們需要偷工減料? (例如在Cilk)主人在頂端工作,小偷從底部偷竊。爲什麼它有用? 我們可能會有多個盜賊從底部偷竊。那麼,我們不需要鎖嗎? 我讀過一些地方,大型作業(例如在樹中創建)被添加到底部。所以,從底部偷竊更有效率(減少溝通,因爲竊賊通過竊取他們變得更加忙碌)。是嗎?

    2熱度

    1回答

    我想改進我的fork/join小示例,以顯示在Java Fork/Join框架執行期間發生偷工作。 我需要對代碼進行哪些更改?示例的目的:僅對線程進行線性研究,以瞭解在多個線程之間分解工作的值。 package com.stackoverflow.questions; import java.util.LinkedList; import java.util.List; import ja

    1熱度

    1回答

    我是cilk ++的新手,我想使用cilk的工作竊取調度器。我無法找到關於此的很多信息。有誰能幫我解決這個問題嗎?謝謝。

    1熱度

    1回答

    我目前正在爲C++使用綠色線程使用工作竊取來實現多個硬件線程上的調度器之間的負載平衡。 我已將主環境固定到其硬件線程,這意味着它不會被盜,因此遷移到其他硬件線程。 我相信我已經讀過這個地方,如果主要上下文在哪裏被盜,並返回(退出)在不同的硬件線程中從它的起源地是未定義的行爲。但是,我現在似乎無法找到任何消息來源。 這是不確定的行爲?引用來源將是完美的。

    21熱度

    1回答

    我想通過一個方法提交Runnable任務到ForkJoinPool: forkJoinPool.submit(Runnable task) 請注意,我用的JDK 7 引擎蓋下,他們轉變成ForkJoinTask對象。 我知道ForkJoinPool是有效的,當一個任務被遞歸分割成小的時候。 問: 是否工作竊取仍處於ForkJoinPool工作,如果沒有遞歸? 在這種情況下值得嗎? 更新1: 任

    10熱度

    1回答

    下面是否正確? 的disruptor pattern具有更好的並行性能和可擴展性,如果每個條目有多種方式來處理(IO操作或註釋),因爲可以使用多個消費者不爭進行並行化。 相反,work stealing(即本地存儲條目和竊取從其他線程的條目)具有更好的並行性能和可擴展性,如果每個條目具有唯一的一個單一的方式進行處理,因爲在破碎器中的條目disjointly分佈到多個線程模式導致爭用。 (而且是破壞