找了三天都没找出来的bug



  • 我的从核程序的结构如下:
    0_1560432375309_6eb10cdb-8116-49cf-8cb6-1b652cb1054d-image.png

    问题是我运行16个mpi进程的算例就会出现(能成功运行64个mpi进程的算例):
    0_1560432447487_b35694af-c23a-494b-a5a8-6cdb3bd74b6e-image.png

    如果我把其中一个if及其里面的代码注释了,另外一个算例就能成功运行出来,把其中一个算例里面和athread_get/put相关的语句屏蔽了,另外一个也能成功运行出来。实在找不出原因了,求助



  • 问题在athread_get/put接口,仔细检查一下各接口参数是否正确
    http://bbs.nsccwx.cn/topic/133/athread编程常见错误指南



  • 问题就在于单独跑任意一个if都是对的,把两个if写上就报错了,我在测试过,另一个if的确没执行,但确实会对执行的if产生影响(注释了就不报错,且结果正确)。 dma描述符错误就三种情况,我都检查过,没这个三种情况出现,但还是报错了。。。



  • @timewind 论坛搜libspc



  • 我修改了一些东西(比如把一维数组改成二维数组),现在出现了这个错误,
    0_1560575207431_ae9586b2-0cdc-4ebb-95b6-5d9845511985-image.png

    单独打开任意一个if不报错且结果正确,如果打开两个if,就报错(上图),概括的讲就是两个if不能共存
    我两个if里面定义的数组加起来确实超过了64kb, 但单独一个if里面定义数组没有超过64kb。



  • @段晓辉 我好像找到原因了,我把其中一个if里面的数组改小了,另一个if成功运行且结果正确(后果是数组改小的if结果肯定就不正确。。)
    现在的问题是 如果没有进入if,里面的数组不会被声明才对,可是从结果上看,似乎神威系统同时声明了两个if里面的数组。 不知道怎么解决了



  • @段晓辉 解决了 因为我数组里面直接写的数字,我用一个变量替换了这个数字,结果就对了
    这算是神威从核的一个bug吗? 还是其他什么原因。。。



  • 我也发现了疑似这个问题,我编译链接两份slave代码整个程序就会出问题,难道是定长数组不判断直接开辟空间?



  • @bch 可能是



  • @timewind 遇到这种情况可以尝试数组分别开在两个函数里面。
    如果是定长编译器的一种可能的优化就是压栈的时候直接把数组大小加上。


Log in to reply