5. 編譯CPMD
5.1 CPU:x86_64 compiler:PGI
./mkconfig.sh PGI-AMD64 > makefile
make
若沒有錯誤了,可以看到cpmd.x的執行檔,就恭喜你,已經編譯完成。在用PGI安裝不太會有問題,會有問題通常是忘了設PGI的環境變數,而無法執行PGI
5.2 CPU:x86_64 compiler:PGI,MPICH
./mkconfig.sh PGI-AMD64-MPI > makefile
vi makefile
修改23, 24行中的內容,因為CPMD是使用pgf90去compile,所以安裝的mpich也必須用pgf90
23, 24
FC = mpif77 -c -fastsse -tp k8-64
LD = mpif77 -fastsse -tp k8-64
FC = mpif90 -c -fastsse -tp k8-64
LD = mpif90 -fastsse -tp k8-64
make
若沒有使用MPICH都可以編譯的過,有用MPICH也應該沒有多少問題
5.3 CPU:x86_64 compiler:IFORT
./mkconfig.sh IFORT-AMD64 > makefile
vi makefile
修改15行中的內容,現在的使用的CPU架構以苻合ia32和ia32e,所以就改p7
15
FFLAGS = -pc64 -tpp6 -O2 -unroll
FFLAGS = -pc64 -tpp7 -O2 -unroll
make
5.4 CPU:x86_64 compiler:IFORT,MPICH
./mkconfig.sh IFORT-AMD64-MPI > makefile
vi makefile
要修改的地方同5.3,在使用FC和LD不需要修改
make
5.5 CPU:x86 compiler:PGI
./mkconfig.sh PC-PGI > makefile
vi makefile
修改15行中的內容,-pc64有點語法錯要改成-pc 64
15
FFLAGS = -Mr8 -pc64 -Msignextend -Msecond_underscore
FFLAGS = -Mr8 -pc 64 -Msignextend -Msecond_underscore
21-23行,要針對不同的機器挑選不同的最佳化參數,FC和LD不改還可以,但是CC的-tp px選項一定要刪除,因為gcc沒有這語法
21-23
CC = gcc -O2 -Wall -tp px
FC = pgf90 -c -fast -tp px
LD = pgf90 -fast -tp px
CC = gcc -O2 -Wall -mcpu=pentium-m
FC = pgf90 -c -fast -tp p7
LD = pgf90 -fast -tp p7
make
在compile時所用的函式庫是用PGI內附的,所以安裝上不太會有問題
5.6 CPU:x86 compiler:PGI,MPICH
./mkconfig.sh PC-PGI > makefile
vi makefile
要修改的地方如5.5
修改15行中的內容,-pc64有點語法錯要改成-pc 64
15
FFLAGS = -Mr8 -pc64
FFLAGS = -Mr8 -pc 64
21-23行,要針對不同的機器挑選不同的最佳化參數以及設定FC和LD
21-23
CC = mpicc -O2 -Wall
FC = mpif77 -c -fast
LD = mpif77 -fast
CC = mpicc -O2 -Wall -mcpu=pentium-m
FC = mpif90 -c -fast -tp p7
LD = mpif90 -fast -tp p7
make
6. 測試CPMD
CPMD的網站上有提供測試範例,可以下載到cpmd-test.tar.gz,這個檔同樣的是個壓縮檔,所以一樣要解壓縮
tar zxvf cpmd-test.tar.gz
解完壓縮後可以看到CPMD-test的目錄,裡面有很多個資料夾,放的都是測試檔案
cd CPMD-test
在這裡就挑kpoints的目錄
cd kpoints
裡面有很多測試檔,這裡選用si8-k8x8x8-auto.inp此輸入檔,將這個測試檔複製到/tmp底下去測試,記得SI_MT_LDA要一起複製
cp si8-k8x8x8-auto.inp SI_MT_LDA /tmp
到/tmp底下
cd /tmp
6.1 without MPICH
執行cpmd.x,後面要接輸入檔的全名,然後將輸出導到si8-k8x8x8-auto.log檔案裡
./cpmd.x si8-k8x8x8-auto.inp >& si8-k8x8x8-auto.log
若可以執行無誤,及沒問題了
6.2 with MPICH
mpirun -np 2 cpmd.x si8-k8x8x8-auto.inp >& si8-k8x8x8-auto.log
若有用MPICH的話,要藉由mpirun去執行才會達成平行運算的效果
Reference :
Homepage of Axel Kohlmeyer ~axel.kohlmeyer/home.html
CPMD Official Website