我使用的引擎允许编写SIMD代码,并且执行速度很快。但是只有一个块包含所有代码。
我知道这个代码是在每个实体上同时独立运行的,但是当只有一件事发生变化时,无论如何计算它还是更快吗?这是SIMD的想法,并行吗?
例如:
void simdFunction ()
{
center = mesh.center(); // always the same
vert.pos.x = center.x; // run on each vertex
}
在这种情况下,中心总是相同的,那么它是否会计算出SIMD上的每个顶点?如果是这样,这仍然有效吗?
基本上,无论是在一般的SIMD编程意义上,能够并行运行都会超过计算它的成本吗?
答案 0 :(得分:4)
此代码在每个实体上独立运行
不,这不是SIMD的工作原理。
使用SIMD,所有算术单元都在锁定步骤中执行相同的操作。没有任何独立性。
一般来说,在顺序代码中,最好只计算一次共享常量。这样,SIMD引擎将在每个顶点切片上花费更少的时间。
例外是如果计算很短,则SIMD是协处理器(如GPGPU),并且数据已经在该协处理器中。然后使用SIMD计算它可能会轻易地将数据移回顺序处理器并返回。