2010-10-06 95 views
1

我一直有一個艱難的時間建立一個實驗,我和CUDA設備上分配內存,採取指針存儲在設備上,在OpenCL中使用它,返回結果。我想看看這是否可能。我很難讓CUDA項目工作,所以我只在他們的SDK中使用了Nvidia的模板項目。在生成文件中,我將-lOpenCL添加到common.mk的libs部分。當我這樣做的時候一切都很好,但是當我將#include <CL/cl.h>添加到template.cu中時,我可以開始進行OpenCL調用,我得到了100個錯誤。它們看起來都與此類似,但最後有不同的功能名稱:試圖在NVIDIA的SDK模板,CUDA OpenCL中混合

/usr/lib/gcc/x86_64-linux-gnu/4.4.1/include/xmmintrin.h(334): error: identifier "__builtin_ia32_cmpeqps" is undefined

我很難找出原因。如果可以的話請幫忙。另外,如果有更簡單的方法來設置一個可以調用CUDA和OpenCL API的項目,請告訴我。

+0

爲什麼混合CUDA和OpenCL? – 2010-10-06 18:57:04

+0

我正在使用Ubuntu中的OpenCL項目(​​必須是OpenCL),而且我需要像cufft這樣的庫,它只能在CUDA中使用。我計劃將此作爲短期解決方案,直到Apple的OpenCL FFT庫被移植到Ubuntu或其他某種fft庫可用於Ubuntu上的OpenCL。 – smuggledPancakes 2010-10-06 21:01:41

回答

1

我還沒有真正與CUDA的工作,所以我不知道我的回答多麼有用的。

從我瞭解你正在嘗試直接從您的CUDA hostcode,這是,如果我記得使用來自NVIDIA,而不是標準的GCC編譯器的一些正確編譯使用OpenCL的。所以問題可能是這個編譯器沒有實現必要的內置函數來處理所提到的頭文件。 看看這裏有類似的問題,它的解決方案: http://forums.nvidia.com/lofiversion/index.php?t88573.html

看來你得把它需要的OpenCL API到不同的(非CUDA)編譯單元,使其在非NVIDIA的編譯器編譯一切。

但我不會指望這個工作(因爲opencl緩衝區不只是指向內存的指針,但應包含一些元信息),只是因爲沒有真正的理由它應該工作,如果它沒有保證它繼續這樣做。

,你可以試試如果你真的想使用OpenGL的互操作的,因爲兩個OpenCL和CUDA有擴展,允許創建從OpenGL的緩衝區緩存。

但是你爲什麼要這麼做?什麼讓你遠離使用蘋果公司的實施短期,因爲IIRC它的開源和大部分(opencl部分)反正應該是平臺無關的。

+0

我喜歡你使用OpenGL緩衝區的想法,我相信以前我聽說過。這似乎是一個更安全的方式來做到這一點。 我看着你發佈的鏈接,看起來好像包裝會起作用,我會試一試,因爲我想不出其他什麼。 我們目前使用的是cufft,因爲我們可以通過JCUDA訪問它,然後從Java上開始,我們可以在Linux,Mac或Windows機器上運行我們的程序。有了Apple的FFT庫,我們必須自己移植它,以便通過JOCL訪問它,維護者已經表達了對自己做的興趣。 – smuggledPancakes 2010-10-07 13:24:55