マガジンのカバー画像

超高性能プログラミング技術のメモ

15
ハイパフォーマンスコンピューティング(HPC)で必要とされる高速なプログラムを書くための技術です。普通のプログラマーには、あまり必要ではありません。
運営しているクリエイター

2020年5月の記事一覧

【実装例】内積計算プログラムの高速化

【実装例】内積計算プログラムの高速化

超高性能プログラミング技術のメモ(13)
技術を忘れないように、書き残しています。

前回、内積計算を例に演算とメモリ転送のオーバーラップを説明しました。今回は、内積計算をちゃんと実装して、速度の比較をしてみました。

ベースコードの作成今回は、次のようなプログラムをチューニングしていくことにします。

double ddot(size_t n, const double* x, const do

もっとみる
演算とメモリ転送のオーバーラップ

演算とメモリ転送のオーバーラップ

超高性能プログラミング技術のメモ(12)
技術を忘れないようにメモしています。

今回から、浮動小数点演算の話に入りたいと思います。高性能化のポイントは、「レジスタスピルやパイプラインハザードを回避しながら、ロード命令のメモリ転送中に浮動小数点演算を同時実行させてしまうか」になります。

命令数のカウントここでは、複数のベクトルの内積を計算する擬似コードを考えてみましょう。

double* in

もっとみる
線形代数ライブラリ

線形代数ライブラリ

超高性能プログラミング技術のメモ(11)

数値計算を簡単に高速化できる線形代数ライブラリを紹介しておきます。

線形代数ライブラリとは?線形代数ライブラリとは、ベクトルと行列のかけ算や足し算を担うBLASと、連立線型方程式や固有値方程式、特異値分解の解法を担うLAPACKの2つをパッケージングしたライブラリです。昔は、これら以外にも多くのライブラリが存在しましたが、現在ではBLASとLAPACK

もっとみる
メモリアクセスパターン

メモリアクセスパターン

超高性能プログラミング技術のメモ(10)
技術を忘れないようにノートに書き残しています。

かなり時間が経ってしまいましたが、案外読まれているようなので、また少しずつ追加していこうと思います。プログラミング初心者向けではないので、読者はいないだろうと思っていました。

今回は、メモリアクセスパターンの違いによる性能の違いについて簡単に書きたいと思います。

メモリアクセス速度パソコンを使っていて処

もっとみる