与OpenMP,MPI和CUDA链接时,Autotools会出现问题

时间:2014-11-12 12:57:14

标签: c++ c cuda autotools

我有一个用autotools编译的项目,直到本周才需要使用OpenMP和MPI支持进行编译。我现在添加了一个CUDA内核,我希望在某些情况下编译成代码。编译代码没问题,并且创建了所有目标文件。在将对象链接到可执行文件时,使用以下命令:

  

/ bin / bash ../libtool --tag = CXX --mode = link nvcc -ccbin = mpicxx -I / usr / local / cuda / include -Xcompiler -std = c ++ 0x -Xcompiler -fopenmp - L / usr / local / cuda / lib64 -lcuda -lcudart -lcufft -o utrplauncher utrplauncher-UTRP.o crossovers / libcrossovers.a initialisers / libinitialisers.a mutators / libmutators.a problem / libproblem.a common / libcommon.a variables / libvariables.a ../libraries/framework/libmoeaframework.a ../ libraries / ticpp / libticpp.a

反过来又会生成follwong link命令

  

libtool:link:nvcc -ccbin = mpicxx -I / usr / local / cuda / include -std = c ++ 0x -fopenmp -o utrplauncher utrplauncher-UTRP.o -L / usr / local / cuda / lib64 - lcuda -lcudart -lcufft crossovers / libcrossovers.a initialisers / libinitialisers.a mutators / libmutators.a problem / libproblem.a common / libcommon.a variables / libvariables.a ../libraries/framework/libmoeaframework.a ../libraries/ ticpp / libticpp.a

这会产生以下错误,因为-std = c ++ 0x和-fopenmp是由CUDA编译器而不是mpicxx编译器解释的。

nvcc fatal   : Value 'c++0x' is not defined for option 'std'

我可以发布我的configure.ac,如果这会有所帮助,但想让问题保持简洁。

因此,我的问题是可以将-Xcompiler标志转发到mpicxx编译器而不是将它们从libtool中删除吗?

1 个答案:

答案 0 :(得分:1)

一种方法是使用-Xcompiler=-std=c++0x-Xcompiler=-fopenmp-Wc,直接传递给编译器,因此-Xcompiler不会剥离libtool。例如,在干运行之后:

  

libtool -n --tag = CXX --mode = link nvcc   -ccbin = mpicxx-I / usr / local / cuda / include -Wc,-Xcompiler = -std = c ++ 0x -Wc,-Xcompiler = -fopenmp -L / usr / local / cuda / lib64 -lcuda -lcudart - lcufft -o utrplauncher utrplauncher-UTRP.o crossovers / libcrossovers.a initialisers / libinitialisers.a mutators / libmutators.a   problem / libproblem.a common / libcommon.a variables / libvariables.a   ../libraries/framework/libmoeaframework.a   ../库/ ticpp / libticpp.a

产生

  

libtool:link:nvcc -ccbin = mpicxx-I / usr / local / cuda / include   -Xcompiler = -std = c ++ 0x -Xcompiler = -fopenmp -o utrplauncher utrplauncher-UTRP.o -L / usr / local / cuda / lib64 -lcuda -lcudart -lcufft   crossovers / libcrossovers.a initialisers / libinitialisers.a   mutators / libmutators.a problem / libproblem.a common / libcommon.a   variables / libvariables.a ../libraries/framework/libmoeaframework.a   ../库/ ticpp / libticpp.a