我已经 使用算法方法为这篇文章找到了解决方案。我也很想尝试帖子中的一条评论中建议的查找表方法。我对 CUDA C 相当陌生,并试图寻找有关如何做到这一点的示例/信息。我将值存储在下表中。我知道我需要关联每个线程来提取 4 个值中的每一个。这些值分别对应于每个线程的索引 SubBlkIdxA、SubBlkIdxB、BlkIdxA 和 BlkIdxB。一旦从表中读取它们,它们就会被传递给一个函数来计算一些东西。
我知道如果我说 m_aIdx[3][0],它将进入 {3,0,0,1,},进入表格并读取第一个条目'3'。为了读取这个位置的每个条目到上面提到的索引,我想这样:
我的表如下所示:
static __constant__ int16 m_aIdx[64][4] =
{
{0,1,0,0,},
{2,3,0,0,},
{1,0,0,1,},
{3,0,0,1,},
{1,2,0,1,},
{3,2,0,1,},
and so on ... upto 64 entries
}
像这样的功能:
static __device__ void func()
{
SubBlkIdxA = m_aIdx[3][0];
SubBlkIdxB = m_aIdx[3][1];
BlkIdxA = m_aIdx[3][2];
BlkIdxB = m_aIdx[3][3];
func1(SubBlkIdxA, SubBlkIdxB, BlkIdxA, BlkIdxB);
}
我也关心内核执行的速度。那么,很想知道这种方法是否是一种好的做法(生成索引的有效方法)?