如何在C中编译之前生成代码?

时间:2017-04-19 01:44:52

标签: c gcc

假设我有一个这样的循环:

#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

0 个答案:

没有答案