首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于numba的GPU上的Floyd-Warshall算法

基于numba的GPU上的Floyd-Warshall算法
EN

Stack Overflow用户
提问于 2020-12-06 05:19:27
回答 1查看 109关注 0票数 1

我正在使用numba在GPU上编写优化的Floyd-Warshall算法。我需要它在10,000个矩阵的情况下在几秒钟内工作。目前,处理过程大约在60秒内完成。下面是我的代码:

代码语言:javascript
复制
def calcualte_distance_to_all_gpu(matrix):
    threadsperblock = (32, 32)
    blockspergrid_x = math.ceil(matrix.shape[0]/ threadsperblock[0])
    blockspergrid_y = math.ceil(matrix.shape[1] / threadsperblock[1])
    blockspergrid = (blockspergrid_x, blockspergrid_y)
    calculate_distance_to_all_cuda[blockspergrid, threadsperblock](matrix)


@cuda.jit
def calculate_distance_to_all_cuda(matrix):
    i, j = cuda.grid(2)

    N = len(matrix)
    for k in prange(N):
        if i < matrix.shape[0] and j < matrix.shape[1]:
            if matrix[i, k] + matrix[k, j] < matrix[i, j]:
                matrix[i, j] = matrix[i, k] + matrix[k, j]

老实说,我对在GPU上编写脚本非常陌生,所以你有什么想法可以让这段代码更快吗?我还注意到我的GPU在处理时只有一个小的峰值到100%,然后它就停止了忙碌,所以可能问题出在从CPU向GPU发送数据?如果是,有没有办法优化这个过程?或者也许我应该对这个任务使用不同的算法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-10 19:23:12

事实证明,我的方法从一开始就是错误的,因为你不能以直接的方式并行化这个算法。下面是一些很好的文章,介绍如何使用代码来做到这一点:

https://moorejs.github.io/APSP-in-parallel/#References

几天后,我将用python numba重写这种方法,并在评论中发布它;)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65162075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档