【发布时间】:2012-12-05 16:45:32
【问题描述】:
我正在尝试使用 CUDA 增强一个小型 C++ 项目。
我的项目正在使用自定义库的类和函数,例如 Matrix3d, Vector3d, Plane2d 等。它们主要是几何对象。
当我尝试在设备中使用我的代码(__host__ __device__ 函数或内核)时,所有库函数/对象都被视为主机代码,我收到多个警告和错误,例如 error: identifier "Plane3d::~Plane3d" is undefined in device code
有没有办法在设备上也使用我的库?它是如何完成的? 我没有 CUDA 和 C++ 方面的经验(我只使用 CUDA 和没有类的简单 C 代码)所以我不太了解这个策略。
是否有避免更改库源代码的方法?可以更改库的代码,但如果我能避免它会更好。
非常感谢。
【问题讨论】:
-
如果库是为CPU使用而编译的,那么如果不对库的源代码进行一些更改并重新构建库,就无法使用它。库以编译对象形式表示代码。编译后的对象由 CPU 机器码组成。 GPU 无法使用或理解 CPU 机器代码。如果您使用适当的 __ device__ __ host__ 装饰和可能的其他更改重新编码库,并通过 nvcc 传递它,这将是能够在设备上使用它的起点。如果库是通用的,那么其他人可能已经这样做了。
-
没有库是内部的,我可以更改并编译它。只是我将不得不在几乎所有地方添加
__device__ __host__关键字。