PC *_*ite 13 c optimization gcc loop-unrolling
当我找到选项时,我正在阅读GCC的优化选项-funroll-all-loops.
其描述如下:
展开所有循环,即使在输入循环时它们的迭代次数不确定.这通常会使程序运行得更慢.'-funroll-all-loops'意味着与'-funroll-loops'相同的选项
如果编译时迭代次数未知,编译器如何展开循环?编译器是否需要此信息才能展开它?它产生了哪些相应的C代码,如果它通常使程序运行得更慢,在什么情况下这可能是有用的?
如果这通常会使程序运行得更慢,那么在什么情况下这会很有用?
好吧,他们假设如果您选择此选项,您就知道自己在做什么,如果不知道,则不应使用此选项。
gcc 会做什么,我使用了这个示例程序:
#include <stdio.h>
void f(int j )
{
for( int k = 0; k < j; ++k )
{
printf( "%d\n", k ) ;
}
}
Run Code Online (Sandbox Code Playgroud)
并用 godbolt 对其进行了测试,它根据剩余的迭代次数生成了一个跳转表(查看实时结果):
cmpl $1, %ebp
movl $1, %ebx
je .L1
testl %r12d, %r12d
je .L27
cmpl $1, %r12d
je .L28
cmpl $2, %r12d
je .L29
cmpl $3, %r12d
je .L30
cmpl $4, %r12d
je .L31
cmpl $5, %r12d
je .L32
cmpl $6, %r12d
je .L33
Run Code Online (Sandbox Code Playgroud)