該算法在本文中描述:Thread Scheduling for Multiprogrammed Multiprocessors。簡而言之,計算在進程中被分配,並且每個進程都有一個線程隊列來完成這項工作。一個進程可以將(彈出)線程推送到(或離開)其deque底部,而其他進程可以通過從頂部彈出線程來工作。因此,工作可以通過推動操作而產生。該算法如下。此線程調度多處理器算法是否適用於所有情況?
我的問題是有關的PoPToP()工作stealling功能。我認爲它不會適用於所有情況。例如,假設一個進程A有一個隊列Q和一個進程B試圖從Q上竊取工作,調用popTop()。假設此時B在popTop()和localBot = X的第2行之後被搶先。如果A運行並且popBottom()直到Q < = X的底部,當B恢復運行時,它將得到已經由A處理的線程。
我的想法是否正確?我需要驗證它,因爲我會實施它來在CUDA程序中進行工作平衡。
這可能更適合cstheory,cs或數學。 – templatetypedef