根据现有 GPU 指针构造 Cupy 数组

问题描述 投票:0回答:1

我想构建 GPU 上已存在的数组的 Cupy GPU 数组视图,并且我收到以下内容:

  1. 指向数组的指针。
  2. 我知道数据类型和数据大小。
  3. 我也得到了推介。

如何构造一个数组视图(最好避免复制)?我尝试了以下方法:

import cupy as cp
import numpy as np 

shape = (w, h, c, b) # example
s = np.product(shape)*4 # this is 1D 

mem = cp.cuda.UnownedMemory(ptr=image_batch_ptr,
                            owner=None,
                            size=s)
memptr = cp.cuda.MemoryPointer(mem, 0)
d = cp.ndarray(shape=shape,
               dtype=np.float32,
               memptr=memptr)

但这似乎并没有产生正确的对齐方式。具体来说,我在将音高整合到图片中时遇到了困难——这可能吗?

python gpu cupy
1个回答
0
投票

我找到了解决这个问题的方法。这确实可以通过

cupy
实现,但需要首先使用
copy.cuda.runtime.memcpy2D

将(在设备上)2D 分配移动到 1D 分配
  1. 我们初始化一个空的
    cp.empty
  2. 我们使用
    cupy.cuda.runtime.memcpy2D
    将数据从 2D 分配复制到该数组,在那里我们可以设置间距和宽度。我们使用
    MemoryKind kind = 3
    ,这是设备到设备复制。

这似乎是在不移动到主机的情况下创建适当的

cp.ndarray
的最佳方式。

© www.soinside.com 2019 - 2024. All rights reserved.