gpt4 book ai didi

c - GCC 4.8.1 编译时在 C99 代码中有许多宏和内联函数

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

我尝试编译包含多行代数的代码。基本上,它是 2 个具有 12 个维度和可变模式大小的张量的强力收缩。但是,代码的性能目前不是问题,因为它甚至无法编译。代码本身嵌入到一个用 C99 编写的更大的框架中,它试图模仿 C++ 的行为,即它使用宏来替换模板和许多内联函数。基本上,这是无法编译的(我知道这并不优雅,但代码是使用 Mathematica 生成的,目的是使张量索引正确。稍后会对其进行优化):

void __attribute__((optimize("O0"))) MP(dineutron_uddu)(double complex* result, double complex* VVV_, double complex* vMv_, unsigned int L, int tis){

unsigned int lt=(unsigned int)nsites_dir[TUP];
double complex (*vMv)[L][4][lt][L][4]= (double complex (*)[L][4][lt][L][4]) vMv_;
double complex (*vvv)[L][nt][L]= (double complex (*)[L][nt][L]) VVV_;
unsigned int nnodes3=nnodes_dir[XUP]*nnodes_dir[YUP]*nnodes_dir[ZUP];
unsigned int mynode3=mynode_dir[XUP]+nnodes_dir[XUP]*(mynode_dir[YUP]+nnodes_dir[YUP]*mynode_dir[ZUP]);

{
unsigned int tf;
for(tf=0; tf<lt; tf++){
int tfs= lt*mynode_dir[TUP]+tf;

unsigned int n0, n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n11;
COMPLEX sum=0.;
unsigned int run=0;

for(n0=0; n0<L; n0++){
for(n1=0; n1<L; n1++){
for(n2=0; n2<L; n2++){
for(n3=0; n3<L; n3++){
for(n4=0; n4<L; n4++){
for(n5=0; n5<L; n5++){
for(n6=0; n6<L; n6++){
for(n7=0; n7<L; n7++){
for(n8=0; n8<L; n8++){
for(n9=0; n9<L; n9++){
for(n10=0; n10<L; n10++){
for(n11=0; n11<L; n11++){

if(run%nnodes3==mynode3){

sum += vvv[n0][n4][tfs][n8] * vvv[n1][n5][tfs][n9] * ~(vvv[n2][n6][tis][n10]) * ~(vvv[n3][n7][tis][n11]) *

(

+ 0.25 * vMv[0][n2][0][tf][n9][1] * vMv[0][n3][0][tf][n5][1] * vMv[0][n11][0][tf][n4][1] * vMv[0][n7][1][tf][n8][0] * vMv[0][n10][1][tf][n1][0] * vMv[0][n6][1][tf][n0][0]

.....

接下来是大约 600 行代码,与之前的代码非常相似,但用于索引的不同组合。它不能在代数上进一步简化。....

然后循环结束,就是这样。

基本上,代码只包含复杂的加法和乘法,使用 C99 双复数数据类型。循环索引在编译时是未知的。我指定了属性 O0 以关闭优化以检查这是否会导致问题,但它仍然只是挂起。我的问题是:

1) 你们有人知道这里出了什么问题吗?2) 如果不是,我如何才能找到,即打印编译器正在处理的实际代码行,即获得编译器所做工作的某种实时输出。

非常感谢

最佳答案

  1. 能否将您的函数拆分成几个部分,并将每个迷你函数放入一个单独的文件(翻译单元)中?我想 GCC 在重新排列 basic blocks 时会花费很长时间

  2. 也许您可以使用 -fdump-... optionis?

关于c - GCC 4.8.1 编译时在 C99 代码中有许多宏和内联函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21566592/

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