正如標題所說,當我跑我OpenCL
內核整個屏幕停止重繪(直到我的程序與計算做監視器上顯示的圖像是一樣的。這是真實的,即使在情況下,我拔掉它從我的筆記本電腦中插回來 - 總是顯示相同的圖像),並且計算機似乎也不會對鼠標移動做出反應 - 光標停留在相同的位置。的OpenCL計算凍結屏幕
我不知道爲什麼會發生這種情況。它可能是我的程序中的一個錯誤,或者這是一個標準的行爲?
在Google上搜索時,我在AMD的論壇上發現了this線程,一些人認爲這很正常,因爲當GPU忙於計算時,它無法刷新屏幕。
如果這是真的,還有什麼辦法可以解決這個問題嗎?
我的內核計算可能需要幾分鐘的時間,並有我的電腦幾乎不能用於整個那段時間真的很痛苦。
EDIT1:這是我的當前設置:
- 顯卡是ATI的Mobility Radeon HD 5650與512 MB的內存和最新的Catalyst測試版驅動程序從AMD網站
- 顯卡可切換 - 英特爾集成/ ATI專用顯卡,但是 我禁用了在BIOS中的切換,否則我無法獲得在Ubuntu上運行的驅動程序 。
- 操作系統是Ubuntu 12.10(64位),但是這也發生在Windows 7(64位)上。
- 我有我的顯示器通過HDMI插入(但筆記本電腦屏幕凍結 太多,所以這不應該是一個問題)
EDIT2:所以我的代碼玩了一天後,我把意見從你的反應和改變了我的算法是這樣的(僞代碼):
for (cl_ulong chunk = 0; chunk < num_chunks; chunk += chunk_size)
{
/* set kernel arguments that are different for each chunk */
clSetKernelArg(/* ... */);
/* schedule kernel for next execution */
clEnqueueNDRangeKernel(cmd_queue, kernel, 1, NULL, &global_work_size, NULL, 0, NULL, NULL);
/* read out the results from kernel and append them to output array on host */
clEnqueueReadBuffer(cmd_queue, of_buf, CL_TRUE, 0, chunk_size, output + chunk, 0, NULL, NULL);
}
所以現在我拆主機整體工作量和發送的塊到GPU。對於每一個數據塊我排隊一個新的內核,我得到的結果會以正確的偏移量附加到輸出數組。
這是你的意思,計算應該分開?
這似乎是解決凍結問題的方法,現在我可以處理比可用GPU內存大得多的數據,但我仍然不得不做出一些很好的性能測試,看看有什麼好處塊大小...
你的配置是什麼? – 2013-04-23 18:51:03
不知道你的配置是什麼意思,但我用我當前的硬件設置的信息更新了我的問題。 – jcxz 2013-04-23 19:33:21
是的,你有正確的想法來劃分工作量。 – chippies 2013-04-26 13:26:48