2013-03-11 58 views
0

我總共啓動了256個線程。當我通過啓動一個塊來完成時,一切正常。但是,當我以2x8塊(8x8線程)啓動線程時,內核會無限循環。嗯,真正的問題是我的內核代碼等待來自其他模塊的部分結果,並且在運行多次測試後,我觀察到這些模塊是以隨機順序啓動的,它們似乎是按順序執行的。單內核啓動中塊執行的CUDA順序

如果CUDA塊從同一個內核啓動,它們是否並行運行?我使用的GPU不是限制,因爲我只啓動256個線程,GTX 580可以處理它們。 (在16x16線程的單個塊啓動中一切正常) 有沒有一種方法可以知道執行順序或可能指定它?

+0

只有一個總共4個塊的網格,沒有理由說所有4個塊都不會同時開始執行,或者同時在GTX 580的4個不同的SM中執行。您沒有提供關於您的代碼的真實細節,也沒有任何描述你如何「觀察到這些塊......似乎是按順序執行的。」目前GPU中沒有能力先驗地知道塊的執行順序或指定塊的執行順序。 – 2013-03-11 14:21:52

回答

5

是的,塊並行運行。並行運行的塊數取決於GPU的性能,但重要的是啓動塊的順序爲undefined不確定。閱讀更多here - 第2.2章,最後三段。

+1

鏈接到源代碼將很不錯 – 2013-03-11 13:19:45

+0

但在我的情況下它們並不是平行運行。塊只在其他塊完成執行後才運行。我是否需要爲並行執行啓用某些功能?只要他們平行,隨機訂單對我來說都很好。 – tecfreak 2013-03-11 13:31:51

+0

@tecfreak:我沒有完全明白你想問什麼。所以進一步解釋:只要GPU有空閒資源(未完全佔用流式多處理器(SM)),某個未執行塊將在某個SM上被選取並啓動,並將駐留在那裏,直到該塊中的所有線程都完成爲止。 – stuhlo 2013-03-11 13:59:51