討論區快速選單
知識庫快速選單
網路投保旅行平安險 網路投保旅行平安險
[ 回上頁 ] [ 討論區發言規則 ]
請問F95運算矩陣最快的方法?
更改我的閱讀文章字型大小
作者 : b3b4(不三不四)
[ 貼文 1 | 人氣 2213 | 評價 0 | 評價/貼文 0 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/11/26 上午 01:01:03
一般來說,矩陣的運算有三種方法:DO-LOOP、F95還可以將矩陣直接做運算、還有就是FORALL指令。如果這三種方式比較的話,哪一種速度可以達到最快?
「彭國倫」書上說FORALL可能比DO-LOOP來得快,但我實際測試結果,好像並不盡然。當然也可能跟我程式本身有關。

又,如果將IMSL提供的一些矩陣運算的package考慮進來的話,有沒有最省時的運算方式呢?

矩陣運算的時間是否一定至少跟矩陣中的元素個數成正比?有沒有例外呢?可不可能加快,不論個數多少,都一樣快呢?

謝謝。
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人b3b4註記此篇回應為很有道理 2004/12/17 上午 12:48:47
Interested person can try out this small program:

Program SpeedTest
Implicit None
Integer, Parameter :: Size1 = 1000, Size2=2000
Integer :: I, J
Real, Dimension(Size1,Size1) :: A, B, C, D, X
Real, Dimension(Size2,Size2) :: E, F, G, H, Y
Real :: Time_start, Time_end
A = 1.0
B = 2.0
E = 1.0
F = 2.0
!
Call CPU_TIME(Time_start)
Do I = 1, Size1
Do J = 1, Size1
C(I,J) = A(I,J) + B(I,J)
End Do
End Do
Call CPU_Time(Time_end)
Write(6,*)' Loop Method: Size = ', Size1, Time_end - Time_start, 'Seconds'
!
Call CPU_TIME(Time_start)
Do I = 1, Size2
Do J = 1, Size2
G(I,J) = E(I,J) + F(I,J)
End Do
End Do
Call CPU_Time(Time_end)
Write(6,*)' Loop Method: Size = ', Size2, Time_end - Time_start, 'Seconds'
!!
Call CPU_TIME(Time_start)
D = A + B
Call CPU_Time(Time_end)
Write(6,*)'Direct Method: Size = ', Size1,Time_end - Time_start, 'Seconds'
!
Call CPU_TIME(Time_start)
H = E + F
Call CPU_Time(Time_end)
Write(6,*)'Direct Method: Size = ', Size2, Time_end - Time_start, 'Seconds'
!!
Call CPU_TIME(Time_start)
FORALL(I=1:Size1, J=1:Size1) X(I,J) = A(I,J) + B(I,J)
Call CPU_TIME(Time_end)
Write(6,*)'FORALL Method: Size = ', Size1, Time_end - Time_start, 'Seconds'
!
Call CPU_TIME(Time_start)
FORALL(I=1:Size2, J=1:Size2) Y(I,J) = E(I,J) + F(I,J)
Call CPU_TIME(Time_end)
Write(6,*)'FORALL Method: Size = ', Size2, Time_end - Time_start, 'Seconds'
!
Stop
End
作者 : shene(冼鏡光) 人氣指數超過30000點
[ 貼文 135 | 人氣 42288 | 評價 1420 | 評價/貼文 10.52 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/1/30 下午 02:46:17
>一般來說,矩陣的運算有三種方法:DO-LOOP、F95還可以將矩陣直接做運算、還有就是FORALL指令。如果這三種方式比較的話,哪一種速度可以達到最快?
>「彭國倫」書上說FORALL可能比DO-LOOP來得快,但我實際測試結果,好像並不盡然。當然也可能跟我程式本身有關。

FORALL是從HPF (High Performance Fortran)變出來的,原本的用意是給有平行運算能力的電腦使用,在只有一個CPU的機器上不會比較快。

>矩陣運算的時間是否一定至少跟矩陣中的元素個數成正比?有沒有例外呢?可不可能加快,不論個數多少,都一樣快呢?

這要看是什麽運算。例外總是有的,加快的速度也與該例外狀况有關,所以也不可能有定論。
 板主 : 徵求中
 > Fortran - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - Fortran - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
Fortran
1 f77f95 3300 
2 dennis 470 
3 cc 350 
4 smallpotato 320 
5 qq 290 
6 冼鏡光 230 
7 eraser 220 
8 小文 210 
9 iner 200 
10 wuda 160 
Fortran
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.03125