2020 年 9 月 7 日更新
我在 https://gitlab.com/lisanhu2016/rust-openacc-example.git 添加了一个小例子。
这是一个带有 README 的公共(public)存储库,您应该可以在那里尝试该示例。
我一直链接的库是:nvc、achost、pgm,你可以在build.rs
中看到它们
===
我正在尝试从 rust 代码中调用 openacc 代码,但我遇到了可能与链接有关的问题。
我正在使用以下步骤:
bindings.cc
带有 openacc 标志 -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 channel 与三虎合作。有两个问题。
首先,由于他没有与 PGI/NV 链接,他需要添加“-gpu=nordc”标志。 RDC 需要在被 Rust 链接时不执行的设备链接步骤。
其次,由于“数据”数组是由 Rust 分配的,它不会被放入 CUDA 统一内存中。因此,他需要使用“process_array”例程将其添加到 OpenACC 数据区域。
关于rust - 从 Rust 调用 OpenACC 代码不在 GPU 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63758643/