fortran66のブログ

fortran について書きます。

Intel Fortran v.18 update 2 来る!

Intel Fortran Compiler 18.0 for Windows

Bug Fix が主のようです。

release note より

Changes in Update 2 (Intel® Fortran Compiler 18.0.2)

  • Changes to mitigate speculative execution side-channel issues and new /Qindirect-branch option
  • Microsoft* Visual Studio 2017 Update 5 support
  • Corrections to reported problems

Changes in Update 1 (Intel® Fortran Compiler 18.0.1)

  • First update with Japanese Localization
  • More stable integration with Microsoft* Visual Studio 2017
  • Corrections to reported problems

Changes since Intel® Visual Fortran Compiler 17.0 (New in Intel® Fortran Compiler 18.0.0)

  • New assume:contiguous_pointer and assume:contiguous_assumed_shape options
  • New /Qopt-zmm-usage option
  • Diagnose non-contiguous pointer assignment to CONTIGUOUS pointer with /check:contiguous
  • Control-flow Enforcement Technology (CET) support
  • New option /Qimf-use-svml to force the usage of SVML
  • Compile time dispatching for SVML calls
  • Microsoft Visual Studio 2015* Shell and Libraries added
  • Microsoft Visual Studio 2017* support added
  • Microsoft Windows Server 2016* support added
  • Support for Microsoft Visual Studio 2012* has been dropped
  • All -o* options replaced with -qo* options
  • Enhanced /Qinit=[keyword] initialization choices
  • Offline documentation removed from the Installed Image
  • Context-sensitive Help (F1) and Help Menu items Link to Online Documentation
  • New and Changed Intel® Xeon Phi™ Offload Features
  • Features from OpenMP* TR4 Version 5.0 Preview 1
  • Profile Guided Optimization Hardware-based Event Sampling
  • New and changed compiler options
  • Fortran 2008 features supported
  • Corrections to reported problems

Modern Fortran: Style and Usage

Modern Fortran: Style and Usage

Modern Fortran Explained (Numerical Mathematics and Scientific Computation)

Modern Fortran Explained (Numerical Mathematics and Scientific Computation)

Numerical Computing with Modern Fortran (Applied Mathematics)

Numerical Computing with Modern Fortran (Applied Mathematics)

【寝言】ゾンビは移民 

浮動小数点数のゾンビ NaN と 2 の補数表現整数のゾンビ

浮動小数点数界のゾンビと言えば NaN (Not A Number) が挙げられると思います。一度 NaN が出ると、これと演算したものは皆 NaN に感染して NaN になっていくゾンビのような恐ろしさがあります。

しかし、奇妙なことに sign 関数で符号を取ったりすると、普通の数に戻ったりします。IEEE754 における NaN の内部表現は一意ではなく符号ビットも正負とも定まらないのですが、なぜか正として扱われることが多いようです。IEEE754 では NaN の符号について定義されていないので処理系依存なんだという話を聞いたことがあります。

ではこの NaN を整数に変換した場合どうなるのでしょう?試してみました 。なお nan は数値として普通に数値の入力に使えます。

以下に見るように、NaN は 2**31 に変換されました。2**31 は、2**31 = -2**31 と 0 = -0 のように符号を反転させても元に戻る数なので、32 ビット 2 の補数表現の符号付整数界のゾンビっぽい数なので、変換するならこれしかないよなという納得感はあります。

コンピュータ内の整数表現は、整数そのものというよりビット数に応じた剰余演算構造を取っていますが、符号付の 2 の補数表現は剰余でかつ最小剰余になるような表現になっていて、かつ本来 0 元になるべき 2**31 が居座ったために、2**31 は符号を反転させても元に戻るという 0 元のような性質を持ちつつ 0 でないゾンビのような数になっています。

ソース・プログラム

    program nan
      implicit none
      real :: x
      read *, x
      print *, x, int(x), ':', 2**31, -2**31
    end program nan

intel fortran v18.0.1

nan
           NaN -2147483648 : -2147483648 -2147483648
続行するには何かキーを押してください . . .

gfortran v7.2.0

nan
              NaN -2147483648

但し2*31は略

ゾンビ映画

冷戦終結後に、1950年代の冷戦期に流行した宇宙人侵略SF映画は核戦争の不安を投影にしたものだ、という解釈が一般化しました。

ここしばらく、英米などで流行していたゾンビ映画も、してみると移民への不安を投影したものだと言えるかもしれません。

最近のゾンビ映画のゾンビは、走ったり知恵があったり、何らかのコミュニケーションや愛情の可能性を示したり、昔のゾンビに比べて進化していますが、昔のゾンビが漠然たる不安の投影なのに対して、今のゾンビが移民に対する不安の投影と思えば、まぁ時代に合わせて変わるのも理解できます。

移民による社会構造の矛盾が噴き出しているイギリスでゾンビ映画が人気を博するのもよく分かる気がします。

ブラッド・ピット主演の「ワールド・ウォーZ」では、明らかに移民と分かる形でゾンビを描いていたので、移民問題もいよいよ深刻化して、抑圧された漠然とした不安から意識レベルでの具体的な問題となってきたかもしれません。

そうならば、もはや遠回しのゾンビ映画は役目を終えて、ゾンビ映画ブームは去ってゆくのでしょう。

アメリカではショッピング・センターがアマゾンに負けて続々と縮小していっているようなので、立てこもる場所もなくなりそうですがw

ゾンビ ディレクターズカット版<HDリマスター版> [Blu-ray]

ゾンビ ディレクターズカット版 [Blu-ray]

ゾンビとしての支那人

中共では、突如改憲がなされて習近平の終身国家主席化が確定的になりましたが、この改憲はもちろん改憲を目指す安倍首相を側面支援するために行われたものですw

改憲提起は採決のわずか一週間前で、必然性も感じられない唐突ぶりにもかかわらず賛成が99%を示すような投票結果でした。習近平は安倍首相応援団として実に従順な忠犬ぶりを示しました。キビ団子を1個呉れてやりましょう。ホレ食え。おすわり!お手!

銀台金闕夕沈沈  餌を貰って習ちんちん!

しかし、マルクス・レーニン主義歴史観通りに、資本主義から独占資本主義、そして帝国主義へ向かっている中共に、いずれ民主化するとか寝言を騙っている欧米白人リベラルの愚劣さは滑稽千万で、ゾンビにも心があって共存できるとか言ってゾンビに食われるゾンビ映画の滑稽家を思い出させます。

【寝言】読書その他

ボルヘス「詩という仕事について」

詩という仕事について (岩波文庫)

詩という仕事について (岩波文庫)

これがボルヘスの講演集の中で一番明晰で初歩的で読みやすかった。時間的には1967年で最も早い講演。読む順番を間違えたw
これより後のは同じ主題の脚注的な感じか。

【寝言】バーチャルYouTuber

まさかのちゆちゃんw

www.itmedia.co.jp

fortran66.hatenablog.com

スタバでお薬手帳

ぶらっとスタバに入ったら、普段見たことのない品があって、戯れに頼んでみたら異様に値段が高くて参ってしまったが、その場で粉をひき始めて、ひいた粉の匂いまでクンクン嗅がせてもらった。犬なら大喜び。

おまけにお薬手帳みたいなコーヒーパスポートという手帳をくれて、お薬手帳みたいに手帳に貼り付けるシールまでくれた。 調剤薬局気分
よき友、三つあり。一つには、物くるゝ友。

ま、実は日本茶党なんで、コーヒーの味わかんないんですけど。全てに最高のものを求めるクロイ―・ルール王家のロドルフ殿下の愛飲しているネスカフェ・プレジデントが最高級だってのは知ってますw

www.starbucks.co.jp

【メモ帳】括弧積など

昔の記事

昔の役に立たない糞記事が何故か検索で上位に来ているようで申し訳ないです。元記事に少し追記しておいたけれどももう少し補足を。
ベーカー・キャンベル・ハウスドルフの公式 - fortran66のブログ

括弧積

角運動量とか Lie 代数で括弧積 [A, B]=AB-BA というのが出てきて、形がきもいので、積なら積らしく中置記号で定義しろよ、とか文句を言いたくなります。犬だったらクンクン匂いを嗅がずにはいられません。

クンクンする代わりに路傍の糞の如く眺めると、これは非可換な二項演算なので代数学の慣例で積と呼んでいるのだなと思われます(可換なら和)。またこれは結合則が成り立たない非結合演算なので、演算の順番を明示せねばならず括弧をつけているのでしょう。[ [A, B], C]/=[A, [B, C] ]

そうであるとすると、もしこの積を中値二項演算子記号(例えば・)で表わすと、( (A・B)・C) /= (A・(B・C) ) のように、いちいち中置記号の他に括弧で演算順序を指定しなければならなくなります。それならば、いっそ演算と括弧を同時に表せばいいんでね?と思いたくなります。そうして括弧積が出てきたのではないかと思います。

もっとも、同じように結合則が成り立たない外積とかでも × で中値記号で書いてますし、 微分演算子 D に至っては D(xy)=(Dx)y + x(Dy) で記号的には結合則が成り立たないのに、中置記号すらなしに出てきています。文意への忖度が要求されます。

これら外積微分演算子の非結合性は、説明なしに電磁気のベクトル解析のところで同時に登場して、うまい具合に初学者を混乱させています。なかなか巧妙なトラップだなと感心します。

これらの演算の結合則からのズレは [[A,B],C] - [A,[B,C]] で見積もられますが、括弧積はヤコビの恒等式で表わされる関係で [B,[A,C]] に比例するようになっています。それは微分演算子の場合の (Dx)y-D(xy)=-x(Dy) に対応付けられます。 

括弧積は可換則からのズレ、ヤコビの恒等式結合則からのズレとも見なせますが、ヤコビの恒等式が成り立つのは、性質のいい結合則からのズレなのでしょう。

なお \mathrm{ad}(A)=[A, \,\,\,] は、コンピュータ的には二項演算子の第一項を  A に固定した単項演算子化になるんでしょう。カリー化の一種。

BCHの公式の証明に出てくる式

BCH 公式の証明では、 de^A dA の関係式を求めるところがみそになっています。ここで AdA は非可換なので話がややこしくなっています。なお e^AA のべきで定義されているので、[e^A, A]=0で可換です。

導出1

一つの方法では
 e^A A = A e^A から出発して、微小量をとって
(de^A)A+e^AdA=dAe^A+A(de^A)
辺々移行して
 [A, de^A]=e^A(dA)e^{-A}e^A-(dA)e^A
より
\mathrm{ad}(A)de^A = (\mathrm{Ad}(e^A) - 1) dA e^A
これから \mathrm{Ad}(e^A)=e^{\mathrm{ad}(A)} の関係を使って
de^A = {e^{\mathrm{ad}(A)}-1 \over \mathrm{ad}(A)} dA e^A
で、 de^A dA の関係式を求めています。

ここで、\mathrm{ad}(A)e^{\mathrm{ad}(A)}-1 は、おなじ A で展開される式なので可換で順番によらないため、普通の割り算の形で書いても大丈夫です。

この式の意味を考えるため、別の方法での導出も見てみます。

導出2

天下り式に \exp(A+dA)\exp(-A) を考えます。
この式は、以下の式と形式的に同じです。
1+\int_0^1{d\over dt} \exp(t(A+dA))\exp(-tA)dt
微分して、
= 1+\int_0^1 \exp(t(A+dA)) dA \exp(-tA)dt
dA は微小量として二次以下を捨てるとすると、
1+\int_0^1 \{\exp(tA) dA \exp(-tA) + \mathcal{O}(dA^2)\} dt
よって、
\simeq 1+\int_0^1 \mathrm{Ad}(\exp(tA))(dA)  dt
つまり、
= 1+\{\int_0^1 \exp(t\mathrm{ad}(A))dt\}dA
積分して、
= 1+{e^{\mathrm{ad}(A)} -1 \over \mathrm{ad}(A) } dA
と求まります。

ここで最初の式にもどって形式的に右から e^A をかけると、
 e^{(A+dA)}\simeq e^A+{e^{\mathrm{ad}(A)} -1 \over \mathrm{ad}(A) } dA e^A
と書けます。これを導出1の結果と見比べると、第二項が d(e^A) に対応していることが分かります。AdA の非可換性のために、めんどくさい形になっていますが微分量を求めていたことがはっきりします。

 {e^x-1 \over x} について

上式中で  {e^{\mathrm{ad}(A)} -1 \over \mathrm{ad}(A) } という意味不明な式が出てきてます。 {e^x-1 \over x} という形の式のについて、少し意味を考えてみます。

とりあえず分母に \mathrm{ad}(A) が出てきて気持ち悪いのですが、分子を定義に従ってべき展開すれば通分できるので問題ありません。

さて \mathrm{ad}(A)\equiv[A,\,\,] は一種の微分演算子と考えられるので、やや唐突ですがこれの替わりに微小量 h のかかった微分演算子 h\mathrm{D} が関数 f(x) に作用している場合を考えます。すると以下のようにあらわせます。

 {e^{h\mathrm{D}}-1 \over h\mathrm{D}} f(x)

ここで、e^{h\mathrm{D}}f(x)e^{h\mathrm{D}} が推進演算子なのでべき展開すれば形式的にテイラー展開に対応していて、e^{h\mathrm{D}}f(x)=f(x+h) に置き換えられます。したがって、上記の式は
 {1\over D}{f(x+h)-f(x) \over h}
と変形できます。ここで  {1\over D}微分の逆なので演算子法的には積分を表します。つまり、微分の極限を取らない有限でやめたやつを積分することを意味しているようです。(先に積分して微分モドキも可)

ベルヌーイ数の母関数の意味

ところで、実際の BCH の証明ではこの演算子の逆を用います。つまり  {x \over e^x-1} の形が出てきます。この式はベルヌーイ数の母関数になっている、ちょくちょく出てくる意味不明な式です。

形式的には、 x=h\mathrm{D} の時、上述の「積分微分モドキ」の逆演算子なので、「微分+リーマン積分の短冊を無限小にしないで有限でやめる演算」を意味していると思われます。リーマン積分の短冊を有限幅で止めるのは数値積分的な状況に対応していると考えられます。

ベルヌーイ数が、オイラーマクローリン展開を通じて、積分を短冊形の和で近似した時の補正項として出てくるのは、こんな意味付けがあるのかもしれません。

計算数学夜話―数値で学ぶ高等数学 (1978年)

計算数学夜話―数値で学ぶ高等数学 (1978年)

↑[追記:H30/3/17]これにありました。


今後の課題w

それがなぜ、この非可換演算子の微小変化で出てくるのか、いまいちわかりませんが、微小変化が0の極限ではなく、小さいけど極限というほどではない量のためかもしれませんw これは今後の課題とします。

【メモ帳】Fortran 2018 の CAF 機能を試す

Jupyter 上の OpenCoarrays

Sourcery Institute の好意で Jupyter 上で OpenCoarrays を試すことができます。(以下のページより)
github.com

少し、新しい CAF 機能を試してみることにします。

event post

ソース・プログラム
program test
  use, intrinsic :: iso_fortran_env
  implicit none
  type (event_type) :: et[*]
  integer :: m[*]
  event post(et[2])
  call event_query(et, m)
  print *, m
  sync all
  if (this_image() == 2) then 
    event wait(et, until_count = 4)
  else
    event wait(et, until_count = 0)
  end if   
  print *, m, this_image()
end program test
実行結果
           3
           0
           0
           0
           0           1
           0           3
           0           4
           3           2

reduction 計算

ソース・プログラム
module m_test
  implicit none
contains
  pure integer function im(i0, i1)
    integer, intent(in) :: i0, i1
    im = i0 + i1
  end function im  
end module m_test

program test
  use  m_test
  use, intrinsic :: iso_fortran_env
  use, intrinsic :: iso_c_binding, only: c_int
  implicit none
  integer:: m
  m = this_image()
  call co_sum(m, 1)
  print *, m
  call co_broadcast(m, 1)
  print *, m
  call co_reduce(m, im)
  print *, m, this_image()
end program test
実行結果
          10
          10
           2
          10
           3
          10
           4
          10
          40           1
          40           2
          40           3
          40           4

atomic 演算

ソース・プログラム
program test
  use, intrinsic :: iso_fortran_env
  implicit none
  integer(atomic_int_kind) :: ka[*]
  integer :: n
  ka = 0
  call atomic_add(ka[1], this_image())
  sync all
  if (this_image() == 1) print *, ka
end program test
実行結果
          10

Fortran 2018 in Fortran Wiki

CoArrays: Parallel Programming in Fortran (Chapman & Hall/CRC Computational Science)

CoArrays: Parallel Programming in Fortran (Chapman & Hall/CRC Computational Science)

Modern Fortran Explained (Numerical Mathematics and Scientific Computation)

Modern Fortran Explained (Numerical Mathematics and Scientific Computation)

Modern Fortran:: Software Engineering for Scientists (Chapman & Hall/CRC Computational Science)

Modern Fortran:: Software Engineering for Scientists (Chapman & Hall/CRC Computational Science)

Numerical Computing with Modern Fortran (Applied Mathematics)

Numerical Computing with Modern Fortran (Applied Mathematics)

Dr. Damian Rouson による Fortran 2018 Coarray に関する講演

Fortran 2018 による並列アプリケーション開発

Youtube に講演があげてあります。スライドも見られます。

約1年前の講演のその後の発展をのべています。
fortran66.hatenablog.com


insidehpc.com
なお記事中で名前を Rousan と間違えています。正しくは Rouson です。


First Experiences with Parallel Application Development in Fortran 2018

www.slideshare.net

Scientific Software Design: The Object-Oriented Way

Scientific Software Design: The Object-Oriented Way