我一直很难设置一个实验,在该实验中,我将内存分配给设备上的CUDA,将指针带到设备上的内存,在OpenCL中使用并返回结果。我想看看是否可能。我很难完成一个CUDA项目,所以我只是在他们的SDK中使用了NVIDIA的模板项目。在makefile中,我将-lopencl添加到common.mk的libs部分。当我这样做时,一切都很好,但是当我添加 #include <CL/cl.h> 要template.cu,这样我就可以开始拨打opencl呼叫,我会遇到100个错误。它们看起来都与此相似,但最终具有不同的函数名称:

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

我很难弄清原因。如果可以的话请帮忙。另外,如果有一种更简单的方法来设置一个可以调用CUDA和OPENCL API的项目,请告诉我。

有帮助吗?

解决方案

我没有真正与CUDA合作,所以我不知道我的答案有多帮助。

据我了解,您正在尝试直接从CUDA HOSTCODE使用OpenCL,这是我记住使用NVIDIA的某些编译器而不是标准GCC编译的。因此,问题可能是该编译器无法实施必要的内置来与上述标头配合使用。在这里寻找类似的问题,这是解决方案:http://forums.nvidia.com/lofiversion/index.php?t88573.html

看来您必须将需要OpenCL API的所有内容都放入另一个(非CUDA)的编译单元中,以便将其编译为非NVIDIA编译器。

但是,我不会指望这种工作(因为OpenCL缓冲区不仅是记忆的指针,还应包含一些元信息),仅仅是因为没有真正的理由应该起作用,并且没有保证它继续下去这样做。

如果您真正想要的是将OpenGL用于Interop,则可以尝试的是,因为OpenCL和CUDA都有扩展名,可以从OpenGL缓冲区中创建缓冲区。

但是,为什么需要这样做?什么是什么使您无法使用Apple的实现短期,因为IIRC是开源的,并且大多数(OpenCL零件)应该是平台独立的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top