尝试在NVIDIA的SDK模板中将OpenCL与CUDA混合使用

时间:2010-10-06 13:39:00

标签: sdk cuda opencl gpgpu nvidia

我一直很难设置一个实验,我在设备上用CUDA分配内存,将指针指向设备上的内存,在OpenCL中使用它,然后返回结果。我想看看这是否可行。我很难让CUDA项目工作,所以我只是在他们的SDK中使用了Nvidia的模板项目。在makefile中,我将-lOpenCL添加到common.mk的libs部分。当我这样做时一切都很好,但是当我向template.cu添加#include <CL/cl.h>以便我可以开始进行OpenCL调用时,我会遇到100个错误。它们看起来都与此类似,但最后有不同的函数名称:

  

/usr/lib/gcc/x86_64-linux-gnu/4.4.1/include/xmmintrin.h(334):错误:   标识符“__builtin_ia32_cmpeqps”未定义

我很难搞清楚原因。如果可以的话请帮忙。此外,如果有一种更简单的方法来设置一个能够调用CUDA和OpenCL API的项目让我知道。

1 个答案:

答案 0 :(得分:1)

我还没有和cuda合作过,所以我不知道我的回答是多么有用。

根据我的理解,你试图直接从你的cuda主机代码中使用opencl,如果我记得使用nvidia中的某些编译器而不是标准gcc正确编译。所以问题可能是这个编译器没有实现必要的内置函数来处理上面提到的头文件。 在这里寻找类似的问题,它的解决方案: http://forums.nvidia.com/lofiversion/index.php?t88573.html

似乎你必须将需要opencl api的所有内容放入一个不同的(非cuda)编译单元,以便它将由非nvidia编译器编译。

但是我不会指望这个工作(因为opencl缓冲区不只是指向内存的指针,但应该包含一些元信息),仅仅是因为它没有真正的原因它应该工作,如果它确实无法保证它继续这样做。

如果您真的想使用opengl进行互操作,可以尝试一下,因为opencl和cuda都有扩展,允许从opengl缓冲区创建缓冲区。

但是你为什么要这样做呢?什么阻止你使用Apple的实施短期,因为IIRC它是开源的,其中大部分(opencl部分)应该是平台独立的。