回 帖 发 新 帖 刷新版面

主题:请教一问题:GFORTRAN咋跟IVF速度差距如此之大?

我的程序:
非线性杆系有限元(带梁单元)
算例:
近千个工况,几百个节点,近千个杆件。
IVF下:
3秒
GFORTRAN下:
13秒
。。。。
我纠结啊~~~~~

IVF是最大优化;
GF是O3。

为什么啊,难道GF没有别的更有效的优化么?
有没有哪位有经验的帮想想这是咋回事儿,有什么解决办法么?
谢谢了:)

回复列表 (共26个回复)

21 楼

我下載的就是您的最新版本,-fprofile-genarate鏈接不過。。。提示找不到符號。。。
相類似的還有那個-ftree-parallelize-loops=2也是找不到符號鏈接:)

另:原本我用的是最新版本的Mingw帶的,但發現它的4.5.0有些東西沒有,比如flto。
但更糾結的事情發生了:

我原本那個4.5.0版本的編譯出來的程序計算某算例需要14秒;您提供的版本需要13秒(編譯參數不變)
增加:-ffast-math后速度變為15秒(您的編譯器),不要快速數學參數后,再加上-flto。。。我滴媽呀。。。程序需要17秒才能算完。。。

仍然糾結當中。

22 楼

[quote]我下載的就是您的最新版本,-fprofile-genarate鏈接不過。。。提示找不到符號。。。
相類似的還有那個-ftree-parallelize-loops=2也是找不到符號鏈接:)

另:原本我用的是最新版本的Mingw帶的,但發現它的4.5.0有些東西沒有,比如flto。
但更糾結的事情發生了:

我原本那個4.5.0版本的編譯出來的程序計算某算例需要14秒;您提供的版本需要13秒(編譯參數不變)
增加:-ffast-math后速度變為15秒(您的編譯器),不要快速數學參數后,再加上-flto。。。我滴媽呀。。。程序需要17秒才能算完。。。

仍然糾結當中。[/quote]
-fprofile-genarate写错了吧 应为-fprofile-generate
-ftree-parallelize-loops=2在我这里也没问题啊,这个选项会默认链接libgomp.a和libpthread.a,如果这两个找不到也会找不到符号的,可以考虑手动链接-lgomp -lpthread,
-flto减慢速度是可能的,gcc官方说,这个选项在mingw/cygwin上表现差强人意,和Linux下的gold链接器配合使用才有很好的效果,要过一段时间等稳定版本,而gold在windows下面移植有些问题,不太稳定,所以各位gcc for windows编译者并没有把binutils的gold ld编译出来

23 楼

呵呵,是我在論壇里寫錯了,在編譯時拼寫是正確的:)
確實沒找到庫,明兒我再試試去:)用了profile就能知道瓶頸在哪兒了:)到時再跟CVF的profile比較一下就大體知道差異在哪兒了:)
還是需要麻煩一下董兄:這個profile的庫文件是哪個啊?,也就是說我需要另加哪個-l????的參數呢:)

24 楼

[quote]呵呵,是我在論壇里寫錯了,在編譯時拼寫是正確的:)
確實沒找到庫,明兒我再試試去:)用了profile就能知道瓶頸在哪兒了:)到時再跟CVF的profile比較一下就大體知道差異在哪兒了:)
還是需要麻煩一下董兄:這個profile的庫文件是哪個啊?,也就是說我需要另加哪個-l????的參數呢:)[/quote]
PGO的库我不是很清楚,你可以把链接error发上来,我可以大约知道是什么库链接问题,
此profile和性能剖析profile不同,产生性能剖析profile是用-pg开关,然后用gprof之类的查看

25 楼

喔,這樣啊,明天我去到單位再看看吧:)
再次感謝董兄啊:)

26 楼

回董兄:
那個問題找到了,原來是需要在編譯和鏈接時都加上-fprofile-generate。

另:
通過profile分析(-pg)發現原來我的瓶頸在函數調用。。。
inline果然沒效。。。
除去函數調用時的損失,我的算法只需要4秒就可以算完了(也就是說函數調用花費了10秒的時間)。。。
不知道編譯器有沒有方法讓所有函數調用都變成fastcall?這樣或許能管點兒用?

我来回复

您尚未登录,请登录后再回复。点此登录或注册