比较 C 和 avx2 程序集性能的基准测试方法?

问题描述 投票:0回答:1

我想了解有关基准测试的详细信息。如果我想比较 C 和 avx2 手写汇编实现之间的性能。

我应该使用 -O3 编译器标志吗?但是 -O3 将优化 C 并使速度可能与 avx2 一样快。或者我应该使用 -O1?

benchmarking compiler-optimization avx2
1个回答
0
投票

如果你想让你的 asm 看起来好得不切实际,请阻止编译器像往常一样进行优化。如果您想了解实际可以获得多少,请与实际编译 C 语言以供生产使用的方式进行比较。


这取决于你想学什么。如果您尝试将矢量化 asm 与标量 asm 进行比较,那么 gcc 或

clang -O3 -march=native -fno-tree-vectorize
可能是合适的。至少
-O2
.

如果你想看看手写的内在函数或其他东西是否有什么好处,那么你不应该 gimp 编译器。如果它已经很好地从纯 C 源代码制作 AVX2 asm,那么您的纯 C 已经是 AVX2 实现。无论如何,只要您使用该编译器和选项。

查看编译器生成的 asm(参见 *How to remove "noise from GCC/clang assembly output?"),看看您是否注意到任何可以更改的地方,以使其更快。亲自尝试一下,看看你是否正确。通常你可以让编译器发出你想要的 asm。也许通过使用内在函数,但如果你幸运的话,你可以让它自动矢量化纯 C,这样你就可以获得很好的可移植可维护 C,还有 AVX2 汇编的性能。请参阅为什么用于测试 Collatz 猜想的 C++ 代码比手写汇编运行得更快? 回复:帮助编译器与使用它不会发出的 asm 击败它。

顺便说一句,这个问题的措辞很奇怪。 C 是用内在函数编写 AVX2 代码的好语言。我假设您是在谈论 C 与手写汇编,就像您在上一个问题中问的那样。

© www.soinside.com 2019 - 2024. All rights reserved.