如何解决从Rust调用OpenACC代码无法在GPU上运行
更新09/07/2020
我正在https://gitlab.com/lisanhu2016/rust-openacc-example.git
上为此添加一个小示例这是一个带有自述文件的公共存储库,您应该可以在那里尝试示例。
我一直链接到的库是:nvc,acchost,pgm,您可以在build.rs
中看到它们
===
我正在尝试从rust代码调用openacc代码,但可能遇到与链接有关的问题。 我正在执行以下步骤:
- 使用openacc标志
bindings.cc
编译-acc -gpu=managed -Minfo=accel
并将其转换为静态库libfoo.a
[ 87%] Building CXX object CMakeFiles/foo.dir/bindings.cc.o
/opt/nvidia/hpc/20.7/Linux_x86_64/20.7/compilers/bin/nvc++ -fast -O3 -DNDEBUG -fPIC -acc -gpu=managed -Minfo=accel -o CMakeFiles/foo.dir/bindings.cc.o -c /usa/lisanhu/tmp/rust-c-ffi-example/bindings.cc
process_batch:
6,Generating copyout(lengths[:array.l]) [if not already present]
Generating implicit copyin(array.data[:]) [if not already present]
Generating Tesla code
10,#pragma acc loop gang,vector(128) /* blockIdx.x threadIdx.x */
6,Generating implicit copyin(array) [if not already present]
[100%] Linking CXX static library libfoo.a
- 使用
libfoo.a
编译rust代码,并动态链接到库nvc
nvcpumath
nvhost
nvdevice
。 - 使用一些数据运行代码,它就会运行。
- 使用
PGI_ACC_TIME=1
运行代码,没有时间信息 - 使用
ncu --set full
运行代码,它不显示内核信息
我认为我们可能链接到错误的库,但是我不确定,请您帮我解决这个问题?非常感谢!!
解决方法
我通过OpenACC Slack频道与Sanhu合作。有两个问题。
首先,由于他未与PGI / NV链接,因此需要添加“ -gpu = nordc”标志。 RDC链接到RDC时,不需要执行设备链接步骤。
第二,由于Rust分配了“数据”数组,因此不会将其放入CUDA统一内存中。因此,他需要使用“ process_array”例程将其添加到OpenACC数据区域。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。