SHUSCT / SHUBYD_GMCORE_ASC24

MIT License
0 stars 0 forks source link

Some loop-expand in adv/ffls_mod.F90 #38

Closed shepherdmrf closed 5 months ago

shepherdmrf commented 5 months ago

Screenshot from 2024-03-31 15-45-43 Screenshot from 2024-03-31 15-45-28

shepherdmrf commented 5 months ago

无论是否修改ifelse,还是仅仅一些单纯的循环展开似乎只在run_case('gmcore_adv_driver.exe', 'adv_dc4.360x180')起到效果,会从110s减到80s 但在其他exe里,在经过上述修改后的代码是无法正确运行的,有些需要运行几千秒的只运行了一秒

shepherdmrf commented 5 months ago

@BeverlyCrl @Jonathan523 @GrassBlock2016

BeverlyCrl commented 5 months ago

咱有个疑问,就是如果你只展开了循环 需要考虑两件事情: 1.整个循环体(循环内部)需要完完全全的copy一份在循环末尾,并且将copy部分里面的所有i改为i+1 2.是否有做余数部分处理,可以看出你截图的地方的原循环的条件是修改了的,有-1,也有步进为2。但是我不知道在这个循环下面你有没有考虑最后如果多出一个奇数的情况。

如果2没有被充分考虑,就可能会出现你说的这种情况,因为可能刚好dc4没有余数,也就是余数为0。这个时候有没有余数没有太大关系。但是其他的用例可能都是有余数的。这个时候少算了部分数据,肯定是要报错的。

shepherdmrf commented 5 months ago

我进行余数处理后,情况还是几千秒的程序三秒跑完 @BeverlyCrl

BeverlyCrl commented 5 months ago

那确实有些奇怪了,可能有那里的细节被遗漏了导致运算结果出错。要不先换个地方试试看?这里先放放,后面可以用编译unroll来试试这部分的展开