高性能計算プログラミング

幸谷智紀

第一部:Pythonによる方程式求解プログラミング

「Python数値計算プログラミング」サポートページ

  1. Pythonプログラミングの基礎
  2. NumPyとmatplotlib
  3. 代数方程式を解いてみる(1) 2次方程式まで
  4. 代数方程式を解いてみる(2) n次方程式は解けるか?
  5. 非線形方程式を解いてみる(1) Newton法とSciPy.opt
  6. 連立一次方程式を解いてみる(1) 密行列に対する直接法
  7. 非線形方程式を解いてみる(2) Jacobi行列とNewton法
  8. 常微分方程式を解いてみる(1) 初期値問題
  9. 常微分方程式を解いてみる(2) 境界値問題
  10. 連立一次方程式を解いてみる(2) 疎行列に対する反復法
  11. 偏微分方程式を解いてみる(1) 熱方程式
  12. 偏微分方程式を解いてみる(2) Poisson方程式
  13. 最終課題:ベンチマークテストと高性能化

第二部:C/C++によるコンソール版高性能計算プログラミング

「LAPACK/BLASプログラミング」サポートページ
「多倍長精度数値計算」サポートページ

  1. 高性能計算とは? コンピュータにおける「演算」
  2. 浮動小数点演算:低精度から高精度まで
  3. C/C++プログラミング基礎と高速化(並列化)手法
  4. LAPACK/BLAS演習(1) BLAS1, BLAS2, BLAS3
  5. べき乗法とOpenMPによる並列化
  6. LAPACK/BLAS演習(2) 連立一次方程式
  7. 逆べき乗法
  8. LAPACK/BLAS演習(3) 標準固有値問題
  9. 多倍長精度演算: QDとmpreal
  10. MPLAPACK/MPBLAS演習:べき乗法,逆べき乗法の多倍長精度実装
  11. 混合精度反復改良法の実装
  12. BNCmatmulと混合精度反復改良法の高性能化
  13. 最終課題:行列指数関数exp(A)の実装

第三部:Web上でのWASM+Node.js高性能計算プログラミング  

  1. Web上でのHPC:サーバサイド(Flask, PHP + C++)からクライアントサイド(WASM)へ
  2. Webプログラミングの基礎(1): HTML, CSS, JavaScript
  3. Webプログラミングの基礎(2): DOMとJavaScript
  4. Node.jsとexpressフレームワーク
  5. SQLiteとNode.js
  6. WASM演習(1) WASMとJavaScript
  7. WASM演習(2) Emscripten開発環境
  8. LAPACK/BLAS on Web演習(1): べき乗法と逆べき乗法
  9. LAPACK/BLAS on Web演習(2): exp(A)の実装
  10. GMP, MPFR on Web演習
  11. BNCmatmul on Web演習(1) べき乗法と逆べき乗法
  12. BNCmatmul on Web演習(2) 混合精度反復改良法
  13. 最終課題:ベンチマークテストツールの作成

トップページのリニューアル

 このページの更新頻度が減ったこともあり,常用のリンクをまとめたページをトップに据えることとして,簡素なトップページに変更しました。

 派手な背景にするとか,細かい改良は追々行うようにして,更新がないことがバレづらいようにはなったかと思います。

Node.jsテキスト公開

 9月にもご紹介しましたが,ようやく全体の手直しが完了しましたので

https://cs-tklab.na-inet.jp/nodejs/

にてURLを公開します。

2022-12-27現在のNode.jsテキスト

 コンピュータシステム実践演習2のゼミで使用するのは第5章までですが,第6章のBootstrap 5対応,第7章のFullCalender 6対応に手間取り,年の瀬にようやく全体の手直しが完了しました。ゼミで使用して見つかった不具合等の直しはこれからになります。

研究室ポスター新バージョン完成

 11/8(火)「地域創生フォーラム」出展用に,わが高性能計算研究室のポスターを作成しました。実物はB1サイズで,526実験室右側に展示済みです。Microsoft Publisherで作成しました。一枚では寂しいのでもう一枚,簡単なTensorFlowの計算鋭敏性についてのポスターを同サイズで作成予定です。さてどうなるやら。

Node.jsのインストール(Windows 11)

 Webプログラミングの環境として,近年急速に実績を上げつつあるNode.jsをインストールする方法を期しておきます。さほど難しくはありませんが,実際に遭遇した問題解決のためのチマチマしたTipsも書いておきます。

1.Node.jsサイト(日本語版)にアクセスします。基本,本研究室では「推奨版」をインストールして使いますので,Windows (x64)をダウンロードします。

Node.jsサイトの画面:2022年9月16日(金)現在

2.ダウンロードした”node・・・.msi”をダブルクリックしてインストールを開始します。

3.インストール完了後,”Windowsターミナル”もしくは”PowerShell”を開き,コマンドプロンプトから”node –version”と打ち込んで,Node.jsの実行とバージョン番号を確認します。

Windows PowerShell画面。Version 16.16.0がインストールされていることが分かる

4.必要に応じて”npm”コマンドを使ってパッケージをインストールします。開発用として”nodemon”をインストールしてみます。スクリプトの実行が許可されていない場合は,「管理者」としてPowerShellを開き”Set-ExecutionPolicy Unrestricted”として許可して下さい。

5. 適当なフォルダで下記の内容を”hellow.js”として作成し,PowerShellの画面に「Hellow, Node.js!」が表示されることを確認して下さい。

JavaScriptベースのWebプログラミング教材

 ここんとこ,急速にWebプログラミングの主役が,伝統的なサーバサイドの言語よりもJavaScriptベースのnode.jsに移ってきた感があります。Java(Servlet), PHP, C#等々,未だこれら既存のサーバサイド言語で作られたアプリケーションは現役ですから,まだまだ使用されていくのは間違いありませんが,面白いこと・新しいことをやろうとすると,JavaScriptの情報が多数引掛かかるようになってきていることは間違いありません。
 私みたいな年寄だと,JavaScriptというとどうしてもクライアントサイド,要はブラウザで動く,インタラクティブな動作のサポートをするコードを書くものと考えてしまいます。しかし,HTMLがDOMの塊として捉える時代ににあり,ネイティブアプリと同様の,自在に動的なWebアプリが作れる時代で,React, Vue, Angularといったフロントエンドのフレームワークが花盛りであり,それらをベースとした,node.jsと強調できるバックエンドのフレームワークも実用になっている昨今,そういう思想は相当古いと言わざるを得ません。JITに基づく高速なV8がブラウザだけでなく,サーバサイドでも利用され,パフォーマンスも著しく改善されたことが普及した一番の理由でしょう。

 ということで,伝統的に使ってきたWebプログラミングの教材も,そろそろ全面的にJavaScriptベースのものが必要だなという認識に至りました。とはいえ,文法やオブジェクトの解説だけの無味乾燥なものを作っても仕方ないので,XAMPP + node.jsの環境をWindows上に作って

  • MySQL + node.jsによるCRUDアプリ
  • WebRTC

なんかはどうかなと。CRUDは定番なのでいいとして,問題はWebRTC。全部やると死にそうなので,手っ取り早く,Googleの教材をお手本に勉強がてらサンプルコードの一部で遊んで見る程度のところで留める予定です。簡単なZoomもどきのアプリも,ブラウザの機能を使うだけでできちゃう時代ってのを象徴する代物ですからねぇ。

 にしても,分かりやすい教材が増えたのはありがたい限りです。短い記事はともかく,重量級の

なんてのは常に参照しておりまする。

サーバ更新(2)

 昨日(8/4(木)),Prinamy DNS(メインDNS)をさくらインターネットのVPSに移設完了しました。JPRSへの申請だけでなく,DNSを所管するさくらインターネットの手続きの方が手間取ってしまい,サポート先と何度もメールのやり取りしてようやく更新できたようです。というわけで(6)-(7)の手続きは終わりましたが・・・

(6) cs-tklab3.na-inet.jpにDNS設定を行い,メインDNSをminerva.na-inet.jpから移設。「さくらのドメイン」でメインDNSの移設を申請し完了を待つ。
(7) minerva.na-inet.jpの全てのWebコンテンツをcs-tklab3.na-inet.jpへ移設し,”na-inet.jp”, “minerva.na-inet.jp”のエイリアス設定を変更。

Primary DNSのIPアドレス変更というものは予想外にダメージがでかいもので,世界中に分散したDNS treeの更新が完了するまでに相当の時間を必要とします。実際,昨日の更新から15時間経過した現在でも,大学のDNSは更新した情報を取り込んでおらず,相変わらず旧minerva.na-inet.jpの方を引いてしまいます。
 ということで,昨日遣り掛けだったCertbot(Let’s Encrypt!)の更新作業は,リトライを繰り返した挙句に断念。回数宣言があるので,むやみに繰り返してもかえってややこしいことになる上に,リアルにFQDNからIPアドレスを引いてこれないとエラーになるため,一部でもDNS tree内で齟齬があると認証が受け付けられない可能性が出てきます。これは夏休み中の課題ですね。

 最後の(8)は今月中には何とかなるとは思いますが,当分イライラする日々が続きそうです。

(8) (7)の完了確認後,minerva.na-inet.jpの解約処理。みかかと完全縁切り。