fortran66のブログ

fortran について書きます。

【メモ帳】Jupyter 用 Intel Fortran kernel

Jupyter Lab で Intel Fortran

先日、Jupyter Lab でエラーメッセージの情報を拾うことで Fortran の分割コンパイルができることが分かりました。 fortran66.hatenablog.com

カーネルを覗いて見ますと、少しいじれば、無理に実行するエラーなしで、自分の指定した名前で module のオブジェクトを作れそうだったので、週末の徒然に Python 分からないくせに、色々いじくってみました。またついでにコンパイラintel fortran に変えてみました。

設定ファイルの類も、名前を連動して変えなければならないようで、エラーが出るたびにいじくっていたら、何となく出来ました。いじりが適当過ぎて、どこをいじったか分かんなくなってしまって好ましくないですw もう少し整理してみるつもりです。GitHub は使い方が謎過ぎて、zip で落として git で経過保存せずにいじってしまいましたw

なお WSL 上では intel fortran の coarray 利用プログラムは、コンパイルは出来ましたが、実行はエラーが出てうまくゆきませんでした。

実行例 1

10n (n=1..8) 以下の素数の個数を求めて、素数定理の見積もり   { \pi(n)\simeq{n\over \log(n) } } と比較します。

素数の数は、ちゃんと書いた fortran プログラムで求めますが、Module と それを利用するメインプログラムは、別々に分割(分離)コンパイルします。

素数定理による見積もりは、Fortran の暗黙の型宣言を利用して、スクリプト的に書きなぐった Fortran プログラムで計算します。

出てきた結果を、Python のノートブックにコピペして、手動でリストに突っ込んで図示してみます。

図は重なり合って、ほとんど違いが分かりません。よい近似になっているようです。 f:id:fortran66:20180908022656p:plain

Modern Fortran Explained: Incorporating Fortran 2018 (Numerical Mathematics and Scientific Computation)

Modern Fortran Explained: Incorporating Fortran 2018 (Numerical Mathematics and Scientific Computation)

実行例2

ASCII ART プログラムも動きました。 https://cdn-ak.f.st-hatena.com/images/fotolife/f/fortran66/20180908/20180908022912_original.png

元の Fortranカーネルは、テンポラリファイルの消去処理に問題があったので、元祖の C 用のカーネルを見て、丸写しで修正しました。いずれにせよカーネルを正常に終了させないと、テンポラリ・ディレクトリにゴミがどんどんたまってゆきます。

Fortran の module は、オブジェクトファイルの他に、インターフェースを .mod ファイルとして出力するので、再利用を考え、これらは Jupyter 起動ディレクトリに作るようにしてみました。この辺は、深く考えていません。

インデントがずれただけなのにエラー吐きまくりで、蛇マジむかつくw

邪神ちゃんドロップキック 邪神ちゃん 全高約135mm PVC製 塗装済み 完成品 フィギュア

邪神ちゃんドロップキック 邪神ちゃん 全高約135mm PVC製 塗装済み 完成品 フィギュア

【メモ帳】Fortran 2018 新機能に関するメモ その他

coarray イメージ間の集団通信

勘違いしていたのですが、新たに導入される co_xxxx 型の集団通信の対象は、coarray のみならず、普通の変数でもいいようです。coarray-次元のリダクションの印象が強すぎて、間違ってました。

3.19 Collective subroutines

  • call co broadcast( a, source image[ , stat, errmsg] )
  • call co max( a[ , result image, stat, errmsg] )
  • call co min( a[ , result image, stat, errmsg] )
  • call co sum( a[ , result image, stat, errmsg] )
  • call co reduce( a, operation[ , result image, stat, errmsg] )

a is a scalar or an array that has the same shape on all the images of the current team. It has
intent inout. It must not be coindexed. It may be a coarray but this is not required.

また、co_reduce に対応して、普通の配列に対するリダクション演算も一般の関数に対して拡張されます。

5.11 New reduction intrinsic reduce

  • reduce(array,operation[,mask,identity,ordered] )

or

  • reduce(array,operation,dim[,mask,identity,ordered] )

N2161 The New Features of Fortran 2018 (Reid - Replaces N2145)

Parallel Programming with Co-arrays (Chapman & Hall/CRC Computational Science)

Parallel Programming with Co-arrays (Chapman & Hall/CRC Computational Science)

Fortran2003~2008 の機能のまとめ

スパコンセンター講義集の一つですが、CRAY の人が、95 以降 2015 以前の新規命令をまとめて解説してくれています。スライドがないのが残念です。

「Not-so-old Fortran」Harvey Richardson, Cray Inc.

ARCHER TechForum Mar 2015 Not so old Fortran

配列のベクトル添え字を利用した三次対称群 S3

standard basis による表示を用います。ベクトル添え字 (vector subscript) を何重にもネストさせて、群演算を表わします(複数回の置換)。特にベクトル添字は代入の右辺にも、左辺にも使えるので、右作用・左作用も表わせまする?

プログラム

        program S3       ! symmetric group S3 (order 6=3!) 
            implicit none
            integer, parameter :: i0(*) = [1, 2, 3]
            integer, parameter :: i1(*) = [1, 3, 2], i2(*) = [3, 2, 1], i3(*) = [2, 1, 3]
            integer, parameter :: i4(*) = [3, 1, 2], i5(*) = [2, 3, 1]
            integer :: inv(size(i0)) 
        ! GET operation
        ! order 1 element
            print *, 'identity element: i0', i0
        ! order 2 elements
            print *, 'i0 == i1(i1)', all( i0 == i1(i1) ) 
            print *, 'i0 == i2(i2)', all( i0 == i2(i2) ) 
            print *, 'i0 == i3(i3)', all( i0 == i3(i3) ) 
        ! order 3 elements
            print *, 'i0 == i4(i4(i4))', all( i0 == i4(i4(i4)) ) 
            print *, 'i0 == i5(i5(i5))', all( i0 == i5(i5(i5)) )
        ! inverse
            print *, 'i0 == i4(i5)', all( i0 == i4(i5) )
            print *, 'i0 == i5(i4)', all( i0 == i5(i4) )
            print *, 'i4 == i5(i5)', all( i4 == i5(i5) )
            print *, 'i5 == i4(i4)', all( i5 == i4(i4) )
        ! PUT operation
        ! inverse 
            inv(i5) = i0
            print *, 'inv(i5) = i0; inv == i4', all( inv == i4 )
            inv(i4) = i0
            print *, 'inv(i4) = i0; inv == i5', all( inv == i5 )
        end program S3

実行結果

 identity element: i0           1           2           3
 i0 == i1(i1) T
 i0 == i2(i2) T
 i0 == i3(i3) T
 i0 == i4(i4(i4)) T
 i0 == i5(i5(i5)) T
 i0 == i4(i5) T
 i0 == i5(i4) T
 i4 == i5(i5) T
 i5 == i4(i4) T
 inv(i5) = i0; inv == i4 T
 inv(i4) = i0; inv == i5 T

f:id:fortran66:20180907032146p:plain

【メモ帳】windows julia 1.0 Jupyter Lab kernel 統合

Windows Intel Python3 で Julia Jupyter 統合

ミーハーなので Julia 1.0 を入れてみることにしました。Julia は東海岸から出たので、昔の国道 128 号線沿いの DEC とか、あるいは Thinking Machines のように文化的な問題で結局コケるのではと思ったりw

WindowsIntel Python な環境なのですが、jupyter.exe のパスを明示的に与えておくとエラーが出ずにゆくようです。以下の質疑にあるように、julia の普通のコマンド・プロンプトで、

ENV["JUPYTER"]="C:\\IntelPython3\\Scripts\\jupyter"

と打っておくと、']' の後のパッケージ・プロンプトで add IJulia ですんなり行きました。
github.com

要らないカーネルを消す

要らなくなったカーネルは以下のようにやって消せます。まず kernel list を表示させて、その一覧から名前を見つけて消します。

jupyter kernelspec list
jupyter kernelspec uninstall 名前

遊び例

SO(2) の回転行列の微小変化を数値微分を求めて、行列の exp で有限回転に戻す。
f:id:fortran66:20180906223114p:plain

ただし、ほとんど手動かつフォーマット文が分からない・・・

【メモ帳】CoArray Fortran の notebook

CAF の Jupyter の notebook

sourceryinstitute の Fortran kernel for Jupyter with Coarray support では、Binder によって Github 上の Docker が動いて coarray Fortran が試せます。

github.com

README にあるように、ローカルに Docker file を落としてきて動かそうとしたのですが、web サーバー起動のところでうんともすんとも言わなくなって死にます。gfortran 専用 Docker file を試しに作ったものは動いたので、何か jupyter-CAF-kernel と WSL との相性の問題だと思うのですが、よく分かりません。

Docker 初めてなので、どっから手を付けてよいのか分かりません。とりあえず、生インストールした同等の環境はあるのでいいのですが・・・

それはともかく Binder で起動したページからでも、file-open-upload でローカルで作ったノートブックが読み込めるようです。

私も自分の所に Fortran の動く Binder 用の docker ファイルを置いて、ノートブックを起動させたいのですが、道は遠そうです。

とりあえず、Github にローカル環境で作った試しの notebook をあげてみました。幼女には難しいw

github.comf:id:fortran66:20180905014422p:plain

【メモ帳】Windows IntelPython Jupyterlab terminal 出ない

Windows 環境には anaconda ではなく IntelPython を入れてしまったのですが、JupyterLab はデフォルトでは入っていませんでした。

下記のページに従うと JupyterLab は動きます。Intel 版の部品が置き換えられてゆきますが、気にしないことにします。一部管理者権限で CMD を開かないと駄目なものがあるようです。
wshinya.hatenablog.com

この状態の JupyterLab には terminal (powershell) が出てきませんが、これは、

pip install --upgrade jupyterlab

による upgrade で解決します。intel python の部品群はさらに置き換えの模様です。

ピップ エレキバン MAX200 24粒入

ピップ エレキバン MAX200 24粒入

【寝言】JupyterLab が面白いですの

Jupyter Lab 面白い

WSL 側のコンソールも使えるし、画像も出せます。markdown / LaTeX も同時レンダリング。IPython や Jupyter notebook はイマイチ使う気がしませんでしたが、これは面白いです。すぐ飽きるかもしれませんがw

notebook 上の coarray fortran に頼らずとも、コンソールで gfortran の新しいのや intel fortran も使えますし、便利。画面のもっと広いディスプレイが欲しくなります。
https://cdn-ak.f.st-hatena.com/images/fotolife/f/fortran66/20180904/20180904015125.png


素数と全く関係ない TKTT AA
fortran66.hatenablog.com

【寝言】日本ヤバス! 水からガソリン再び

民主党レベルの低能w moonshine

今朝の朝刊でぶっ飛んだw これが1面トップ。おまけに、別のマジキチ消費税増税爺さんが新たに出てきて寝言を書いているし。

www.yomiuri.co.jp

f:id:fortran66:20180903224546j:plain
f:id:fortran66:20180904020649j:plain

 政府は来年度から、日本発の革新的な技術開発を推進するため、複数の研究者らに予算を配分し、同じ開発テーマの成果を競わせる新制度を始める方針を固めた。10~20年後をめどに、高齢化対策や防災など、政府が定めた開発テーマに沿った新技術の実現を目指す。

 新制度は「ムーンショット型研究開発制度」と命名され、内閣、文部科学、経済産業の3府省合同で実施する。来年度予算の概算要求で内閣、文科両府省が関連予算に約60億円を計上した。今後、経産省分予算が上乗せされ、要求総額は100億円を超える見通しだ。

 開発のテーマは「人々の関心をひきつける斬新で野心的な目標」(政府関係者)となる。例えば、〈1〉仮想現実の映像の中で故人を登場させ、本人がいるかのように自然な会話ができる技術〈2〉台風の洋上の進路を操作して日本上陸を回避する技術〈3〉重症患者を冬眠のように1週間程度、人工的に体の活動を休止させ、治療態勢が整うまで延命させる技術――などだ。

(ここまで415文字 / 残り660文字)
2018年09月03日 06時00分

(1)はヘロイン中毒者PKディックのSF小説でみた。(2)は戦後の原水爆実験盛んな頃に良く言われていたが核兵器ではエネルギーが足りない。(3)は電撃フリントGOGO作戦でヨガで仮死状態になってた。

<ストーリー>
ZOWIE(世界連帯秘密諜報機関)首脳陣は、秘密組織ギャラクシーが世界の気象現象をコントロールしているという情報を掴んだ。ZOWIEの首脳陣達は、この陰謀を阻止する為、一人の男を送り込むことになった。その男の名はデレク・フリント、世界最強のスーパー・スパイなのだ!

戦前の海軍を巻き込んだ「水からガソリン事件」を思わせるヤバイ感じw 鳩山ポッポが同種療法を健康保険適用対象にしようとしたりしたが、それと変わらないレベル。消費税を上げないと破綻する!と喚くマジキチおじさん並。まさに民主党レベル。
 
fortran66.hatenablog.com

【メモ帳】JupyterLab に CoArray Fortran

JupyterLab ?

Jupyter Notebook より インターフェースが洗練されたものが出ていたようです。よく分かりません。

WSL 側にインストールした anaconda で動かしたものを、windows10 側のブラウザにアドレス・トークンをコピペして 実行しています。

f:id:fortran66:20180903001847p:plain

JupyterLab Documentation — JupyterLab 0.18.4 documentation

www.youtube.com

Coarray Fortran Kernel で module の分離コンパイル

cell に module のみを置いて、コンパイル・オプションに -c を与えてオブジェクト生成のみとして shift-enter します。すると、その時に無理に実行しようとして失敗して出るエラーメッセージに、/tmp 以下に生成されたオブジェクトファイル名が出るので、次の cell のコンパイル・オプションにそのファイル名をコピペすれば、分離コンパイルが出来ます。

Jupyter の仕組みが分かれば、分離・分割コンパイルの仕組みを作れそうですが、幼女には難しそうw
f:id:fortran66:20180903034129p:plain
エラトステネスの篩で、100 以下の素数を求めています。

%num_images: 1
%fcflags: -c 
module m_test
    implicit none
contains
    function eratos(n) result(ires)
        integer, intent(in)  :: n
        integer, allocatable :: ires(:) 
        integer :: i, m(n)
        m = [0, (i, i = 2, n)]
        do i = 1, int(sqrt(real(n)))
            if (m(i) /= 0) m(i**2::i) = 0
        end do    
        ires = pack(m, m /= 0)
    end function eratos  
end module m_test

[proxy:0:0@HP8] HYDU_create_process (utils/launch/launch.c:75): execvp error on file /tmp/tmpc1vroea8.out (Permission denied)
Error: Command:
`/usr/bin/mpiexec -np 1 --disable-auto-cleanup /tmp/tmpc1vroea8.out`
failed to run.
[Coarray Fortran kernel] Executable exited with code 255

%num_images: 1
%fcflags: /tmp/tmpc1vroea8.out
program test
    use m_test
    print '(10i4)', eratos(100)
end program test
   2   3   5   7  11  13  17  19  23  29
  31  37  41  43  47  53  59  61  67  71
  73  79  83  89  97
コマンドライン引数
  • To control the number of images we have implemented a jupyter notebook "magic" for the form:

%num_images:
where should be replaced by a suitable (read small) positive integer.
top

  • Controlling compilation

Additional "magics" have been implemented to control the compilation of the program. These are as follows:

%fcflags: [ [ ... []]]
Use this magic to pass flags to the fortran compiler, GFortran, via the caf compiler wrapper script. The caf script ensures propper compilation linking against OpenCoarrays.
%ldflags: [ [ ... []]]
Specify flags to pass to the linker. This should rarely be necessary.
top

  • Controlling arguments passed to compiled programs

The %args: [ [ ... []]] "magic" may be used to pass command line arguments to your program. In addition, quoting is respected, so you can pass arguments with spaces as well.

Coarray Fortran Kernel / OpenCoarray Install

Open coarray2.2.0 を install 後、Jupyter への coarray の統合は以下のページに従いました。
github.com

その他

Open coarray2.2.0 に team 機能のお試し版を統合しようと頑張りましたがうまくいきませんでした。gfortran のコンパイラとして働くところまでは行きましたが、cafrun で MPI 実行するところでうまくいきませんでした。

Binder というものもやってみたいのですが、わけわかめで意味不明です。