2021年12月

ログ一覧

12月31日(金)

何をしていたか記憶がない(1月3日にこれを書いている)。

12月30日(木)

記憶喪失。何してたっけ?年賀状書いたかな。

12月29日(水)

レポートの採点。昨日とは打って変わって集中力を全く欠く。半分しか進まなかった。

京大スパコンの事故

うわぁ・・・。しかも文責の人、知ってる人だ。前職でお世話になった。

後でリンク切れを起こした時のために簡単なまとめ。京大のLustreシステムの「ファイルのバックアップスクリプト」の最後に、ログファイルのお片付け処理もあった。ある時、スクリプトの見通しをよくするために変数などの整理をおこなった。しかし、スクリプトが実行中だったため、「実行中のスクリプトが上書き」されてしまった。バックアップ処理が終了後、ログの削除処理が走ったが、その際に変数が未定義状態となり、削除すべきでないファイルが一気に削除されてしまった。そのままバックアップも走り、復旧が不可能になったというもの。

この「bashスクリプトが実行中に上書きされると、上書きされたスクリプトで実行を継続する」という仕組みをしなかった人(僕)は多く、震え上がった。また、リリースの「弊社100%の責任により」という文章も話題に。

想像するだに胃が痛くなる。

12月28日(火)

寒い。

土日よく寝て、月曜はぼーっとしていたが、ようやく頭が回りだしたぞ。

矢上設置科目の出講希望確定。

プログラミング基礎同演習、物理情報工学ソフトウェア演習のシラバス確定。シミュレーション工学のシラバスはパートナーに投げた。

プログラミング基礎同演習、最後のビデオ録画した。

珍しくすごく集中力があったのに、全く研究やプログラミングに時間を使えなかった。悲しい。

12月27日(月)

よく寝たはずだが、全く集中できず。一つ仕事を終わらせたが、やはりミスった。

最近ミスが多すぎて本当にダメだ。もう少し落ち着いて仕事をしたい。

年賀状の印刷をした。

JPSJのレフェリー、登録情報が物性研になってたので修正した。ORC IDか何かで一括でやってほしいんだけどなぁ。

予算執行計画を立てた。まだ若干不透明。

12月26日(日)

よく寝た。

12月25日(土)

「7つのこと」、半年に一度くらいバズるんだけど、バズリ方がだんだん大きくなっている気がして怖い。ついに地上波にまで紹介されたらしいし。今回はポジティブな話題のなり方だけど、これ、悪い方に話題になったらもう致命的なんじゃなかろうか。すぐに燃え上がり、数日で話題として消費し尽くされ、後には骨も残らない。「彼ら」はすぐに次の犠牲者を探すのであろう。

少し前にQiitaの企業のアドベントカレンダーで、不適切な記事が掲載された。これは既存の記事に酷似した内容を掲載しつつ、その元記事への言及がなかった、というもの。詳細はわからないが、著者に悪意があったわけではないと思われる。しかし、まずい点を指摘された後、すぐに記事を削除するという対応はまずかった。結局、企業の広報に連絡が行き、お詫びのプレスリリースを出すことになってしまった。

引用がなかったのはまずいけれど、著者の気持ちもわからないではない。アドベントカレンダーというものを頼まれたか、やってみたいと思ったか、とにかくQiitaでの初投稿の記事なので、おそらく技術記事に慣れていなかったのだろう。そして、既存の記事を見て、面白そうと思い、それを自分なりに再実装したのだと思われる。で、最初に「これはこの記事を見て面白そうだったので再実装したものです」と一言かけば全く問題なかったのだが、それがなかった。で、指摘されたときに「すみません、おっしゃる通り参考にしました。冒頭に追記しました」で済んだはずなんだけど、おそらくテンパってすぐに消してしまったのだろう。それで話が大きくなってしまった。

ネットでは、よくも悪くも情報の伝達速度が年々早くなっているのを感じる。なんというか、パーコレーション確率に近くなっている感じ。そんな時代だから、「ネットとの付き合い方」をちゃんと知っておく必要があるのだろう。何度も炎上している僕がいうのもなんだけど。

いやしかし、所属企業や大学の名前をつけて情報を公開するの、本当に怖くなってくるね。

12月24日(金)

指導教員がネットで話題になるのって、学生さんからしたらどうなんだろうね?

いろいろテンパってる。不便で仕方なかったのでスキャナ買った。

机がいくつか欲しい。あとでかいディスプレイ。メンテ用に小さいディスプレイ(VGAがささる奴)とキーボード、マウスも必要だ。

12月23日(木)

なんか学生さんがサーバ落としたり、それまで知られてなかったスパコンのリソース上限にひっかかったりしていて頼もしい。このまま成長してスパコンブレイカーになってください。

駄目だ。多方面でいろいろミスる。完全にキャパオーバー。どうしたもんか。

12月22日(水)

ホワイトボード届いた。

学部のシラバス、英文も作成したほうが良いらしい。

集中講義のシラバス作らないと。こんな感じかな。

タイトル案:大規模数値計算が拓く物理学

シラバス案

  1. 数値計算の基礎
    • なぜ数値計算が必要なのか?
    • 数値実験とはどのような実験か?
    • 数値計算の種類
  2. モンテカルロ法(1)基礎的な話題
    • 乱数とはなにか
    • モンテカルロ法
    • マルコフ連鎖モンテカルロ法とメトロポリス法
    • エラーバーについて
  3. モンテカルロ法(2) 発展的な話題
    • クラスターアルゴリズムとImproved Estimator
    • 不偏推定量とJackknife法
  4. 分子動力学法(1) 基礎編 (主に数値積分法について)
    • 微分方程式の数値積分法
    • シンプレクティック積分
    • 温度制御(Langevin, Nose-Hoover)
  5. 分子動力学法(2) 応用編(研究事例紹介)
    • 気液共存線の決定
      • 相転移とは
      • 有限サイズスケーリング
    • 気泡生成現象
      • 界面張力とは
      • 気泡成長の理論
  6. 並列計算の基礎と高速化について
    • 計算機の仕組み
    • 高速化 (メモリ効率)
    • 並列化
    • SIMD化
  7. スパコンでできること、できないこと(どこかでセミナー形式?)
    • 大規模並列計算による多重気泡生成現象の解析(泡バブルの話)
    • スーパーコンピュータを使って難しいナンプレを作る(数独で炎上した話)

ダメだ、今日もタスクを積み残したぞ。ヤバい。

12月21日(火)

論文再投稿準備。なんかLaTeXファイルにAtomが関連付けられてるな。

また仕事でミス。最近多すぎる。完全に後手に回っている。

Zennのおかしなエラーバーの記事、そこそこ評判良かったみたいで安心した。やっぱりQiitaの記事の書き方よくなかったんだな。

講義。年内最後。

打ち合わせ。

PTEP投稿覚書。アカウントがなかったので作った。

あれ?Suggested Refereeを入れるところがなかったぞ。

12月20日(月)

名古屋大学スパコン、郵送出した。本買った。要旨見た。

12月19日(日)

しこたま寝た。最近ギアを上げ気味に走っているので疲れている。仕事時間は短いんだけど・・・。

12月18日(土)

要旨見た、

そんな時間はないのだが、どうしても気になったのでおかしなエラーバーのグラフの記事を書いた。以前Qiitaに書いた奴が、いまいち本質が伝わっていない気がして。

VimでPythonを書いてて、numpy.randomが無いと言われる。どうやらPylintの静的解析に問題があるようだ。~/.pylintrcに、

extension-pkg-whitelist = numpy

と書いて解決。

12月17日(金)

よく寝た。だいぶ体力を回復した。だがやるべきことが大量にある。

名大の奴、事務に出した。返ってきたら申請。

キーボード届いた。赤軸*2。こちらは静かかな?

浅野さんの論文、arXivへのリンクをウェブに公開。遅くなってしまった。

arXiv:2112.07139

良い仕事だと思うんだけど、査読者はどう見るかな。

エラーバーについての記事、絶対必用だな。Qiitaに書いた奴をリファインしてZennに書き直そう(←いつやるの?)。

要旨 * 2。

分子シミュレーション学会年会費払った。

学科計算機のお仕事。

プログラミング基礎同演習講義録画。あと一回。年内に録画しよう。

物性研スパコン共同利用報告会所外委員の仕事もしたぞ。

なんかメールいっぱい書いた・・・

要旨 * 3。

12月16日(木)

研究室ミーティング。

1on1 * 4。

書類*2。

学習指導お仕事。

要旨*2。

12月15日(水)

会議 * 2。その準備と後始末でもう18:40ですって。

Canvasで普段使わない機能を使ったら、機能について誤解していてミスってしまった。冒険すべきでなかった。

ホワイトボードの注文した。

名大スパコンの申請書書いた。経理責任者の問い合わせメール書いた。返事が来たらすぐ提出!

12月14日(火)

プログラミング基礎同演習。

しまった、富岳の期限が切れてしまった。

12月13日(月)

会議。

1on1 * 2。

学習指導のお仕事。組み合わせ最適化問題。

12月12日(日)

論文見た。

CPCからソースファイルもアップロードしろ、という連絡が。あれ?CPCのガイドラインでは、最初はPDFだけで良くて、ソースはFinal Publication Processだけで良い、みたいなこと書いてあったんだけどな。とりあえず「I apologize for my incomplete submission. I have also attached the LaTeX source file.」とか書いて再投稿。

12月11日(土)

プログラム基礎同演習のレポート採点。

学習指導の確認。まだいろいろわかってない。

とあるサイトで技術記事に見せかけた妄想を垂れ流し、最終的に運営にBANされた人がいて。この人、エゴサして絡んでくるから「名前を言ってはいけないあの人」みたいな扱いになってて。今日、久しぶりにその人の動向を見かけたんだけど、やっぱりすごいな。ネットで斜め読みした細切れの知識を自身の妄想で補完して作成した巨大な「新知識体系」を長文にして技術記事サイトに投稿し、ちゃんとした文献にもとづいた反論が来ると「権威主義」と切って落とす。エゴサで絡んでくるからSNSで噂話もできない。うーん。

うちの学生がこうならないようにがんばろう。

12月10日(金)

ミーティングと人に会う用事合わせて6件。

以上、よろしくお願いいたします。

12月09日(木)

研究室ミーティング。

LaTeXハンズオン+卒論ガイダンス。2つ続けたので長くなってしまった。春学期のハンズオンでLaTeXをやらなかったのが敗因。

Comput. Phys. Commun.に投稿。

  1. https://www.editorialmanager.com/COMPHYに行ってAuthor Login。
  2. 利用規約をacceptするをチェックして次へ
  3. New Submissionsから「Submit New Manuscript」
  4. プルダウンメニューから「Computational physics paper」を選ぶ。ORCIDを確認(すでに設定済みだった)してProceed
  5. Cover Letterと論文のPDFをアップロード。
  6. Editor: DP Landauがいない。近いっぽいJ. Adlerにする。
  7. Declaration of Interest Statementが必要。事前にここで入力+docをダウンロードしてPDFにしておく。
  8. Editor: DP Landauがいない。近いっぽいJ. Adlerにする。ここでSuggest Reviewersを入力する。3名いれた。
  9. キーワード「Finite-size scaling, Monte Carlo simulation, Binder parameter, improved estimator, Potts model, J1-J2 frustrated Ising model」にしてみた。 Institute for Solid State Physics, The University of Tokyo
  10. Funding Information
  11. publishing option: Subscriptionにしてproceed
  12. 最後、SubmissionをApproveしなければならないが、よくわからなかった。

12月08日(水)

論文一つ返したぞーーーー!

この論文、超絶塩漬け。手をつけたのが何年前だろ、と思って調べたら、2012年の4月頃に手をつけて、2012年9月に学会発表している。もうすぐ10年か・・・

プログラミング基礎同演習、11回の講義動画アップロードした。

pacman -Sy lib32-gcc-libs lib32-glibc

うーん、だめだ。gccでfunc(f(1),f(2),f(3))の結果をひっくり返せない。

12月07日(火)

プログラミング基礎同演習。

プログラミングというより物事が出来るようになる思考法

重要だと思ったので。結局腰を据えて真面目にやるしかない、という身も蓋もない話。

論文を触る時間が全く取れない。

12月06日(月)

第182回HPC研究発表会の座長。

ディスプレイ二台届いた。

12月05日(日)

およ、学科分けとかの日記がない。またpush忘れか・・・。プロンプトに表示してても忘れるんだからなぁ。

遅レポの採点全部済ませた。

論文一つチェックして返した。

昨日の疲れを引きずっている。

昼寝したら、久しぶりに金縛り一歩手前に。あと、夢見が非常に悪かった。疲れてる。

論文もういっぺん、とりあえずブランチだけ切った。学生さんの論文に手がつけられない。富岳のチューニングもどうするんだ?

なんか、Twitter面倒になってきたなぁ。単に「へー」と思ったことを書いただけなのに変な絡み方されるし、本を読んで「わからん」って書いたら「そんなのわからないの?」みたいなこと言われるし。またしばらく休んだ方がいいかなあ。

12月04日(土)

学科わけ説明会。物情はかなり頑張っていたのではないか。委員長のリーダーシップ(とセンス)が素晴らしい。

ただ、ずっと立ちっぱなし喋りっぱなしで疲れた。

int a;
                        int b = ++a + ++a + ++a;

とあったときに、bがいくつになるか。gccでは10、clangでは9になる。

なぜgccで10になるかは、コンパイラに聞いてみるとわかる。

int func(int a){
                          return ++a + ++a + ++a;
                        }

というコードを書いて、抽象構文木をダンプしてやる。

gcc-10 -c -fdump-tree-all-graph test.c 

Macなのでgcc-10と指定している。すると、コンパイラがこのコードをどのように解釈したかが表示される。

まず、test.c.004t.originalがこうなる。

int func(int a){
                          return ( ++a +  ++a) +  ++a;
                        }

先に、左の+をまとめて実行する。これをtmp1でうけよう。

int a = 1
                        int tmp1 = ++a +  ++a;
                        return tmp1 + ++a;

tmp1 + ++atmp2で受けよう。

int a = 1
                        int tmp1 = ++a +  ++a;
                        int tmp2 = tmp1 + ++1;
                        return tmp2;

さて、前置インクリメントなので、++a + ++aの+の実行前にインクリメントを実施する。

// int tmp1 = ++a +  ++a;
                        a = a + 1;
                        a = a + 1;
                        int tmp1 = a + a;
                        int tmp2 = tmp1 + ++a;
                        return tmp2;

次に、tmp1 + ++aも同様に、先にインクリメントを実施する必要がある。

// int tmp1 = ++a +  ++a;
                        a = a + 1;
                        a = a + 1;
                        //int tmp2 = tmp1 + ++a;
                        a = a + 1;
                        int tmp2 = tmp1 + a;
                        return tmp2;

最終的に、関数はこうなった。

int func(int a){
                          a = a + 1;
                          a = a + 1;
                          int tmp1 = a + a;
                          a = a + 1;
                          int tmp2 = tmp1 + a;
                          return tmp2;  
                        }

というわけで、a=1の時には ++a + ++a + ++a = 3 + 3 + 4 = 10になる。

clangの場合は9になる。どう解釈したかは、中間コードを見るとわかる。

define i32 @func(i32 %0) #0 {
                          %2 = %0  // %2 = 1
                          %3 = %2  // %3 = 1
                          %4 = %3 + 1 // %4 = 2
                          %2 = %4     // %2 = 2
                          %5 = %2     // %5 = 2
                          %6 = %5 + 1 // %6 = 3
                          %2 = %6     // %2 = 3
                          %7 = %4 + %6 // %7 = 2 + 3 = 5
                          %8 = %2      // %8 = 3
                          %9 = %8 + 1  // %9 = 4
                          %2 = %9
                          %10 = %7 + %9 // %10 = 5 + 4
                          return %10
                        }

つまり、clangの場合は++a + ++a + ++a = 2 + 3 + 4 = 9となる。

そもそも++a + ++aが、gccは6、clangは5になる。

gccは、

a = a + 1
                        a = a + 1
                        return a + a;

と解釈する。clangは、

%2 = %0 // %2 = 1
                        %3 = %2 // %3 = 1
                        %4 = %3 + 1 // %4 = 2
                        %2 = %4 // %2 = 2
                        %5 = %2 // %5 = 2
                        %6 = %5 + 1 // %6 = 3
                        %2 = %6
                        %7 = %4 + %6 // 2 + 3 = 5

つまり、

tmp1 = a + 1
                        a = tmp1
                        tmp2 = a + 1
                        a = tmp2
                        return tmp1 + tmp2;

つまり、clangは、++aを、tmp = a + 1;a = tmpという形に受ける。

int b = ++a + ++a;

は、

tmp1 = a + 1;
                        a = tmp1;
                        tmp2 = a + 1;
                        a = tmp2;
                        int b = tmp1 + tmp2;

とバラす。gccは、

a = a + 1
                        a = a + 1
                        int b = a + a;

とするので6になる。なるほど。

まとめると、++a + ++aとあった場合、GCCは、+の両側のインクリメント演算子を解決してからしてから加算を実行するが、clangは++atmp = a + 1;a = tmpにバラす。

理解できたかどうか、もう一度++a + ++a + ++aでやってみよう。

GCCの場合、まず、カッコをつける。

return (++a + ++a) + ++a;

カッコをtmp1で受ける。

int tmp1 = ++a + ++a;
                        return tmp1 + ++a;

tmp1を評価する際、まずインクリメント演算子を解決する。

a = a + 1;
                        a = a + 1;
                        int tmp1 = a + a;
                        return tmp1 + ++a;

tmp1 + ++aのインクリメント演算子を解決する。

a = a + 1;
                        a = a + 1;
                        int tmp1 = a + a;
                        a = a + 1:
                        return tmp1 + a;

以上から3+3+4=10になる。

clangの場合。

++atmp = a + 1;a = tmp;に変換。

int tmp1 = a + 1;
                        a = tmp1;
                        return tmp1 + ++a + ++a;

次の++aも同様に変換。

int tmp1 = a + 1;
                        a = tmp1;
                        int tmp2 = a + 1;
                        a = tmp2;
                        return tmp1 + tmp2 + ++a;

また変換。

int tmp1 = a + 1;
                        a = tmp1;
                        int tmp2 = a + 1;
                        a = tmp2;
                        int tmp3 = a + 1;
                        a = tmp3;
                        return tmp1 + tmp2 + tmp3;

以上から2+3+4 = 9になる。うん、完全に理解した。

12月03日(金)

プログラミング基礎同演習のレポート採点

学科わけの準備。

12月02日(木)

あれ?12月になったってことは、この日記を丸一年つけたということか。気づかずに12月の日記を11月につけてた。

研究室ミーティング。phi4理論(スカラー場理論)の簡単な解説を探したんだけど、いまいち適当なのが無いなぁ。2つの基底状態を持つ系でキンク解を持つところまで簡単に説明した記事を書きたい(が、まったく時間がない)。

CDドライブ。AppleのSuperDriveをWindowsで使うには、AppleのサポートからBootCampをダウンロードして展開。中にあるBootCamp > Drivers > Apple > AppleODDInstaller64.exeを実行してインストール。これで使えるようになる。CDは、「ハードウェアの安全な取り出し」をするとeject可能。

動作確認のために古いCD-ROMを読み込んで見た。昔CDを買ってmp3に落とした奴。宇多田ヒカル、Noirのサントラ、Sash!、Evanescence・・・すべて懐かしい。Windows標準のプレイヤーで古すぎて読めなかったのでAIMPで開いた。

卒論の時期なので、LaTeXのセットアップについて書かないといけない。情報が古いからなんとかしないと。

.latexmkrcをホームディレクトリに置かせるか、各プロジェクトに置かせるか迷うな。とりあえずはホームか。

冬季安全点検送った。

LaTeXのインストール確認と、古い記述の修正を行った。卒論執筆ハンズオンの準備もOK。

第182回ハイパフォーマンスコンピューティング研究発表会、申し込んでなかったので申し込んだ。情報処理学会の年会費も払った。

12月01日(水)

D論の説明。

年末調整の原本提出。枚数が多い場合は、簡単年調の台紙を使うより、A4を縦に使って、複数枚を一度に貼り付けた方が良いそうだ。来年はそうしよう。A4を縦にしたときに右上に赤字で名前と職員番号を印刷しておくこと。

面接。

柔道部ワークフローの提出。いろいろ慣れてなくて手間取った。練習が再開できる感じなので良かった。

キーボード注文したぞ。青軸派ですか。

物性研スパコンの来年度前期の申請した。

論文が共著者から返ってきた。直さないと。