我遇到了一個奇怪的問題。 我有一個簡單的內核。它工作正常。 我發現,如果我刪除一些行或在opencl內核文件中引入一些錯誤,然後嘗試運行該程序,則程序運行良好,就好像它具有更正的代碼並且不會給出任何錯誤。 但是由於內核有錯誤,它應該會報錯。 因此,它無法檢測到錯誤,並且如果它發現錯誤,它將以先前正確版本的代碼運行。 這是一個特色嗎?這裏有什麼不對?即使內核有錯誤,Opencl運行正常
0
A
回答
1
這不是OpenCL的功能。我猜測原因是:
- 你沒有給你
clCreateProgramWithSource
你認爲你給它的內核。檢查這種方法的一個好方法是在打電話之前立即打印出您提供給clCreateProgramWithSource
的字符串。 - 您的應用程序「緩存」內核,隨後的執行使用
clCreateProgramWithBinary
而不是(修改後的)內核源代碼。
2
我強烈地感覺到你忘了加OpenCL的錯誤檢查每個OpenCL的API在你的代碼,如果你沒有捕獲錯誤明確的OpenCL內核只會繼續,如果沒有問題。如果你還沒有做錯誤檢查,然後可以做如下(OpenCL中的程序應該不會錯過這個)
(變化的基礎上的API調用)
error=clGetPlatformIDs(1, &platform, &platforms);
if (error != CL_SUCCESS) {
printf("\n Error number %d", error);
}
,你在你的評論中提及即使內核出現錯誤,也能獲得正確的值,這是因爲設備內存或主機內存具有上次運行的結果(這可能會發生一段時間)。初始化您的輸出緩衝區爲0,然後推到GPU並回讀,現在可能會看到亂碼輸出。
1
設備內存不會在內核運行或程序啓動之間清除。由於您正在評論實際寫入內存的代碼,因此您只能獲取上一次運行時寫入的代碼。使用NVIDIA GPU和較舊的驅動程序版本,我甚至在系統重啓時看到了內存持久性。
爲了證實這一點,您可以嘗試分配多個緩衝區並使用先前未觸及的緩衝區啓動錯誤的內核。
相關問題
- 1. OpenCL內核錯誤-11
- 2. OpenCL內核構建錯誤
- 3. OpenCL內核編譯錯誤
- 4. 運行時OpenCL內核代碼中的錯誤
- 5. 在多個GPU上運行OpenCL內核?
- 6. OpenCL中FFT 2D內核運行時= 0
- 7. jQuery ajax:即使響應正常也會運行錯誤200
- 8. 有沒有辦法在mac上運行opencl內核代碼
- 9. 即使進程正常運行,如何創建核心轉儲?
- 10. 在OpenCL內核
- 11. 即使所有指針都正常,分段錯誤(核心轉儲)
- 12. Pydev將無法正常運行(即導入引發錯誤)
- 13. 運算符在OpenCL內核中重載
- 14. OpenCL內核參數
- 15. OpenCL內核參數
- 16. 多個OpenCl內核
- 17. 殺死OpenCL內核
- 18. 剖析OpenCL內核
- 19. 優化opencl內核
- 20. opencl - 內核限制
- 21. OpenCL內核問題
- 22. 調試OpenCL內核
- 23. 並行拷貝和opencl內核執行
- 24. 正常的指針算術在opencl內核上工作嗎?
- 25. OpenCL - 主內核填充緩衝區並在子內核上運行
- 26. 從另一個OpenCL內核調用OpenCL內核
- 27. OpenCL奇怪的內核行爲
- 28. 並行訪問OpenCL內核參數值
- 29. OpenCL CodeXL Profiler多次執行內核
- 30. OpenCL內核的時序執行
請發佈一些關於如何構建內核的代碼。 – DarkZeros