gpt4 book ai didi

控制 GCC 优化

转载 作者:太空宇宙 更新时间:2023-11-04 02:17:31 26 4
gpt4 key购买 nike

我正在尝试测试我有权访问的机器的缓存属性。为此,我正在尝试读取内存并对其计时。我改变工作集大小和步幅访问模式以获得不同的测量值。

代码如下所示:

clock1 = get_ticks()
for (i = 0; i < 1000000; i++) {
for (j = 0; j < (workingset * stride / sizeof(data_t)); j += stride) {
*array[j];
}
}
clock2 = get_ticks()

现在的问题是,在合理的优化级别下,gcc 将优化读取,因为它没有副作用。我不能没有优化级别,否则所有循环变量都会导致读取内存。我已经尝试了一些不同的事情,比如使数组易变,并使用转换为易变的内联函数,但是 gcc 对易变变量的处理很难预测。执行此操作的合适方法是什么?

最佳答案

一种可能性是以一种不容易优化的方式使用数组数据,例如

clock1 = get_ticks();
sum = 0;
for (i = 0; i < 1000000; i++) {
for (j = 0; j < (workingset * stride / sizeof(data_t)); j += stride) {
sum += array[j];
}
}
clock2 = get_ticks();
return sum;

sum 应该在一个寄存器中,加法操作应该不会对循环时序产生任何影响。

如果测试函数和调用者都在同一个编译单元中,你可能还需要确保你确实对返回的总和值做了一些事情,例如通过 printf 输出。

关于控制 GCC 优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5332625/

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