2013-08-18 87 views
1

我一直在使用OpenCL開始使用GPU進行開發。 我一直在玩弄限制的代碼。OpenCL使用GPU的最佳實踐

在此期間,我一直在遇到這樣的情況,即GPU上的計算時間相對較長,導致GUI無響應和/或GPU任務花費很長時間纔會重置設備驅動程序。

雖然我明白爲什麼發生這種情況,我不在尋找和解釋爲什麼,我希望能夠理解的是我可以用系統用於GUI操作的GPU來推送計算多遠。

是否有任何引導線/這種類型的交互,

的最佳做法,是否有任何編程的方法,這將允許長時間運行的GPU計算和仍然允許GUI保持響應。

我知道基本建議是將GPU任務分割得相對較小我假設這是不可能的,因爲我正在探索GPU編程的限制。

任何在線討論將是非常有用的。

吉姆ķ

+0

您可能對異步編程感興趣,這是在後臺執行某些任務時保持應用程序響應的常用「解決方案」。它取決於你使用的是哪種語言,在C++中有提升或最新的C++ 11標準,並且都支持異步任務/方法。 – user2485710

+0

對不起,如果我沒有說清楚。窗口本身變得沒有反應,而不是我的GUI。事實上,我正在使用命令行 –

回答

0

要回答你的問題,沒有什麼可以做到的,以實現你的目標,即擁有一個長時間運行的內核並在一個GPU上保持一個正常運行的GUI。如果您想要長時間運行的內核和正在運行的GUI,則必須使用專用GPU進行計算。如果您想在同一GPU上進行計算時使用響應式圖形用戶界面,則必須使用運行較短的內核。您可以每週在AMD或Nvidia論壇上抱怨此功能。

唯一的平臺獨立的方式來分開你的工作,想到的是限制發送到GPU的工作量,以便它在1/60秒(對於60Hz屏幕)完成幷包括睡眠命令,讓CPU線程暫時休眠一段時間,以便其他應用程序可以將任務發送到GPU。您可能需要調整時間限制以找到不影響用戶的內容。

+0

這是我的預期。只是希望得到具有更多OpenCL知識的人員的證實。 –

0

一種解決方案是使用兩個顯示設備:一個用於OS和另一個用於計算。但是打破長期利益是有好處的。例如,假設GPU任務需要10天。您如何知道在10天內GPU任務確實運行正常?將任務分解爲幾秒的段可讓您向控制程序添加進度報告功能。分解任務還允許控制程序執行定期狀態保存功能以在電源故障後恢復。如果您想使用多個GPU來進一步加速計算,那麼將任務分解爲更小的片段是非常重要的。每個GPU在完成前一個細分時都可以分配一小部分工作。這樣,所有GPU將保持完全加載狀態,直到任務完成。相反,如果每個GPU將任務劃分爲大部分,則難以或不可能確定這些部分的大小,以便GPU同時完成。

我相信大多數GPU工作負載可以分解成幾秒的片段,而不會有任何顯着的性能損失。因此,從這個意義上說,分解任務並不會減損GPU計算「推動極限」的目標。如果控制程序持續向OS顯示器使用的GPU分派工作,則可能仍會影響OS顯示的響應。不會降低性能的解決方案是使用遠程桌面,VNC或類似方式遠程訪問機器。

+0

我知道,從編程的一般原理來看,這一切都是真實的。但是,由於我正在探索限制,我仍然處於這種狀況。 (其原因是該技術的預期未來使用)。我目前所擁有的(同樣我在探測限制)是1M的工作項目和4的工作組。總時間大約需要5秒(可調整)。在執行它時,系統GUI不起作用。這又是一個設計,因爲我正在探索極限。 –

+0

我同意ScottD。如果您的問題需要5秒鐘,則需要將其分開。 GPU任務應該在不到一秒的時間內運行,否則系統將變得無法響應。運行100個內核,每個內核爲5000毫秒,每個內核爲50毫秒,效率不會低於5000毫秒。 – Dithermaster