Julia中的CUDA测试——GPU利用率非常低

3

我一直在尝试为我的RTX 2070 GPU设置Julia的CUDA计算,到目前为止,在执行CUDA并行化代码时没有出现任何与失败的CUDA初始化相关的错误。然而,并行计算似乎非常慢,所以我从Julia中启动了Pkg.test("CUDA")来获取更多关于其原因的见解,以下是一些结果的截图:Julia CUDA test。与CPU相比,GPU的分配似乎完全可以忽略不计。

这也反映在CUDA vs. CPU使用上 - 运行nvidia-smi显示0%的瞬态GPU利用率,而资源监视器中的CPU在整个测试过程中始终保持在80%以上。

此外,任务管理器中的CUDA利用率图表仅显示CUDA利用率的突发而非连续使用:Screenshot of CUDA utilization in task manager

对于为什么会出现这种情况,有什么建议吗?我已经多次验证了正确的CUDA包和驱动程序安装,但下一步该怎么做我不确定。


4
Julia代码在CUDA编译时需要非常长的时间。从您在帖子中的写作来看,似乎您一直在对CUDA代码编译过程进行基准测试(当您仅运行任何函数一次时,这种情况总是会发生)。 - Przemyslaw Szufel
我猜这些尖峰是实际的GPU操作,其余的都是Julia端的操作来使这些尖峰发生。 - talonmies
@PrzemyslawSzufel 感谢您的评论!我认为 Pkg.test("CUDA") 中的每个测试都旨在为给定的 Julia 函数执行大量的 CUDA 计算。您是说,几 GB 的 CPU 分配与 0.00 MB 的 GPU 分配(在第一个截图中可见)反映了昂贵的编译过程吗?我假设测试套件中至少会有一个测试会使 GPU 承受巨大的负载,但最终没有任何测试这样做。 - t3tcbr
2
@t3tcbr:从你的屏幕截图中看代码(顺便说一下,这是我第一次看到Julia代码),有些测试用例都很小,类似玩具般简单。它们看起来是为了验证编译基础设施和代码库是否正常运行而存在的,而不是“将GPU置于大负载下”。我认为你对其预期过高了。 - talonmies
我已经多次运行了许多基准测试,其中编译需要30秒,而在GPU上运行实际基准测试只需要30微秒(百万倍的差异)。因此,除非您正确地进行基准测试,否则所有信息都是无关紧要的。既然您不确定,那么基准测试就是答案 :-) - Przemyslaw Szufel
1个回答

2
作为评论中所指出的,Cuda.jl/test中的测试旨在测试编译管道,而不是真正让GPU承受任何重负。为了补充完整的情况,如果您确实想尝试加载GPU,可以尝试修改https://cuda.juliagpu.org/stable/tutorials/introduction/中的示例,例如按照以下方式进行修改。
N = 2^20
using CUDA

x_d = CUDA.fill(1.0f0, N)  # a vector stored on the GPU filled with 1.0 (Float32)
y_d = CUDA.fill(2.0f0, N)  # a vector stored on the GPU filled with 2.0

for i=1:100000
    y_d .+= sqrt.(x_d)
end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接