gpt4 book ai didi

python - PyCUDA GPUArray 基于切片的操作

转载 作者:行者123 更新时间:2023-11-28 23:05:46 24 4
gpt4 key购买 nike

PyCUDA 文档对于我们这些“非大师”类中的示例来说有点简单,但我想知道可用于 gpuarrays 上的数组操作的操作,即。如果我想 gpuarray 这个循环;

m=np.random.random((K,N,N))
a=np.zeros_like(m)
b=np.random.random(N) #example
for k in range(K):
for x in range(N):
for y in range(N):
a[k,x,y]=m[k,x,y]*b[y]

常规的第一站 python 缩减是这样的

for k in range(K):
for x in range(N):
a[k,x,:]=m[k,x,:]*b

但我看不出有任何简单的方法可以用 GPUArray 来做到这一点,除了编写一个自定义的逐元素内核之外,即使这样,对于这个问题,内核中也必须有循环结构,在那个复杂点我'我可能最好只编写我自己的完整的 SourceModule 内核。

有人能给我线索吗?

最佳答案

这可能最好使用您自己的内核来完成。虽然 PyCUDA 的 gpuarray 类是一种非常方便的 GPU 内存抽象,可以与 numpy 数组互换使用,但除了固定线性代数和并行缩减操作之外,无法避免为 GPU 编写代码的需求。

也就是说,这是一个非常简单的小内核。如此微不足道,以至于它会受到内存带宽的限制 - 您可能想看看是否可以将一些类似的操作“融合”在一起,以稍微提高 FLOPS 与内存事务的比率。

如果您在内核方面需要一些帮助,请留下评论,我可以扩展答案以包含一个粗略的原型(prototype)。

关于python - PyCUDA GPUArray 基于切片的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5708319/

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