【问题标题】:CUDA and C++, how to link cpp and cu files?CUDA 和 C++,如何链接 cpp 和 cu 文件?
【发布时间】:2013-09-19 08:06:03
【问题描述】:
//Header file A.h
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
class A
{
   __host__ __device__ void move();
}

//cu file A.cu
#include "A.h"
{
   __host__ __device__ void A::move()
   {
      ...
   }
}

当从另一个.cu 文件调用A.cu 文件中定义的方法时,我收到以下错误:

External calls are not supported (found non-inlined call to ...),

我正在使用sm_10 编译选项。

【问题讨论】:

  • 这篇帖子CUDA External calls not supported是否已经为您提供了有用的信息?
  • 在设置 -rdc=true 和 srm_20 后得到:未定义的对 '_ZNmoveEv' 的引用
  • 当您拥有具有计算能力 1.0 的卡时,您不能将编译用于计算能力 2.0 和可重定位代码...
  • 我检查了我的卡信息,你是对的,我的卡不支持计算能力 2.0,谢谢
  • 我认为 A.cpp 实际上是 A.cu。宿主 C++ 编译器无法编译 __device__ 和 __host__ 装饰器,只有 nvcc 知道如何解析它们。

标签: c++ cuda


【解决方案1】:

你需要单独编译。单独编译需要具有至少2.0 和至少CUDA 5.0 的计算能力的卡。

引用 CUDA 5.0 发布亮点:

现在可以使用 NVCC 单独编译和链接所有 __device__ 函数。 这允许创建 __device__ 函数的闭源静态库和 这些库能够调用用户定义的__device__ 回调函数。 链接器支持在此版本中被视为 BETA 功能。

CUDA COMPILER DRIVER NVCC Reference Guide的第7章中描述了单独编译。

有兴趣的朋友,NVIDIA论坛上有一个关于单独编译的非常好的帖子,请参阅

How to create a static lib for device functions using cuda 5.0?

【讨论】:

    猜你喜欢
    • 2012-08-30
    • 2020-12-29
    • 2021-12-19
    • 2023-03-23
    • 2019-11-09
    • 2015-06-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-06
    相关资源
    最近更新 更多