我想映射一个thread_id。这在 C/CUDA 中,但它更像是我试图解决的代数问题。
所以我试图实现的映射是这样的:
- 线程 0-15:读取值数组 [0]
- 线程 16-31:读取值 [3]
- 线程 32-47:读取值 [0]
- 线程 48-63:读取值 [3]
- 线程 64-79:读取值数组 [6]
- 线程 80-95:读取值数组 [9]
- 线程 96-111:读取值数组 [6]
- 线程 112-127:读取值数组 [9]
等等..
请注意,这是映射的简化,实际上有超过 128 个线程,但顺序如图所示,线程总是映射到 3 的倍数。
我可以使用什么公式让每个线程都可以运行来找出它应该查看的数组位置?
我想使用以下示例中的某种公式,而不是显式映射或任何 if 语句。
为了说明我如何解决需要不同映射的不同情况,即:
- 线程 0-31:读取值数组 [0]
- 线程 32-63:读取值 [3]
我使用了代码
rintf(float(tid)/96.0)*3