扇山 雨天中止 車庫に閉じ込められる

日時 1979年11月4日 日程 日帰り 人数 2名 天候 雨天 交通費 不明 ほか 昼食 ¥300(弁当代)

丹沢 鍋割山稜

日時 1979年12月2日 日程 日帰り 人数 2名 天候 快晴 費用 約¥1,970 明細 交通費1020、昼食400、夕食550

尾瀬 至仏山

日時 1979年10月5~7日 日程 2泊 人数 2名 天候 曇り、曇り、雨 費用 約¥15,530 明細 交通費8,120 小屋3,800、土産 2,400、他

丹沢 大倉尾根から鍋割山稜

日時 1980年1月20 日程 日帰り 人数 単独 天候 快晴 費用 約¥820 明細 交通費のみ

丹沢主脈縦走

日時 1980年5月11 日程 日帰り 人数 2名 天候 快晴 費用 約¥2,000 明細 旅費1,420 あと飲食他

赤岳 初めての八ヶ岳

日時 1980年6月14~15日 日程 1泊 人数 2名 天候 晴れ+晴れ 費用 約¥14,090 明細 旅費6,780 小屋4,000、他

裏三ツ峠から木無山と天上山

日時 1980年11月1日 日程 日帰り 人数 2名 天候 快々晴 交通費 約¥3,590 ほか なし

扇山

日時 1980年11月16日 日程 日帰り 人数 2名 天候 曇りのち晴れのち曇り 交通費 約¥2,300 ほか なし

行列の積

FMA命令を使用し、行列の積を求めるプログラムを紹介します。行列a (n × m) と b (m × p) の積 c は(n × p) の行列です。分かりやすいように、行列を以降に示します。 これらの積をc に求めるには、 を行います。行列c を以降に示します。

性能評価:FMA

C++言語で記述したプログラムと、アセンブリ言語で記述した関数を利用したときの性能差を検証してみましょう。

FMA

AVX-512はFMA(fused multiply-add、 融合積和)命令を実装しています。FMA命令を数式にしたものを以下に示します。 a × b + k 式が表すように、積と和が合体した演算です。性能が向上すだけでなく、丸め(浮動小数点数で正確に表せない値を近い値にする)が…

任意長の配列処理

以前紹介した、一連の「一次元配列同士の演算」などを任意長を扱えるように拡張します。 arques.hatenablog.com 機能は、配列同士の各要素を演算し、別の配列へ格納するするプログラムです。処理概要を図で示します。

性能評価:特定値のインデックス抽出

C++言語で記述したプログラムと、アセンブリ言語で記述した関数を利用したときの性能差を検証してみましょう。

特定値のインデックス抽出

一次元配列の各要素を検査し、与えられた値と一致する要素のインデックスを抽出します。戻り値は一次元配列に存在する特定値の数です。

性能評価:抽出・インデックス

C++言語で記述したプログラムと、アセンブリ言語で記述した関数を利用したときの性能差を検証してみましょう。

抽出・インデックス

一次元配列の各要素を検査し、条件を満足していたら、その要素を抽出します。当時に抽出した要素の位置を得ます。ここでは任意の値以上の要素を抽出、任意の値以下の要素を抽出、任意範囲の要素を抽出するとともに、そのインデックスを得る例を示します。前…

性能評価:抽出

C++言語で記述したプログラムと、アセンブリ言語で記述した関数を利用したときの性能差を検証してみましょう。

抽出

一次元配列の各要素を検査し、条件を満足していたら、その要素を抽出します。ここでは任意の値以上の要素を抽出する、任意の値以下の要素を抽出する、任意範囲の要素を抽出する例を示します。以降に処理概要を図で示します。

性能評価:総和

一次元配列の総和を求めるプログラムを応用して、C++言語で記述したプログラムと、アセンブリ言語で記述した関数を利用したときの性能差を検証してみましょう。

総和

一次元配列の総和を求めるプログラムを紹介します。以降に処理の概要図を示します。

性能評価:値の検索

一次元配列から特定の値を探すプログラムを応用して、C++言語で記述したプログラムと、アセンブリ言語で記述した関数を利用したときの性能差を検証してみましょう。

値の検索

特定の値を一次元配列内から探し、そのインデックス値を返します。指定した値が配列内に存在しない時は-1を返します。特定の値が一次元配列内に複数含まれる場合は、一番若いインデックス値を返します。以降に処理の概要図を示します。

性能評価:最小値・最大値・インデックス

一次元配列から最小値・最大値を探すプログラムを応用して、C++言語で記述したプログラムと、アセンブリ言語で記述した関数を利用したときの性能差を検証してみましょう。

最小値・最大値・インデックス

一次元配列に含まれる最小値か最大値を見つけ、かつその位置を得るプログラムを紹介します。以降に処理の概要図を示します。

性能評価:最小値・最大値

一次元配列から最小値・最大値を探すプログラムを応用して、C++言語で記述したプログラムと、アセンブリ言語で記述した関数を利用したときの性能差を検証してみましょう。

最小値・最大値

一次元配列に含まれる最小値か最大値を見つけるプログラムを紹介します。以降に処理の概要図を示します。

任意範囲へ飽和:符号付・なし

任意の範囲へ飽和させる飽和処理を紹介します。

型飽和:符号付・なし型

データ型を変更するとき、特に大きなデータ型から小さなデータ型へ変換するときにオーバーフローやアンダーフローが発生しないように飽和させて代入する必要があります。ここでは、そのような型飽和処理を紹介します。 符号付、あるいは符号なし64ビット整数…

性能評価:予測と分岐・加算とクリア

予測と分岐・加算とクリアのプログラムを応用して、C++言語で記述したプログラムと、アセンブリ言語で記述した関数を利用したときの性能差を検証してみましょう。性能評価は「予測と分岐・加算とクリア・64ビット浮動小数点型」を用います。

予測と分岐・加算とクリア・32ビット浮動小数点型

配列の値によって処理を変更するプログラム紹介します。 AVX-512 命令のマスクレジスターを使用すると、プレディケーション(分岐の排除)によって、条件判断が必要な処理を効率良く実行できます。