将1D的某些部分分配给流很容易,我们可以将块指针作为内核的参数之一但是如何在2D数组中实现相同的东西,看起来很难,因为在2D数组中块可以是自己的2D数组所以在这种情况下如何管理指针?请帮助
答案 0 :(得分:1)
首先,溪流与您的问题完全无关,它们与您所询问的内容无关。
如果您实际分配了指针的设备数组,那么您必须已经拥有包含设备行或列指针的主机数组。如果您的算法有效,每个内核启动(或启动内的块)处理单个分配(如行或列)中包含的内存,那么您可以在每次启动时将每个行或列指针作为参数传递。如果给定的启动需要跨多个行或列访问内存,唯一的解决方案是传递整个指针数组,以及包含每个内核启动的数组入口点的元组。
请注意,在90%的实际应用程序中使用CUDA中的指针数组是一个非常糟糕的主意。非平凡情况下的性能比使用斜线性内存要差得多(对于要添加到要在内核中读写的数据的每个附加指针间接级别,您实际上会将内存访问延迟加倍)。在内核中进行索引所需的少量IOP要便宜得多。使用指针数组也会使主机和设备比大多数情况下更复杂。