试图将OpenCL与英伟达的CUDA融合';s SDK模板

试图将OpenCL与英伟达的CUDA融合';s SDK模板,sdk,cuda,opencl,gpgpu,nvidia,Sdk,Cuda,Opencl,Gpgpu,Nvidia,我一直在艰难地设置一个实验,在这个实验中,我使用CUDA在设备上分配内存,将指针指向设备上的内存,在OpenCL中使用它,然后返回结果。我想看看这是否可行。我很难让CUDA项目正常工作,所以我只是在他们的SDK中使用了Nvidia的模板项目。在makefile中,我将-lOpenCL添加到common.mk的libs部分。当我这样做时,一切都很好,但是当我将#include添加到template.cu以便开始进行OpenCL调用时,我发现了100多个错误。它们看起来都类似于此,但末尾的函数名不同

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

/usr/lib/gcc/x86_64-linux-gnu/4.4.1/include/xmmintrin.h(334):错误: 标识符“\u内置\u ia32\u cmpeqps”未定义


我很难弄明白为什么。如果可以的话,请帮忙。另外,如果有一种更简单的方法来建立一个能够调用CUDA和OpenCLAPI的项目,请告诉我

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

据我所知,您正试图从cuda主机代码直接使用opencl,如果我记得正确编译时使用的是nvidia的编译器,而不是标准的gcc。所以问题可能是这个编译器没有实现必要的内置代码来处理所提到的头文件。 在这里查找类似的问题及其解决方案:

似乎你必须把所有需要OpenCLAPI的东西放到一个不同的(非cuda)编译单元中,这样它才能由非nvidia编译器编译

然而,我不会指望它能工作(因为opencl缓冲区不仅仅是指向内存的指针,还应该包含一些指向内存的元信息),这仅仅是因为没有真正的理由它应该工作,如果它工作了,也不能保证它会继续工作

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


但是,您为什么需要这样做?是什么让你在短期内不使用苹果的实现,因为IIRC是开源的,而且它的大部分(opencl部分)无论如何都应该是独立于平台的

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

据我所知,您正试图从cuda主机代码直接使用opencl,如果我记得正确编译时使用的是nvidia的编译器,而不是标准的gcc。所以问题可能是这个编译器没有实现必要的内置代码来处理所提到的头文件。 在这里查找类似的问题及其解决方案:

似乎你必须把所有需要OpenCLAPI的东西放到一个不同的(非cuda)编译单元中,这样它才能由非nvidia编译器编译

然而,我不会指望它能工作(因为opencl缓冲区不仅仅是指向内存的指针,还应该包含一些指向内存的元信息),这仅仅是因为没有真正的理由它应该工作,如果它工作了,也不能保证它会继续工作

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


但是,您为什么需要这样做?是什么让你在短期内不使用苹果的实现,因为IIRC是开源的,而且它的大部分(opencl部分)无论如何都应该是独立于平台的

为什么要混合CUDA和OpenCL?我正在Ubuntu中进行一个OpenCL项目(必须是OpenCL),我需要一个库,比如Cuft,它只在CUDA中可用。我计划将此作为短期解决方案,直到苹果的OpenCL FFT库移植到Ubuntu或其他FFT库可用于Ubuntu上的OpenCL。为什么要将CUDA和OpenCL混合使用?我正在Ubuntu中进行OpenCL项目(必须是OpenCL),我需要一个类似Cuft的库,它只在CUDA中可用。我计划将此作为短期解决方案,直到苹果的OpenCL FFT库移植到Ubuntu或其他FFT库在Ubuntu上提供给OpenCL。我喜欢你使用OpenGL缓冲区的想法,我相信我以前听说过。这似乎是一种更安全的方法。我看了你发布的链接,似乎包装器会起作用,我会尝试一下,因为我想不出其他任何东西。我们目前正在使用cufft,因为我们可以通过JCUDA访问它,然后因为它是在Java上运行的,所以我们可以在Linux、Mac或Windows机器上运行我们的程序。有了苹果的FFT库,我们必须自己移植它,以便通过JOCL访问它,而维护人员已经表示有兴趣自己做。我喜欢你使用OpenGL缓冲区的想法,我相信我以前听说过。这似乎是一种更安全的方法。我看了你发布的链接,似乎包装器会起作用,我会尝试一下,因为我想不出其他任何东西。我们目前正在使用cufft,因为我们可以通过JCUDA访问它,然后因为它是在Java上运行的,所以我们可以在Linux、Mac或Windows机器上运行我们的程序。有了苹果的FFT库,我们必须自己移植它,以便通过JOCL访问它,而维护人员已经表示有兴趣自己做。