「高性能計算」研究紹介

高性能計算研究開発用のサーバマシン(旧タイプ)

研究の概要

 現代のコンピュータは,スマートフォンからスーパーコンピュータまで,複数の処理を同時に実行できる「並列処理」の機能を備えています。コンピュータの頭脳に当たるCPUは,複数の命令を一括して実行できるAVX2やSVEをはじめとするSIMD(Single Instruction, Multiple Data)命令が利用できるコアを複数持つマルチコアアーキテクチャが普通ですし,もっと多数のコア(メニーコア)を持つGPUはAI・深層学習では必須のハードウェアです。我々の研究室では,特に多数の桁数の計算を必要とする条件の悪い問題に対応できるよう,現代のコンピュータの並列化特性を生かした「多倍長精度数値計算」の高速化の研究に力を入れるとともに,深層学習の応用方法や,学習成果の再現性を担保するための研究を進めつつあります。

研究成果の社会での実装、活用シーン

 基本,全ての研究結果は,使用されたプログラムのソースコードをオープンにすることで社会に還元しており(WebGitHub),桁数を増やして計算したい開発現場で利用されているようです。Webで公開している基本演算部分のマニュアルの翻訳などは毎日頻繁に参照されています。あまり人目に付かないところでは,スーパーコンピュータ向けの多倍長精度計算用MPIライブラリ(MPIBNCpack)は諸外国でも使用されることがあります。

高校生へのメッセージ

 すぐには理解できないことを楽しみましょう。日常生活とは異なる数学理論や概念を実感として理解するには時間がかかります。まずは「分からない」という感覚から出発し,友達,先輩,教員との議論や,プログラミングによる実装を通じて,「分からないことが分かるようになった」経験を積み重ねていって下さい。大学生活はそのための重要な「分かるためのプロセス」を体験する重要な時間になります。紋切り型のSNSとは真逆の,少しずつ理解する学問の面白さを味わって下さい。

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

幸谷智紀

第一部: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. 最終課題:ベンチマークテストツールの作成

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もどきのアプリも,ブラウザの機能を使うだけでできちゃう時代ってのを象徴する代物ですからねぇ。

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

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

オンライン卒業式挨拶

[注釈] コロナウイルス騒動のあおりで中止となった卒業式・手交式の代わりにSkype for Business上で開催されたのが「情報学部オンライン卒業式」です。詳細は本学blog記事をご覧下さい。本件はNHKローカルニュースや静岡新聞で扱って頂きました。

2019年度 静岡理工科大学 情報学部 オンライン卒業式
情報学部長 幸谷 智紀
2020年3月14日(土)

 情報学部4年生の皆様,ご卒業おめでとうございます。本来のリアル卒業式では本学の体育館で2時間ほど,起立したり座ったりしながら耐え忍ぶ必要があるわけですが,本日はオンラインですので皆さん気楽な場所でお聞き頂いていることと思います。一生に一度のハレの行事がオンラインで行われるという異常事態ではありますが,せいぜい楽しんでいただければと思います。まず,このような場をご準備いただいた情報学部の諸先生方には情報学部長として感謝申し上げます。

 さて,本来はここから当方の50年に渡る人生経験に基づく蘊蓄を10分程度は語るべきところ,ギガの持ちが悪い人もいるでしょうから,下記のスライドに基づいて,本日このオンライン卒業式ができるようになったインターネットの歴史を振り返り,最後に一言だけ申し上げることに致します。

 本学の4年間(+αの人もいるでしょうが)の経験が,皆様の人生にどのように役立つかは分かりませんが,無為な時間も勉学の時間も等しく「楽しかった」と思える日が遠からず訪れます。年を取れば分かります。毎年皆様をお迎えする「ホームカミングデー」を大学祭期間中に設けていますので,是非,「楽しかった」日々を語るべく,訪れてみて下さい。

 ご卒業おめでとうございます。今後は大学院生として社会人として頑張って下さい。

以上

「連立一次方程式をガウスの消去法で解けるアプリ」コメント

 今日の「応用線形代数」でコメントを求められたので,ちょっと触ってみました。URLは公開していいのか分かりませんでしたので,ここでは紹介しません。スクショも同様。

 一言で言うと,1~5次元までの連立一次方程式をJavaScriptで解くWebアプリです。拡大係数行列を作って行の基本変形だけで最終結果までたどり着き,係数行列と拡大係数行列のランクをそれぞれ求め,一意解が得られない場合でも,無数の解が存在するのか,解が存在しないのかを示してくれます。「線形代数/演習」で解説した内容をしっかり把握されているようです。

 欲を言うとキリがないですが,表示についてはもう少し改善の余地があるかなと。MathJax使って行列やベクトルをきれいに表示できると教材としても使えそうですね。

 良くできていると思います。

 

CakePHPを学ぶ(1)

 本研究室ではもっぱらスクラッチからPHPとMySQLを使ってWebアプリを作成してきましたが,ボチボチMVC(Model-View-Control)思想に基づくPHPフレームワークにも取り組む必要が出てきた感じています。スクラッチビルドも悪くないですが,正直同じ教材を毎年使うのも飽きたので更新したいという事情も手伝っています。

 ということで昨年12月からCakePHPで遊んでみましたが,Tutorialは手っ取り早く勉強できてありがたいものの,作りたいWebアプリを自在に組み立てるのは思いのほか難儀で,Bakeが作った雛形から脱していない代物が多いのも頷けます。年寄なので,Visual Basicが流行った頃を思い出しますね。結局,作り込むためには地道なプログラミングをしないといかんと。

 ということで本日反省がてら作ったPowerPoint資料を上げておきます。

 ということで,

  1. ユーザ認証機能のカスタマイズ(任意のテーブル名でユーザ管理できるように)
  2. 全体的なデザインの変更とカスタマイズ
  3. Webサーバへのアップロード方法の模索(ユーザ単位のWebアプリとして外部公開したい)
  4. 第5章で制作する機能を全部盛り込んだサイトを構築

というところまで,今年度内に何とかしたいと考えています。ここに書いたメモを元に教材作成までできれば御の字ですね。