我正在编程一个嵌入式powerpc /questions/tagged/powerpc32位系统具有32 kbyte 8路组相联二级指令缓存。为了避免缓存抖动,我们以某种方式对齐函数,使得高频调用的一组函数的文本(想想中断代码)最终出现在单独的缓存集中。我们通过根据需要插入虚拟函数来做到这一点,例如
void high_freq1(void)
{
...
}
void dummy(void)
{
__asm__(/* Silly opcodes to fill ~100 to ~1000 bytes of text segment */);
}
void high_freq2(void)
{
...
}
这让我觉得丑陋且次优。我想做的是
- avoid
__asm__
完全并使用纯C89(也许是C99)
- 找到一种方法来创建所需的
dummy()
GCC 优化器不会触及的间隔符
- 的大小
dummy()
间隔符应可配置为 4 字节的倍数。典型的间隔符为 260 到 1000 字节。
- 对于总共 500 个函数中的一组大约 50 个函数应该是可行的
我还愿意探索全新的技术,以某种方式放置一组选定的函数,以便它们不会映射到相同的缓存行。链接描述文件可以做到这一点吗?
使用 GCC__attribute__(( aligned(size) ))
.
或者,通过-falign-functions=n
在 GCC 命令行上。
- GCC 函数属性 http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html
- GCC 优化选项 http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)