使用 Meson 构建 CUDA 内核
Posted
技术标签:
【中文标题】使用 Meson 构建 CUDA 内核【英文标题】:Build CUDA kernel with Meson 【发布时间】:2020-09-15 06:50:45 【问题描述】:我正在尝试构建一个使用 Cuda 内核的应用程序。为此,我正在使用meson build system,但没有成功。基本上我想做的是以下几点:
//main.cpp
extern void kernel_function();
int main(int argc, char *argv[])
// some logic here...
kernel_function();
return 0;
//kernel.cu
__global__ void kernel()
// some code here...
void kernel_function()
dim3 threads( 2, 1 );
dim3 blocks( 1, 1 );
kernel<<< blocks, threads >>>();
我可以用以下命令编译上面的代码:
g++ -c main.cpp
nvcc -c kernel.cu
nvcc -o main main.o kernel.o
如何复制我在终端上使用 Meson 执行的编译过程?
【问题讨论】:
那么错误是什么? 【参考方案1】:在最简单的情况下,它可能是这样的:
project('cuda dependency', 'cpp', 'cuda')
executable('main', 'main.cpp', 'kernel.cu')
然后运行
$ CXX=g++ meson build
$ ninja -C build
(基于example)。
但你可能需要添加依赖项,例如
dep = dependency('cuda', version : '>=10', modules : ['cublas'])
executable(..., dependencies: dep)
或借助 cuda 模块设置一些特殊的编译器标志,检查介子上的this reference。
【讨论】:
对我不起作用,我收到以下错误消息:“在制作 PIE 对象时无法使用针对 `.rodata' 的重定位 R_X86_64_32;使用 -fPIE 重新编译”。 @Alexander 如果你用 b_pie 配置项目会怎样,即 $ meson --reconfigure -Db_pie=true 使用“-Db_pie=true”选项我有以下内容:“错误:语言 Cuda 不支持与位置无关的可执行文件”。 还有一件事:命令“nvcc -o myexe myfile.cpp -lmylib”有效,其中“mylib”是用介子构建的。此外,介子可以从单个源文件构建 cuda 可执行文件:executable('main', 'kernel.cu') - 有效!如果我有两个以上的文件,什么不起作用。看起来“PIE”选项只需要传递给主编译器(我使用 gcc),而不需要传递给 nvcc。 有了这个配置:“meson configure -Dcpp_args=-fPIE”我能够编译。现在介子抱怨对“cublasCreate_v2”的未定义引用。看起来 cublas 库没有与可执行文件链接。以上是关于使用 Meson 构建 CUDA 内核的主要内容,如果未能解决你的问题,请参考以下文章
使用 Meson 在 Windows 上构建和运行 GTK 应用程序
Meson 和 NInja 构建系统:指定二进制文件的存储位置