【问题标题】:How does SIMD behave in this case?SIMD 在这种情况下表现如何?
【发布时间】:2012-01-16 21:02:17
【问题描述】:

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

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

例如:

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

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

在一般 SIMD 编程意义上,能够并行运行它的成本是否超过了计算它的成本?

【问题讨论】:

    标签: performance optimization concurrency parallel-processing simd


    【解决方案1】:

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

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

    使用 SIMD,所有算术单元都以锁步方式工作,执行相同的操作。没有任何独立性。

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

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

    【讨论】:

    • 谢谢 Ben,我现在似乎理解得更好了。但我无法控制这一点。引擎的规范定义我只能有一个 SIMD 上下文。我可以编写其他函数等,但只要我在主上下文中调用它们,它就会是同一件事。所以我想我别无选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多