2013-07-17 42 views
1

我們有一個OpenCL程序,可以在我的OS X機器上正常工作。我們只安裝了一臺配有Xeon Phi和Intel MPSS的機器。但是,即使不使用Phi,但使用Xeon CPU時,我們得到的CL_PROGRAM_BUILD_STATUS也是CL_BUILD_NONEIntel MPSS - clGetProgramBuildInfo返回CL_BUILD_NONE

不幸的是,我們無法找到任何可能導致CL_BUILD_NONE的文檔。你有什麼建議如何調試?

預先感謝您!

版本:

[@memphis:~] $ cat /etc/SuSE-release 
SUSE Linux Enterprise Server 11 (x86_64) 
VERSION = 11 
PATCHLEVEL = 2 

[@memphis:~] $ uname -a 
Linux memphis 3.0.13-0.27-default #1 SMP Wed Feb 15 13:33:49 UTC 2012 (d73692b) x86_64 x86_64 x86_64 GNU/Linux 

[@memphis:~] 1 $ rpm -qa |grep intel 
intel-mic-2.1.6720-15.suse 
intel-mic-mpm-2.1.6720-15.suse 
opencl-1.2-intel-mic-3.0.67279-1 
intel-mic-sysmgmt-2.1.6720-15.suse 
intel-mic-kmod-2.1.6720-15.3.0.13.0.suse 
intel-mic-gdb-2.1.6720-15.suse 
intel-mic-flash-2.1.386-3.suse 
intel-mic-cdt-2.1.6720-15.suse 
opencl-1.2-intel-devel-3.0.67279-1 
intel-mic-micmgmt-2.1.6720-15.3.0.13.0.suse 
opencl-1.2-intel-cpu-3.0.67279-1 
intel-mic-gpl-2.1.6720-15.suse 
intel-mic-crashmgr-2.1.6720-15.suse 

回答

1

找到它。我不確定爲什麼我以&retcl_int返回值)作爲最後一個參數,而不是將其作爲clBuildProgram的返回值。移動它,設置的最後一個參數設置爲NULL解決了這個問題:

wrong: 
clBuildProgram(*program, 1, &device_id, opts.str().c_str(), NULL, &ret); 
correct: 
ret = clBuildProgram(*program, 1, &device_id, opts.str().c_str(), NULL, NULL); 

我不明白,爲什麼這個問題發生 - 顯然編譯/ OpenCL的庫瞭解,我想用pfn_notify和異步建立我的內核。我是,但是,不知道這種行爲是完全符合於OpenCL的文檔:

If pfn_notify is NULL, clBuildProgram does not return until the build has completed. 

在我的代碼中,pfn_notify說法竟是NULL,但是USER_DATA是(錯誤地)沒有。雖然我的代碼沒有任何意義,但我相信當pfn_notifyNULL時,user_data應該被忽略。

我在英特爾論壇上發佈了這個內容,看他們是否同意我對文檔的解釋。

1

The documentation for clGetProgramBuildInfo似乎很簡單:

CL_BUILD_NONE。如果在設備的指定程序對象上沒有執行clBuildProgram,clCompileProgram或clLinkProgram,則返回構建狀態。

你提到你的程序在其他平臺上工作,但也許你最終導致平臺之間的流程略有不同,導致這些方法在新流程中沒有被正確調用?我建議仔細驗證早期調用的函數的返回值,看看你得到了什麼。

+0

謝謝 - 這是一個很好的建議。原來,這是我的編程錯誤,以及蘋果和英特爾之間clBuildProgram的不同解釋(請參閱我的其他答案)。 – mrks