如何将二维数组的一部分分配给CUDA流?

问题描述:

将一部分1D分配给流很容易,我们可以将基指针指向chunk作为内核的参数之一,但是如何在二维数组中实现同样的事情,似乎很困难,因为在二维数组中,块可以是它自己的二维数组,因此如何在这种情况下管理指针?请帮助如何将二维数组的一部分分配给CUDA流?

+1

这个问题没有多大意义。流是用于在GPU上执行同时操作(存储器传输和/或内核执行)的驱动器侧FIFO机制。它们与设备内存分配或寻址无关。请编辑你的问题,以澄清你问的是什么。 – talonmies

+0

你以前是否使用过流?当我们将一部分数组分配给流“i”时,我们将基指针作为参数传递给内核,这样流将操作它的数组的一部分...这在一维数组中很容易,但是如何在二维数组中做到这一点? –

+0

什么是(根据你的定义)“2D阵列”?它是线性内存吗?还是它是一个指针数组? – talonmies

首先,流与您的问题完全无关,它们与您询问的内容无关。

如果您实际分配了一个指针设备数组,那么您必须已经有一个包含设备行或列指针的主机数组。如果你的算法工作,以便每个内核启动(或启动内部的块)处理内存在一个单一的分配(如行或列)内,那么你可以传递每个行或列指针作为参数在每次启动。如果给定的启动需要跨多行或多列访问内存,唯一的解决方案是传递整个指针数组以及每个内核启动时包含数组入口点的元组。

请注意,在CUDA中使用指针数组是在90%的现实应用程序中非常糟糕的主意。非平凡情况下的性能会比使用倾斜线性内存的情况差得多(对于添加到要在内核中读取和写入的数据的每个额外级别的指针间接,您实际上将内存访问延迟加倍)。在内核中进行索引所需的IOP数量要少得多。使用指针数组也会使主机和设备比大多数情况下需要的复杂得多。