C语言 M2的循环计数 neon ?

nqwrtyyt  于 2022-12-11  发布在  其他
关注(0)|答案(1)|浏览(139)

bounty将在3天后过期。回答此问题可获得+100声望奖励。Stan希望吸引更多人关注此问题。

有没有关于苹果M1/M2上SIMD有多少个周期的资源?比如x86 https://uops.info/table.html或agner fog?我希望我能给予更大的奖励,但这就是我所拥有的全部代表
我从来没有在ARM机器上编程过。我看了一下sse 2neon
https://github.com/DLTcollab/sse2neon/blob/7bd15eac51e36bf7426052f8515358cb665d8c04/sse2neon.h
我首先查找的是setzero,我怀疑dup是不是正确的选择,所以我尝试了nanobench,发现xor更快,而且sub本身也不一样。
有什么东西可以让我大致了解一下吗?我的目标是M2

#include <arm_neon.h>
#define ANKERL_NANOBENCH_IMPLEMENT
#include "nanobench.h"

int32x4_t setzeroA()
{
    return vdupq_n_s32(0);
}
int32x4_t setzeroB()
{
    int32x4_t v;
    return vsubq_u32(v, v);
}
uint8x16_t setzeroC()
{
    uint8x16_t v;
    return veorq_u8(v, v);
}

int main() {
    ankerl::nanobench::Bench().run("Set", [&] {
        auto v = setzeroA();
        ankerl::nanobench::doNotOptimizeAway(v);
    });
    ankerl::nanobench::Bench().run("sub", [&] {
        auto v = setzeroB();
        ankerl::nanobench::doNotOptimizeAway(v);
    });
    ankerl::nanobench::Bench().run("xor", [&] {
        auto v = setzeroC();
        ankerl::nanobench::doNotOptimizeAway(v);
    });
}

相关问题