gpt4 book ai didi

python - Numba 支持 cuda 协作 block 同步?? Python numba cuda 网格同步

转载 作者:太空宇宙 更新时间:2023-11-04 04:20:21 26 4
gpt4 key购买 nike

Numba Cuda 有 syncthreads() 来同步一个 block 中的所有线程。如何在不退出当前内核的情况下同步网格中的所有 block

在 C-Cuda 中有一个 cooperativeBlocks 库来处理这种情况。我在 Numba 文档中找不到类似的东西。

为什么这很重要!

这种事情发生在减少中,其中一个人在每个 block 中计算一些东西,然后你想找到 block 上的最大值。

通常可以将它们作为两个单独的调用推送到流中。这确保 block 计算在调用 reduce 之前全部完成。

但如果这两个操作是轻量级的,那么执行时间主要由设置内核而不是操作的执行决定。如果这些在 python 循环中,如果循环和两个 kerel 调用可以融合到一个内核中,则循环可以轻松地运行 1000 倍

for u in range(100000):
Amax =CudaFindArrayMaximum(A)
CudaDivideArray(A,Amax)
CudaDoSomethingWithMatrix(A)

由于循环中的三行中的每一行都是快速内核,我想将它们和循环全部放入一个内核中。

但如果不同步网格中的所有 block ,我想不出任何方法来做到这一点。事实上,出于同样的原因,即使是找到最大值的第一步本身也很棘手。

最佳答案

在 CUDA 中,不使用 cooperative groups ,没有安全或可靠的机制来进行网格范围的同步(除了使用内核启动边界)。事实上,提供这种能力是引入合作组的动机之一。

目前,numba 不公开协作组功能。因此,目前在 numba 功能中没有安全或可靠的方法来实现这一点。

numba 现在提供此功能,请参阅 here .

引用this question有关在没有协作组的情况下尝试在 CUDA 中执行此操作可能存在的危险的示例。

关于python - Numba 支持 cuda 协作 block 同步?? Python numba cuda 网格同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54595609/

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