外层 for:for (i = 0; i < N; i += programCount)
programCount
是 SIMD 向量宽度(比如 AVX2=8、AVX-512=16)。programCount
个 program instances(也叫 lanes)并行执行同一段代码。programIndex
∈ [0, programCount-1],这是并行的“lane id”,不是顺序跑 0…7,而是 同时存在的 0…7。这张图直观展示了 ISPC 的 program instances(线程实例)是如何分配循环迭代的
Interleaved assignment(交错分配):
每个 instance(0–7)在每一轮处理连续的一块数据,整体覆盖所有数组元素。
效果:
类比 CUDA:
programIndex
≈ threadIdx.x
programCount
≈ blockDim.x
🔹 工作方式
在 ISPC 里我们写了循环:
第 1 轮循环 (i = 0)
idx = i + programIndex = 0 + programIndex
第 2 轮循环 (i = 8)
idx = 8 + programIndex
第 3 轮循环 (i = 16)