【问题标题】:MEX cuda code with dynamic parallelism - unable to compile具有动态并行性的 MEX cuda 代码 - 无法编译
【发布时间】:2014-11-08 05:37:04
【问题描述】:

我有一个名为 mexCodeCuda.cu 的代码,它使用动态并行。在 matlab 界面中,当我尝试执行以下命令时,出现以下错误:

system('nvcc --compile mexCodeCuda.cu -o mexCodeCuda.o --compiler-options -fPIC -m64 -rdc=true -gencode arch=compute_35,code=sm_35 -O3 -lineinfo -use_fast_math -lcudadevrt -I/cm/shared/apps/MATLAB/extern/include')

system('nvcc -arch=sm_35 -dlink mexCodeCuda.o -o dlink.o')

eval('mex mexCodeCuda.o dlink.o -L'CUDA_LIB_PATH '-lcudart')

它给出了以下错误:

Error using mex
/usr/bin/ld: dlink.o: relocation R_X86_64_32S against `__nv_module_id' can
not be used when making a shared object; recompile with -fPIC
dlink.o: could not read symbols: Bad value
collect2: error: ld returned 1 exit status

谁能帮助我? 提前谢谢...

【问题讨论】:

  • 您是否尝试使用-fPIC 重新运行mex 和另一个nvcc
  • 当我将 -fPIC 添加到第二个 nvcc 时,它引发了错误 nvcc fatal : Unknown option 'fPIC' Running with mex 会引发以下错误:Unknown MEX argument '-fPIC'。
  • 第二个nvcc加-fPIC的时候,你真的做了--compiler-options -fPIC
  • 将 --compiler-options -fPIC 添加到第二个 nvcc 后,它已编译,但是当我运行 eval(eval 中没有 fPIC)时,它会引发错误:使用 mex dlink.o 时出错:在函数 @ 987654327@__fatbinwrap_65_tmpxft_00007d13_00000000_9_cuda_device_runtime_compute_50_cpp1_ii_5f6993ef' collect2:错误:ld 返回 1 个退出状态
  • 我怀疑您需要在mex 命令上指定cudadevrt 运行时选项,就像您在第一个nvcc 调用中所做的那样。您可能需要通过LDCXXFLAGSLDFLAGS-fPIC 添加到mex 链接。

标签: matlab cuda mex


【解决方案1】:

一些变化:

  • -fPIC 添加到第二个nvcc 命令(使用--compiler-options,就像使用第一个nvcc 一样)。
  • mex 命令 (-lcudadevrt) 上指定 cudadevrt 运行时选项,就像在第一次调用 nvcc 时一样。
  • 可能需要通过LDCXXFLAGSLDFLAGS-fPIC 添加到mex 链接。不确定。

【讨论】:

  • 将 -lcudadevrt 添加到 mex 命令导致成功编译 mex 代码。 mex 编译不需要添加 -fPIC。非常感谢。
猜你喜欢
  • 2018-09-13
  • 2014-09-12
  • 2013-01-14
  • 1970-01-01
  • 2013-10-17
  • 2021-11-07
  • 2013-01-29
  • 2014-01-31
相关资源
最近更新 更多