假设我有一个这样的循环:
#define UF 1 // Unroll Factor
for(i=0; i<N-UF+1; i+=UF)
a[i] = b[i] + c[i];
我想用UF = 4
展开循环。为此,我应该像这样更改代码:
for(i=0; i<N-UF+1; i+=UF){
a[i+0] = b[i+0] + c[i+0];
a[i+1] = b[i+1] + c[i+1];
a[i+2] = b[i+2] + c[i+2];
a[i+3] = b[i+3] + c[i+3];
}
好吧,我希望它应用另一个UF
,我必须更改代码!
如果我可以做这样的事情,我的问题就解决了:
for(i=0; i<N-UF+1; i+=UF){
//The following loop should generate code somthing like it prints the body
/for(j=0; j<UF;j++){
a[i+j] = b[i+j] + c[i+j];
}/
}
我可以使用fprintf
并生成另一个文件但是我想要更快的方式花费太多时间。有没有办法在单个函数中实现它并在编译之前使用它?我想看看编译器的行为所以我需要在我的代码中更改它们。如果有任何解决方案,我很感激。
我使用C
所以C++
和模板对此问题无用。
使用GCC 6.2.0
- Linux