2012-09-06 89 views
8

對於我的CUDA開發,我使用的是16核的機器和1個帶16個SM的GTX 580 GPU。對於我所做的工作,我計劃啓動16個主機線程(每個核心1個),每個線程啓動1個內核,每個線程有1個塊和1024個線程。我的目標是在16個SM上並行運行16個內核。這可能/可行嗎?多個主機線程啓動各個CUDA內核

我試圖儘可能多地閱讀獨立的上下文,但似乎沒有太多可用的信息。據我所知,每個主機線程可以有自己的GPU上下文。但是,如果我使用獨立的上下文,我不確定內核是否可以並行運行。

我可以將所有16個主機線程的所有數據讀入一個巨型結構,並將其傳遞給GPU以啓動一個內核。但是,它將會太多複製,並且會降低應用程序的速度。

+0

多個上下文不能同時使用一個GPU,所以不行,這是行不通的。 – talonmies

+0

謝謝。你能把上面的答案作爲答案,以便我能接受嗎? – gmemon

+0

@gmemon,請參閱我的評論以在CUDA 5.5中創建和執行多個上下文。你在16SM中成功執行了16個內核嗎?最後你的解決方案是什麼? – Tariq

回答

4

儘管多線程應用程序可以在同一GPU上同時保存多個CUDA上下文,但這些上下文無法併發執行操作。當處於活動狀態時,每個上下文都有唯一的GPU使用,並且必須在另一個上下文(可能包括使用渲染API或顯示管理器的操作)才能訪問GPU之前屈服。

所以總之,沒有這種策略不能適用於任何當前的CUDA版本或硬件。

+0

我正在使用CUDA 5.5。它是否支持在單個GPU上同時執行多個CUDA上下文? – Tariq

+0

我在主機上創建兩個獨立的線程,並使用驅動程序API創建CUDA上下文。這些上下文在CUDA 5.5中同時執行。 – Tariq

6

一次只能在GPU上有一個上下文。實現所需的並行性的一種方法是使用CUDA流。您可以在上下文中創建16個流,並按名稱啓動memcopies和kernel到流中。您可以在以下網址快速使用流媒體會議閱讀更多內容:http://developer.download.nvidia.com/CUDA/training/StreamsAndConcurrencyWebinar.pdf。完整的API參考資料位於CUDA工具包手冊中。 CUDA 4.2手冊可在http://developer.download.nvidia.com/compute/DevZone/docs/html/C/doc/CUDA_Toolkit_Reference_Manual.pdf獲得。