我正在研究一個算法,可以做很多次相同的操作。由於該操作由一些線性代數(BLAS)組成,因此我將嘗試使用GPU進行此操作。opencl命令隊列如何工作,我可以問些什麼
我寫了我的內核,並開始在命令隊列上推送內核。由於每次打電話後我都不想等待,我想我會試着用事件串聯我的電話,然後開始在隊列中推送這些電話。
call kernel1(return event1)
call kernel2(wait for event 1, return event 2)
...
call kernel1000000(vait for event 999999)
現在的問題是,是否所有這一切被推到做驅動程序存儲區的隊列圖形芯片?它對我可以使用的事件的數量或者命令隊列的長度有一個限制,我查看過但我一直無法找到它。
我正在使用atMonitor來檢查我的GPU的利用率,並且很難將它推到20%以上,這可能是因爲我無法以足夠快的速度將呼叫推出去嗎?我的數據已經存儲在GPU上,我傳遞的所有內容都是實際的通話。
好的,你能告訴我你從哪裏知道嗎?我試圖找出opencl的實際規格,但它並不容易(我正在考慮切換到CUDA)。 你說什麼,驅動程序捆綁的命令,並將它們發送到大塊的GPU? –
我認爲驅動程序根據OpenCL文檔clFinish塊自動捆綁命令,直到傳入的命令隊列中的所有命令都已完成執行,因此除非您調用clFinish OpenCL將決定何時執行命令。然而,呼叫clFinish是昂貴的,應該避免,但我仍然會嘗試。您是否認爲您的GPU可能足夠快以執行您的計算,而不需要100%的功率?我唯一能想到的另一件事是OpenCL限制了GPU的使用,所以你的電腦顯示屏不會鎖定 –