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);
});
}
1条答案
按热度按时间hiz5n14c1#
这些都是从M1,但我怀疑任何重大的变化与M2。
大:https://dougallj.github.io/applecpu/firestorm-simd.html
小:https://dougallj.github.io/applecpu/icestorm-simd.html