1

我在设置一个实验时遇到了困难,我在设备上使用 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 的项目,请告诉我。

4

1 回答 1

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 部分)无论如何都应该是平台独立的。

于 2010-10-07T00:10:52.057 回答