在这种情况下,SIMD如何表现?

时间:2012-01-16 21:02:18

标签: performance optimization concurrency parallel-processing simd

我使用的引擎允许编写SIMD代码,并且执行速度很快。但是只有一个块包含所有代码。

我知道这个代码是在每个实体上同时独立运行的,但是当只有一件事发生变化时,无论如何计算它还是更快吗?这是SIMD的想法,并行吗?

例如:

void simdFunction ()
{
    center = mesh.center();    // always the same
    vert.pos.x = center.x;    // run on each vertex
}

在这种情况下,中心总是相同的,那么它是否会计算出SIMD上的每个顶点?如果是这样,这仍然有效吗?

基本上,无论是在一般的SIMD编程意义上,能够并行运行都会超过计算它的成本吗?

1 个答案:

答案 0 :(得分:4)

  

此代码在每个实体上独立运行

不,这不是SIMD的工作原理。

使用SIMD,所有算术单元都在锁定步骤中执行相同的操作。没有任何独立性。

一般来说,在顺序代码中,最好只计算一次共享常量。这样,SIMD引擎将在每个顶点切片上花费更少的时间。

例外是如果计算很短,则SIMD是协处理器(如GPGPU),并且数据已经在该协处理器中。然后使用SIMD计算它可能会轻易地将数据移回顺序处理器并返回。