gpt4 book ai didi

c++ - 与 OpenMP、MPI 和 CUDA 链接时的 Autotools 问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:20:38 25 4
gpt4 key购买 nike

我有一个使用 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 链接命令

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 剥离?

最佳答案

一种方法是使用 -Wc 将 -Xcompiler=-std=c++0x-Xcompiler=-fopenmp 直接传递给编译器, ,因此 -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 ../libraries/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 ../libraries/ticpp/libticpp.a

关于c++ - 与 OpenMP、MPI 和 CUDA 链接时的 Autotools 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26887577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com