【发布时间】:2013-07-15 02:46:54
【问题描述】:
我已经使用算法方法为this post 找到了解决方案。我也很想尝试帖子中的一个 cmets 中建议的查找表方法。我对 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);
}
内核执行速度也是我关心的问题。那么,很想知道这种方法是否是一种好的做法(生成索引的有效方法)?
【问题讨论】:
-
从另一篇文章看来,您有一个根据“算法”方法生成索引的代码。上面你有一个“非算法”方法的代码草案(似乎你只需要通过线程/块索引来处理
m_aIdx矩阵)。为什么不比较两种解决方案的相对速度?
标签: c cuda gpgpu nvidia lookup-tables