我有一個程序比我想要的運行速度慢。這可以優化嗎?
我已經做了一些分析,我發現是絕大多數的處理時間,佔用了部分
DO K = 0, K_MAX
WRITE(EIGENVALUES_IO, *) K * 0.001 * PI, (W_UP(J), J=1, ATOM_COUNT)
DCMPLXW_UP(:) = DCMPLX(W_UP(:))
DO E = 1, ENERGY_STEPS
ENERGY = MIN_ENERGY + ENERGY_STEP * REAL(E, DP)
ZV = DCMPLX(ENERGY, DELTA)
ON_SITE_SINGLE = DCMPLX(0.0_DP)
DO Q = 1, ATOM_COUNT
DO J = 1, ATOM_COUNT
ON_SITE_SINGLE(J) = ON_SITE_SINGLE(J) + (MATRIX_UP(J, Q) * MATRIX_UP_CONJG(J, Q))/(ZV - DCMPLXW_UP(Q))
END DO
END DO
DOS_DOWN(E) = DOS_DOWN(E) - WEIGHTS(K) * SUM(IMAG(ON_SITE_SINGLE))
END DO
END DO
線
ON_SITE_SINGLE(J) = ON_SITE_SINGLE(J) + (MATRIX_UP(J, Q) * MATRIX_UP_CONJG(J, Q))/(ZV - DCMPLXW_UP(Q))
是做一個傷害。
我是這方面的新手,有沒有加速這方面的一些方法? AFAIK,同樣的原則適用於C,所以你們的任何幫助也會很好。
該陣列所有複雜
K_MAX是1000個
ENERGY_STEPS是1000
ATOM_COUNT低(< 50)
您會希望該行佔用大部分時間,因爲每執行一次該語句執行次數最多爲2500次。除數可以在內循環之外計算。這條線將一直佔用,但總數將減少。 – 2010-09-15 13:01:34