2011-08-27 58 views
7

我有一些OpenCL內核沒有做他們應該做的,我很想在Xcode中調試它們。這可能嗎?如何在Xcode 4.1中調試OpenCL內核?

如果不是,我有什麼方法可以在我的基於CPU的內核中使用printf()?當我在我的內核中使用printf()時,OpenCL編譯器總是給我一大堆錯誤。

回答

3

將格式字符串轉換爲const char *似乎可以解決此問題。

這對我的作品在Lion上:

printf((char const *)"%d %d\n", dl, dll); 

這有上述的錯誤:

printf("%d %d\n", dl, dll); 
0

你給了gDEBugger一個試試嗎?我認爲這是您在Mac上進行OpenCL調試的唯一選擇。

英特爾在其新的OpenCL 1.1 SDK中提供了printf,但這隻適用於Linux和Windows。 Lion有OpenCL 1.1,但至少我的Core 2 Duo不支持printf擴展。據我所知,AMD仍在開發他們的OpenCL工具,而Nvidia調試工具僅用於CUDA。

+0

我下載gDEBugger但它說我的操作系統(OS X 10.7.1獅子)是不支持 –

+0

哦。所以,除非我忽略了一些東西,看起來你需要安裝另一個操作系統或者通過返回值進行調試。 –

0

您是否嘗試添加此編譯指示以啓用printf?

#pragma OPENCL EXTENSION cl_amd_printf : enable 
+0

我試過#pragma OPENCL EXTENSION cl_intel_printf:啓用和你發佈的版本,它仍然給我同樣的錯誤。 –

+0

你有什麼錯誤? – Nigel

+0

OpenCL構建錯誤:編譯器構建日誌: <程序源>:20:12:錯誤:兩個指針之間使用不同的地址空間進行非法隱式轉換 printf(「Hello World」); ('address_space(2))'[12]'丟棄限定符,預期'char const * ' printf(「Hello World」); ^ ~~~~~~~~~~~~~ –

1

您可能還想嘗試使用Quartz Composer來測試您的內核。如果您有權訪問WWDC 2010 videos,我相信他們將展示如何使用Quartz Composer在Sessions 416中快速創建OpenCL內核原型:「在您的應用程序中使用OpenCL」或418:「最大化OpenCL性能」。在WWDC 2009和2008上也有一些關於此的會議,也可能通過iTunes在iTunes上提供。

使用Quartz Composer,您可以快速設置內核的輸入和輸出,然後實時監控結果。您可以避免更改編譯測試循環,因爲在鍵入時編譯所有內容。語法錯誤等會在您更改代碼時彈出,這可以很容易地識別這些錯誤。

我已經使用這個工具來開發和測試OpenGL着色器,它們與OpenCL內核有許多共同之處。