包括标头OpenCL(32位和64位)

包括标头OpenCL(32位和64位)

问题描述:

我编程OpenCL通过在Ubuntu 16.04.3 64位上的pyopenCL,在Nvidia的Tesla K10.G2.8GB上的 。包括标头OpenCL(32位和64位)

到目前为止,只要我没有在我的OpenCL内核中包含头文件,任何东西都可以平稳运行。一旦,因为我把#include <stdlib.h>我的头文件的顶部,我的OpenCL内核的编译失败与不同的文件丢失,在他们之中是

gnu/stubs-32.h 
sys/cdefs.h 

搜索这个问题,带来了像

Error "gnu/stubs-32.h: No such file or directory" while compiling Nachos source code答案

https://askubuntu.com/questions/470796/fatal-error-sys-cdefs-h-no-such-file-or-directory

baiscally提示吨o安装libc6-dev-i386gcc-multilibg++-multilib,假设潜在问题是64位/ 32位问题。我的问题是,我的GPU的OpenCL二进制文件是否编译为32位二进制文​​件(如何检查?)?

如果是:

还有没有其他的注意事项,当我想编译一个64位操作系统的32位二进制文​​件?

此外:当我的内核编译为32位时,我可以使用64位浮点数吗? (例如,将#pragma OPENCL EXTENSION cl_khr_fp64 : enable还是工作?)

如果没有:

我必须手动定位/复制所有必要的头文件,并用手包括他们?

另外:我的一些同事甚至怀疑,这其中包括标准的C头到OpenCL内核可能是由于缺少连接体。任何灯光也赞赏。

+0

我不知道,但我认为OpenCL可能只是语言https://www.khronos.org/files/opencl-1-2-quick-reference-card。pdf和相关资源:https://www.khronos.org/opencl/resources。在我对PyOpenCL非常有限的知识中,我没有在内核中编写或者看到过'#include _any_library_'。 – benshope

+0

在SO上快速搜索'include header openCL',可以发现至少有些人将自己的头文件包含在OpenCL内核代码中。我正在谈论用OpenCL C编写的内核代码(基本上是C的子集) – Dschoni

+0

哦,是的,我想是的。刚刚看到这一个:https://stackoverflow.com/questions/14502925/include-headers-to-opencl-cl-file我会让更多的人了解PyOpenCL回答你的问题... – benshope

标准C库和其他系统头不能被包含 到OpenCL的C代码,基本上是因为它们只与当前系统(主机)兼容 ,而在OpenCL C代码可能 与不同的设备上运行不同的体系结构(您的情况下,一个GPU在 )。

至于标准C函数的替代,OpenCL的C定义了一组内置的功能,这是不加任何的#include : printf的,大量的数学函数,原子能,图像相关 功能等。

参见“OpenCL的规格:6.12内置函数”一 完整列表: https://www.khronos.org/registry/OpenCL/specs/opencl-1.2.pdf

这并不意味着你不能创建的OpenCL C代码 头和#包括它转化为OpenCL C程序。这工作正常:

// foo.h 
void foo() { 
    printf("hello world!"); 
} 

// kernel.cl 
#include "foo.h" 
__kernel void use_foo() { 
    foo(); 
}