【发布时间】: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调用中所做的那样。您可能需要通过LDCXXFLAGS或LDFLAGS将-fPIC添加到mex 链接。