【发布时间】:2018-03-07 07:16:24
【问题描述】:
我在 Ubuntu 16.04.3 64 位上通过 pyopenCL 编程 OpenCL, 在 Nvidia 的 Tesla K10.G2.8GB 上。
到目前为止,只要我不将头文件包含到我的 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
一般建议安装libc6-dev-i386 或gcc-multilib 和g++-multilib,假设根本问题是64 位/32 位问题。我的问题是,我用于 GPU 的 OpenCL 二进制文件是否编译为 32 位二进制文件(如何检查?)?
如果是:
当我想在 64 位操作系统上编译 32 位二进制文件时,还有其他注意事项吗?
此外:当我的内核编译为 32 位时,我可以使用 64 位浮点数吗?
(例如,#pragma OPENCL EXTENSION cl_khr_fp64 : enable 还能工作吗?)
如果没有:
我是否必须手动定位/复制所有需要的头文件并手动包含它们?
另外:我的一些同事甚至怀疑,由于缺少链接器,将标准 C 标头包含到 OpenCL 内核中是可能的。任何有关这方面的信息也值得赞赏。
【问题讨论】:
-
我不确定,但我认为 OpenCL 可能只是语言 khronos.org/files/opencl-1-2-quick-reference-card.pdf 和相关资源:khronos.org/opencl/resources。在我对 PyOpenCL 的了解非常有限的情况下,我还没有在内核中编写或见过
#include _any_library_。 -
在 SO 上快速搜索
include header openCL会发现至少有些人将自己的头文件包含在 OpenCL 内核代码中。我说的是用 OpenCL C(基本上是 C 的子集)编写的内核代码 -
哦,是的,我想是的。刚看到这个:stackoverflow.com/questions/14502925/…我会让更了解 PyOpenCL 的人回答你的问题...
标签: c include opencl 32bit-64bit pyopencl