2/29(月) 駿府・晴れ後雷後曇り

 本日は指定休日につき,ゆっくりのんびり作業しようと思ってたら,サーバ類が全て死んでた。どうやら丑三つ時過ぎに職場全体が停電したらしい。慌てて私設サーバルームに駆けつけて電源復帰させたのだが,代々受講生のWebサイトを格納したCentOS7マシンがリセットしまくって起動できず焦る。一度バックアップ用のUSB HDDを外してみたら無事起動,再度繋げて事なきを得る。はーしんど。

 予定通り,山下達郎のコンサートで英気を養い

IMAG0928

「LAPACK/BLAS入門(仮)」の原稿を上げる。全体的な手直しをしつつ,懸案だったWindows環境下でのサンプルプログラムのコンパイル方法の解説も準備。MAGMAのコンパイル,Windows化で滅茶苦茶時間がかかるということだったのでGPU用のプログラムは断念し,Intel Parallel Studio XE 2016 Composer Editionのお試し版を突っ込んでこの環境下でのコンパイルだけはできるようにした。結果はこちらの記事に書いた通り。一応これで良しとして,Intelコンパイラなんて入手できないよーという人のための環境づくりはオイオイ追加していきましょう。まぁでもこれにてとりあえず一件落着。

 さーて,来年度からは面倒なお仕事が増えそうで気が重いのだが,まぁプログラミングで気を紛らわせつつ人生の後半生を頑張って生きましょう。ちょうど定年までの折り返し地点なので,3月中には研究室の掃除,絶対やるぞ! やるぞったやらるぞ!

 寝ます。

How to compile a LAPACKE program on Windows 8.1 x64

 Windows 8.1 x64環境下でのIntel Parallel Studio XE 2016 + Visual Studio 2016を使ったLAPACKEプログラムのコンパイル方法のメモ。

1. 必要な環境変数一切合切を用意してくれるCUIショートカット「コンパイラ―16.0 Update 2インテル(R) 64 VS2015環境」を起動

スクリーンショット 2016-02-29 17.17.43

2. LAPACKEソースプログラム”lapack_dgesv_mkl.cを置いた”c:\lapack”へ移動

2016-02-29_190704

3. シリアル実行の時はicl (C/C++コンパイラ) を使って,例えば

c:\lapack>icl lapack_dgesv_mkl.c /link mkl_intel_lp64.lib mkl_core.lib mkl_sequential.lib

とする。

c:\lapack>icl lapack_dgesv_mkl.c /link mkl_intel_lp64.lib mkl_core.lib mkl_sequential.lib
インテル(R) 64 対応インテル(R) C++ コンパイラー (インテル(R) 64 対応アプリケーシ
ョン用)、バージョン 16.0.2.180 ビルド 20160204
(C) 1985-2016 Intel Corporation.  無断での引用、転載を禁じます。

lapack_dgesv_mkl.c
icl: 注意: この製品の評価期間は 17-mar-2016 UTC に終了します。
Microsoft (R) Incremental Linker Version 14.00.23026.0
Copyright (C) Microsoft Corporation.  All rights reserved.

-out:lapack_dgesv_mkl.exe
mkl_intel_lp64.lib
mkl_core.lib
mkl_sequential.lib
lapack_dgesv_mkl.obj

c:\lapack>lapack_dgesv_mkl
Intel(R) Math Kernel Library Version 11.3.2 Product Build 20160120 for Intel(R)
64 architecture applications
Max Number of Threads: 1
Dim = 4
A =
  0:   1.000000   0.500000   0.333333   0.250000
  1:   0.500000   0.333333   0.250000   0.200000
  2:   0.333333   0.250000   0.200000   0.166667
  3:   0.250000   0.200000   0.166667   0.142857
B =
  0:   1.000000   2.000000   3.000000   4.000000
  1:   2.000000   3.000000   4.000000   5.000000
  2:   3.000000   4.000000   5.000000   6.000000
  3:   4.000000   5.000000   6.000000   7.000000
C =
  0:   4.000000   6.083333   8.166667  10.250000
  1:   2.716667   4.000000   5.283333   6.566667
  2:   2.100000   3.050000   4.000000   4.950000
  3:   1.721429   2.480952   3.240476   4.000000
X =
  0:   1.000000   2.000000   3.000000   4.000000
  1:   2.000000   3.000000   4.000000   5.000000
  2:   3.000000   4.000000   5.000000   6.000000
  3:   4.000000   5.000000   6.000000   7.000000
X - B =
  0:   0.000000   0.000000   0.000000   0.000000
  1:   0.000000   0.000000   0.000000   0.000000
  2:   0.000000   0.000000   0.000000   0.000000
  3:   0.000000   0.000000   0.000000   0.000000

4. Intel Threadを使ってパラレル実行の時はiclコマンドを使って,例えば

c:\lapack>icl lapack_dgesv_mkl.c /link libiomp5md.lib mkl_intel_lp64.lib mkl_core.lib mkl_intel_thread.lib

でコンパイル。
Core i5-2500 (4 cores)で実行すると下記のようになる。

c:\lapack>icl lapack_dgesv_mkl.c /link libiomp5md.lib mkl_intel_lp64.lib mkl_core.lib mkl_intel_thread.lib
インテル(R) 64 対応インテル(R) C++ コンパイラー (インテル(R) 64 対応アプリケーシ
ョン用)、バージョン 16.0.2.180 ビルド 20160204
(C) 1985-2016 Intel Corporation.  無断での引用、転載を禁じます。

lapack_dgesv_mkl.c
icl: 注意: この製品の評価期間は 17-mar-2016 UTC に終了します。
Microsoft (R) Incremental Linker Version 14.00.23026.0
Copyright (C) Microsoft Corporation.  All rights reserved.

-out:lapack_dgesv_mkl.exe
libiomp5md.lib
mkl_intel_lp64.lib
mkl_core.lib
mkl_intel_thread.lib
lapack_dgesv_mkl.obj

c:\lapack>lapack_dgesv_mkl
Intel(R) Math Kernel Library Version 11.3.2 Product Build 20160120 for Intel(R)
64 architecture applications
Max Number of Threads: 4
Dim = 4
A =
  0:   1.000000   0.500000   0.333333   0.250000
  1:   0.500000   0.333333   0.250000   0.200000
  2:   0.333333   0.250000   0.200000   0.166667
  3:   0.250000   0.200000   0.166667   0.142857
B =
  0:   1.000000   2.000000   3.000000   4.000000
  1:   2.000000   3.000000   4.000000   5.000000
  2:   3.000000   4.000000   5.000000   6.000000
  3:   4.000000   5.000000   6.000000   7.000000
C =
  0:   4.000000   6.083333   8.166667  10.250000
  1:   2.716667   4.000000   5.283333   6.566667
  2:   2.100000   3.050000   4.000000   4.950000
  3:   1.721429   2.480952   3.240476   4.000000
X =
  0:   1.000000   2.000000   3.000000   4.000000
  1:   2.000000   3.000000   4.000000   5.000000
  2:   3.000000   4.000000   5.000000   6.000000
  3:   4.000000   5.000000   6.000000   7.000000
X - B =
  0:   0.000000   0.000000   0.000000   0.000000
  1:   0.000000   0.000000   0.000000   0.000000
  2:   0.000000   0.000000   0.000000   0.000000
  3:   0.000000   0.000000   0.000000   0.000000

c:\lapack>