ar2*_*015 1 c++ optimization branch-prediction c++20
根据C++分支感知预测,我准备了一个测试,看看它有多么有效.
所以,在对照样本中,我写道:
int count=0;
for (auto _ : state) {
if(count%13==0) {
count+=2;
}
else
count++;
benchmark::DoNotOptimize(count);
}
Run Code Online (Sandbox Code Playgroud)
在C++11分支预测中,我写道:
#define LIKELY(condition) __builtin_expect(static_cast<bool>(condition), 1)
#define UNLIKELY(condition) __builtin_expect(static_cast<bool>(condition), 0)
int count=0;
for (auto _ : state) {
if(UNLIKELY(count%13==0)) {
count+=2;
}
else
count++;
benchmark::DoNotOptimize(count);
}
Run Code Online (Sandbox Code Playgroud)
在一个C++20,
int count=0;
for (auto _ : state) {
if(count%13==0)[[unlikely]]{
count+=2;
}
else
count++;
benchmark::DoNotOptimize(count);
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,不支持quick-bench.但无论如何,我把它留在那里.
现在,在gcc和clang下获得基准测试对于这样一个基本的例子没有效果.
我做错了吗?
您的工作台没有显示出差异,因为CPU的分支预测与gcc一样好,__builtin_expect可以优化您的简单示例.
有关分支预测的完整深入解释,请参阅Stack Overflow上的这个优秀答案.
| 归档时间: |
|
| 查看次数: |
203 次 |
| 最近记录: |