本当は怖いHPC

HPC屋の趣味&実益ブログ

ブログ新設作業 (0)

ブログをどこかに新設して移行することにしました. 理由はいくつかありますが, Web開発から離れて久しい(1●年とかじゃないかな・・・)最近のWeb開発のトレンド(特に最新のEcmaScript言語仕様,GraphQL,WebGL,Webassemblyなど)にすっかり疎くなってし…

流体力学の勉強(3) :「流体の力学入門」読書メモ(2)

流体力学の勉強の続き.演習で学ぶ「流体の力学」入門 第2版 という本を勉強中.いろいろ飛ばして12章から. 連続の方程式,もしくは連続の式.EMANの物理学での該当部分は オイラーの連続の式 - EMANの流体力学 . 「流体の力学入門」では, divとかの記号…

流体力学の勉強(2) :「流体の力学入門」読書メモ(1)

流体力学の勉強の続き.演習で学ぶ「流体の力学」入門 第2版 という本を勉強中.いろいろ飛ばして12章から. この章では,流体の基礎方程式と,そのためのいくつかの概念の導入(物質微分,オイラーの方法,ラグランジュの方法など)がされています. 冒頭で…

流体力学の勉強(1)

ゆえあって流体力学の勉強をしています. 大学では粒子法の分散プログラム作成の自動化などをやっていたりしたのですが,肝心のシミュレーションの具体的な中身についてはわからないままだという気がかりがずっとあったので,思い切って勉強することにしまし…

x86-64のCalling Convention

x86-64(AMD64)のCalling Conventionについてメモ.ネット上に資料はたくさんありますが,断片的だったり,一覧性が低かったり,互いに矛盾しているように見えたりしたので自分でまとめることにしました. (と言っておきながら,Agner Fogさんの資料*1のp.…

UCX1.8リリース

UCX1.8がリリースされました。 全体的には堅実で地味なリリースですが、個人的に興味あるものをいくつか取り上げるとすると ROCm環境サポートの充実 CUDA向けのさらなる最適化 RDMA memory registration でしょうか。それぞれを簡単に紹介します: ROCmは、A…

DockerfileのARGとFROMの順序と変数のスコープ

Dockerfileの中のFROMとARGコマンドの位置関係について、ちょっとハマることがあったのでまとめておきます。 このあたりは、英語でも日本語でも直接的にはっきり書いてあるドキュメントがほとんどないので調べるのに時間がかかりました。 なお、実験は MacOS…

C++ conceptsを試してみた (1)

C++20 から導入されるConceptsを試してみました。 cpp_akira さんがConceptの解説を書かれている[1]ので、自分なりに咀嚼して試してみます。 ビルド方法 現時点(2019年10月)で、Conceptを利用したプログラムをビルドするには、g++9以降が必要です。gccとcl…

目次のないPDFに目次を追加する

目的と概要 自炊したPDFには目次が含まれないため、読むときに不便です。この点、Kindleの書籍などとは雲泥の差があります。そこで、自分で目次を付与するスクリプトを作成しました。MacもしくはLinuxのコマンドラインツールgsを使い、そのツールへの入力をP…

「朝型人間が成功する」のは本当なのか?

Disclaimer:この記事には、夜型人間による、朝型生活を善とする社会規範への反抗と怨嗟が多分に含まれています。 勤務先の社内では、読書会というイベントが行われています。ここで、「What the Most Successful People Do Before Breakfast: A Short Guide…

AWSのElastic Fabric Adapter

AWS re:Invent 2018において、Amazonが開発する新しいネットワークアダプタ Elastic Fabric Adapter (EFA) が発表されたようです。 HPC的なまともなアプリをスケールさせようと思うと、どうしてもネットワークがネックになります。普通のスパコンでは、Infin…

最近読んだもの 2019/01/30

不定期に、最近読んだ論文、本、Webページをメモしていきます。 論文:Taxonomist: Application Detection through Rich Monitoring Data スパコン上で流れいてるジョブを(管理者側)から判別できると良いことがある。次世代スパコンの設計に役立つ、不正な…

UCXを試す日記(10):バグ報告をした

自分でプログラムを書いていてハマったのでTwitterに(日本語で)グチグチ書いていたところ、中の人(たぶんORNL)の人から「バグ報告しなよ」と背中を押してもらいました。 UCXで簡単なsend/recvができるコード書いていろいろ試しているけど、ib/rc はちゃ…

UCXを試す日記(9):allreduceを実装する上での予備調査

とりあえず、UCXで実用(?)コードを書いてみようということで、Allreduceを書いてみようと思っています。Allreduceは、ディープラーニングにおいては重要な通信パターンで、業務においても研究したことがあるので経験があります(これについては、近々会社…

Travis CI上で、g++とclang++の複数バージョンでビルドする

C++でライブラリを作っていて、それをTravisCI上でテストします。そのとき、GCCとClangの両方でテストしたっかったのですが、いろいろ面倒だったのでメモです。 基本的には、Travis CIのmatrixという機能を使って様々なバージョンのコンパイラを使ったテスト…

MPI Communicatorのattributesを利用して、MPI_Finalize()時にコールバック関数を起動する

mpi

MPIのややマニアックな機能の1つに、attriburtesがあります。これは、コミュニケータに、整数をキーとした辞書のようなデータ構造で値(属性)を登録できるというものです。関係する関数としては、 MPI_Comm_create_keyval、 MPI_Comm_set_attrなどがありま…

Pyhtonでクロージャを使おうとして、Pythonの変数スコープにハマった話

クロージャは便利です。 以下のようなコードを書いて、期待と動作が違ったので数時間を溶かしてしまいました。詳しい人から見れば常識なのでしょうが… import threading import itertools import time A = [1,2,3] B = ['a', 'b', 'c'] def main(): for prod…

UCXを試す日記(8)

UCX

(追記:完全にグダグダなただの日記なので、タイトルに「日記」と付け足しました) ここまで、UCXのディストリビューションに含まれている uct_hello_world.c を自作C++ラッパーに移植するという目標で勉強をしてきたのですが、C++ラッパーの実装の方針を大…

MPIでRank順に出力する

小ネタ。 MPIのプログラムから printf などを使ってデバッグ出力をする場合、全プロセスから一斉に同じ出力をしたときの順序は保証されていません。 例えば、下のようなプログラムを考えます。 #include <stdio.h> #include <mpi.h> int main(int argc, char **argv) { int r</mpi.h></stdio.h>…

ChainerMNをMPIで実行中に、例外でプロセスが死んでも実行が止まらない問題

通常、MPIプログラムは、実行中のどれかのrankがエラー等で以上終了した場合(あるいはMPI_Finalizeを呼び出さずに終了した場合)は全プロセスが強制終了されることが期待されます。 が、ChainerMNを含む mpi4py を用いたプログラムを実行している場合、Pyth…

Time to remove the openib btl ?

mpi

Open MPI devel メーリングリストで、「openibコンポーネントを削除する時が来たのでは?」という議論が始まっています。 Open MPIでInfinibandを使う場合、ながらく openibib という BTL コンポーネントが使われてきました。 BTL というのは、Byte Transfer…

UCXを試す(7)

UCX

勉強がてら作成中の UCXのC++ラッパーをGithubに上げました。たぶんライブラリ関数の網羅率は5%くらいだしUCXの使い方をほとんどわかっていないので、あえてREADMEも何も書いていません。少しずつ機能を試して実装しながらライブラリとしての形を整えてい…

UCXを試す(6)

UCX

https://gist.github.com/keisukefukuda/69e93074f6fc46a55267efeaca2ca093 AM_SHORT というタイプのメッセージを、IBで送信する簡易プログラムがやっと動きました。他には、bcopy と zcopy があるので、次はこれを動かします。 AMというのはActive message…

UCXを試す(5.5)

UCX

メモ書き。 うーん、examples/hello_world.c を参考に、mlx4_0:1デバイスで最小限の am_short (short active message)を送信するプログラムを書いているのですが、これが動かない… hello_world は同じ条件で動作しているので、自分のプログラムの何かがおか…

UCXを試す(5)

UCX

←前回 uct_iface_attr_t の、capabilityに関する値を見ていきます。 ソース: https://gist.github.com/keisukefukuda/153ec198cf234f0f5b3a43a044523e3a 出力: Using rc/mlx4_0:1 ib/mlx4_0 component name: ib max alloc: 18446744073709551615 (17179869…

UCXを試す(4)

UCX

←前回 次回→ 引き続き、 uct_hello_world.c をC++に写経しながら、次はインターフェースのopen(uct_iface_open)と、属性取得(uct_iface_attr_t)をしてみます。 https://gist.github.com/keisukefukuda/63cdd3516bec21437be973b845b2d476 (前回と同じ部分…

UCXを試すメモ(3)

UCX

uct_md_query() 関数を使って、Memory DomainのAttributesを取ってみました。 https://gist.github.com/keisukefukuda/cf55bf8aaf9f343f529c25ff46487ce0 Resources: self component name: self max alloc: 0 (0[GiB]) max reg: 18446744073709551615 (17179…

UCXを試すメモ(2)

UCX

test/examples/uct_hello_world.c を参考にして、まずは Memory Domain, Device, Transport Layer の一覧を取得するコードを書いてみます。 https://gist.github.com/keisukefukuda/bfa28464b10d36ae2321b22db73f7b38 通信のためのデバイス/ハードウェアは…

UCXを試すメモ(1)

UCX

最近、ネットワークライブラリのUCXを試しています。 GitHub - openucx/ucx: Unified Communication X (mailing list - https://elist.ornl.gov/mailman/listinfo/ucx-group): ドキュメントを生成 まずはドキュメントをビルドするために、手元のMacにリポジ…

HPC向け高速通信ネットワークのAPI/ライブラリのメモ。

HPC

メモ (この文章では、「ライブラリ」と「フレームワーク」は特に区別していません。) スパコンを始めとするHPC環境では、インターコネクトとしてInfinibandやOmniPath、50G/100G Ethernetなどの高速ネットワークが利用されています。多くの場合、これらの…

【広告】