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

Performance SIMD在这种情况下表现如何?,performance,optimization,concurrency,parallel-processing,simd,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的想法吗,并行性

例如:

void simdFunction ()
{
    center = mesh.center();    // always the same
    vert.pos.x = center.x;    // run on each vertex
}
在这种情况下,中心始终是相同的,因此会为SIMD上的每个顶点计算中心吗?如果是,这是否仍然有效

从一般SIMD编程的意义上讲,能够并行运行这个函数基本上超过了计算它的成本吗

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

不,SIMD不是这样工作的

使用SIMD时,所有算术单元都以锁定步长工作,执行相同的操作。根本没有独立性

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

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

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

不,SIMD不是这样工作的

使用SIMD时,所有算术单元都以锁定步长工作,执行相同的操作。根本没有独立性

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


例外情况是,如果计算很短,SIMD是一个协处理器(如GPGPU),并且数据已经在该协处理器中。然后,使用SIMD进行计算可能会轻松地击败将数据移回顺序处理器的过程。

谢谢Ben,我现在似乎更了解它了。但我无法控制这一切。引擎的规范定义我只能有一个SIMD上下文。我可以编写其他函数,等等,但只要我在主上下文中调用它们,就会是一样的事情。所以我想我别无选择。谢谢本,我现在似乎更明白了。但我无法控制这一切。引擎的规范定义我只能有一个SIMD上下文。我可以编写其他函数,等等,但只要我在主上下文中调用它们,就会是一样的事情。所以我想我别无选择。