gpt4 book ai didi

performance - 使用 1 的步幅对今天的 vDSP 性能仍然至关重要吗?

转载 作者:行者123 更新时间:2023-12-04 17:20:35 25 4
gpt4 key购买 nike

helpful but somewhat dated 中2006 年 11 月关于使用 vDSP 对代码进行矢量化的文章,作者声明:

Important to keep in mind is the fact that only operations with strides equal to one will deliver blazingly fast vectorized code.

今天仍然如此吗?即使是在具有更强大的矢量内在函数的较新的 Intel 处理器上?

我问是因为我正在编写一些矩阵数学例程,并且刚刚开始将它们全部切换为使用类似 Fortran 的列主要排序,以努力成为更容易与 MATLABBLASLAPACK 兼容。但现在我发现我对 vDSP 的一些调用需要处理不再连续的矢量......

目前这些 vDSP 调用是我的代码执行的瓶颈例程。并不是说这种情况总是,但至少现在我不想为了让对其他库的调用更简单而放慢它们的速度。

我现在最常调用的 vDSP 例程是 vDSP_distancesq,以防有影响。

最佳答案

还是对的。 AFAIK(从 SSE4.x 开始,我认为 AVX 不会改变这一点)SSE 内存加载指令仅加载连续 block 。

尽管需要一些额外的洗牌操作,但您可以使用 2 的步幅进行矢量化。

这实际上是一个适契约(Contract)一个缓存行的问题,以便一次从缓存中加载整个 SSE 寄存器。 (内存 -> 缓存传输的数量对性能更为关键)。

为了支持分散聚集 SSE,需要大更新的不是 SIMD 指令,而是高速缓存和内存 Controller 。

关于performance - 使用 1 的步幅对今天的 vDSP 性能仍然至关重要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15753463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com