循環矢量化是在開始時計算所有右側表達式的時候。我剛剛發現我的循環正在被矢量化(在FORTRAN 77中......不要問)。我需要在每次迭代中更新我的循環條件變量,但是如何重寫以解決此矢量化問題?循環矢量化以及如何避免它
在related post中,我正在尋找一種方法來禁用FORTRAN中的此優化「功能」,但在此我正在尋找一種更一般化的算法解決方案。
循環矢量化是在開始時計算所有右側表達式的時候。我剛剛發現我的循環正在被矢量化(在FORTRAN 77中......不要問)。我需要在每次迭代中更新我的循環條件變量,但是如何重寫以解決此矢量化問題?循環矢量化以及如何避免它
在related post中,我正在尋找一種方法來禁用FORTRAN中的此優化「功能」,但在此我正在尋找一種更一般化的算法解決方案。
這不是循環矢量化對我意味着什麼。對我來說這句話意味着編譯器將生成可以利用硬件的任何矢量計算能力的代碼。在簡單的Intel Xeon上,這可能意味着生成SSE4指令來同時操縱一些相鄰的陣列元素,在Cray上,可能會有更多的可用於同時執行向量寄存器上的相同操作。
您如何看待所有RHS表達式是「在發病時計算的」?我不確定你的意思。你能發表一些代碼來解釋嗎?如果你的意思是在進入第一次迭代時計算通過循環的次數,那麼這是正確的。當涉及到優化代碼時,這是非常有用的功能,而且大多數Fortran程序都不會從避免中受益。
如果您在Fortran中編寫DO循環更新,迭代變量被標準禁止,並且始終一直記得。您的編譯器可能會讓您避開它,但我不相信發生這種情況的Fortran程序。
所有人都很喜歡,是的,這些都是DO循環,所以在那裏一定是我的問題!我想我可以做一個IF/THEN/GOTO組合。 – 2010-12-13 14:36:13
如果您發佈了一些代碼,我們可能能夠幫助您解開依賴關係。如果可能的話,避免條件總是好的,如果沒有其他的話,則優化。如果您曾經寫過GOTO聲明,我們有權允許您在另一隻腳上拍攝自己:-) – 2010-12-13 14:42:59
我不確定您發佈的兩個相關問題是否有助於您明確回答您的潛在問題。這讓我很困惑! – 2010-12-13 14:32:45
我的歉意。我想把問題提交給一般情況,普通觀衆可能是一件好事,並且FORTRANnies的另一個線程中保留FORTRAN特定的細節也可能是好的。不過,我會交叉引用這個線程。 – 2010-12-13 14:40:23
你是在談論循環展開? – ja72 2010-12-13 14:49:11