gpt4 book ai didi

python - Pycuda 2019.1,如何正确复制gpuarray?

转载 作者:行者123 更新时间:2023-12-01 07:41:45 24 4
gpt4 key购买 nike

Pycuda 有一个长期存在的错误,在复制 ie 时它似乎无法保留顺序或步幅:

import numpy as np
import pycuda.autoinit
from pycuda import gpuarray

np_array = np.array([[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]], order="F")
gpu_array = gpuarray.to_gpu(np_array)

gpu_array_copy = gpu_array.copy()

# fails, order isn't the same. ravel also shows difference in order
assert(np.array_equal(gpu_array_copy.get(), np_array))

我想知道如何实际解释这一点?底层内存实际上是一样的吗?我如何确保我的副本实际上复制到 pycuda 中?

this这样的问题似乎表明步幅可以修复,但我不知道这是否意味着下面的实际数据(原始设备内存)实际上配置正确。

最佳答案

目前,这是我想出的解决方案(我仍然愿意接受更好的答案)。

我至少确定了复制过程中下面的内存是完全相同的。我所做的一件事是尝试保留步幅和标志,无论出于何种原因,它们都不会被复制。

这是我编写的处理此问题的函数:

def gpuarray_copy(array: gpuarray.GPUArray):
array_copy = array.copy()
array_copy.strides = array.strides
array_copy.flags.f_contiguous = array.flags.f_contiguous
array_copy.flags.c_contiguous = array.flags.c_contiguous
array_copy.flags.forc = array.flags.forc

这至少解决了主机副本不相等的情况,据我所知,现在应该使两个 gpuarray 完全相等。这种方法可能会产生其他后果,因为我不确定为什么诱导器还没有这样做,但我还没有看到对预期行为的任何负面影响。

关于python - Pycuda 2019.1,如何正确复制gpuarray?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56671188/

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