Osaka 2K

Dari PaloDozen

Osaka 2K adalah perangkat lunak untuk kalkulasi pseudo potential electronic structure yang dibuat oleh Kaun SHIRAI, dari Osaka University, Japan.

Daftar isi

Lisensi

Masih belum jelas.

Mengunduh

Osaka2K diperoleh atas kerjasama antara ITB dan Osaka University. Diberikan dalam bentuk kode sumber osaka2k.tar.gz.

Memasang

Osaka2k dipasang dari kode sumber, lalu dikompilasi menggunakan intel fortran compiler. Platform pemasangan kali ini adalah Rocks Cluster 5.2 (Centos 5.3). Tahap pertama, ekstraksi

$ tar -xzf osaka2k.tar.gz

Kalau mau lihat, dokumentasi ada di direktori osaka2k/Doc. Lumayan buat sedikit petunjuk. Untuk kompilasi lansug saja ke direktori osaka2k/fsrcs202. Menurut petunjuk, langsung kompile

make
make inip
make cryst

Kalau gagal, silahkan lihat bagian hacking ;)

Memakai

Yah ... tunggu diajari sensei dulu

Hacking

Sewaktu menerima kode sumber, usaha make pertama kali gagal total. Errornya banyak bener :(. Ini karena platform di sini berbeda dengan aslinya, perlu hacking cukup serius (total 2 malam). Maaf ya, ini cerita tahap hackingnya untuk pelajaran. Skip saja kalau alergi dengan yang teknis-teknis begini.

Untuk membetulkan, mari buka berkas makefile. Ternyata, osaka2k ini maunya:

  • kompilasi harus lewat mpif90. Artinya perlu openmpi.
  • dikompilasi pakai Intel Fortran Compiler. Pantes kalau pakai GNU gfortran, errornya banyak sekali karena ada syntax yang tidak dikenal.
  • perlu blas dan lapack. Untuk amannya, pakai intel MKL saja.

Nah silahkan pasang dulu ketiga paket tersebut. Yakinkan untuk setup MPI dan IFORT dengan benar, dengan membuat script /etc/profile.d/intel.sh

ICPATH=/opt/intel/Compiler/11.0/083/intel/bin
. $ICPATH/ifortvars.sh intel64
export OMPI_FC=ifort

Jalankan make lagi. Error yang didapat adalah:

ld: -f may not be used without -shared

Setelah diselidiki, sumber kesalahan ini berasal dari definisi

LPACK_DIR = -Wl,-framework -Wl,veclib

Tidak nyambung yah. Artinya, -framework tidak dikenal oleh ld. Entah apa maksudnya di platform asal, mari lebih dulu lihat apakah -Wl,-framework itu ? Atau malah lebih primitif, apa itu ld ? Setelah panggil "man dl", ternyata :

ld  combines a number of object and archive files, relocates their data
and ties up symbol references. Usually the last  step  in  compiling  a
program is to run ld.

Oh, jadi ini masalah menggabung berkas obyek (*.o) dangan berkas library. Karena nampaknya yang diinginkan adalah lapack, kita ganti saja dengan pustaka lapacknya MKL. Untuk tahu apa pustakanya:

$ ls /opt/intel/Compiler/11.0/083/mkl/lib/emt64

Terlihat adanya berkas libmkl_lapack.a dan libmkl_lapack.so. Jadi mari kita ubah

LPACK_DIR = -L/opt/intel/Compiler/11.0/083/mkl/lib/emt64 -lmkl_lapack

Option -L artinya menyuruh ld melihat ke direktori dimaksud, sementara -l memuat pustaka dimaksud (nama asli libmkl_lapack ditulis mkl_lapack saja, tanpa lib).

Mari kompile lagi. Waduh kok masih error

ld: cannot found mkl_lapack

Cari sana sini, oprek sana-sini ... waduh sudah subuh .... sambung besok malam ya.

Ok, mulai lagi. Periksa dengan teliti, pilihan -L dan -l nya sudah benar. Kenapa bisa begitu ? Ayo baca manual ld lagi ...

Note---if the linker is being invoked indirectly, via a compiler driver
(e.g.  gcc) then all the linker command line options should be prefixed
by -Wl, (or whatever is appropriate for the particular compiler driver)
like this:

       gcc -Wl,--startgroup foo.o bar.o -Wl,--endgroup

This  is  important,  because otherwise the compiler driver program may
silently drop the linker options, resulting in a bad link.

Aha, pantas saja. Betulkan lagi ah ...

LPACK_DIR = -Wl,-L/opt/intel/Compiler/11.0/083/mkl/lib/emt64 -lmkl_lapack

Ketika dikompile lagi, dapat puluihan pesan undefined reference to mkl_BLAH_BLAH

Artinya ada pustaka yang kurang nih. Setelah lihat-lihat ke direktori pustaka MKL, nampaknya kita perlu tambah

LPACK_DIR = -Wl,-L/opt/intel/Compiler/11.0/083/mkl/lib/emt64 -lmkl -lmkl_lapack

Coba lagi, masih error lagi. Namun kali ini pesan sudah berkurang dan berubah jadi undefined reference to omp_BLAH_BLAH serta undefined reference to __kmpc_BLAH_BLAH.

Singkat kata, setelah browsing sana-sini, akhirnya setting yang jalan adalah:

LPACK_DIR = -Wl,-L/opt/intel/Compiler/11.0/083/mkl/lib/emt64 -lmkl -lmkl_intel_thread -lmkl_lapack -liomp5

Kontributor: Mursito