配列の値によって処理を変更するプログラム紹介します。 AVX-512 命令のマスクレジスターを使用すると、プレディケーション(分岐の排除)によって、条件判断が必要な処理を効率良く実行できます。プレディケーションでは、各レーンで命令を実行するかしない…
配列の値によって処理を変更するプログラム紹介します。 AVX-512 命令のマスクレジスターを使用すると、プレディケーション(分岐の排除)によって、条件判断が必要な処理を効率良く実行できます。プレディケーションでは、各レーンで命令を実行するかしない…
配列の値によって処理を変更するプログラム紹介します。 AVX-512 命令のマスクレジスターを使用すると、プレディケーション(分岐の排除)によって、条件判断が必要な処理を効率良く実行できます。プレディケーションでは、各レーンで命令を実行するかしない…
プレディケーション(分岐の排除)によって、条件判断が必要な処理を効率良く実行できます。
プレディケーション(分岐の排除)によって、条件判断が必要な処理を効率良く実行できます。
プレディケーション(分岐の排除)によって、条件判断が必要な処理を効率良く実行できます。
プレディケーション(分岐の排除)によって、条件判断が必要な処理を効率良く実行できます。
プレディケーション(分岐の排除)によって、条件判断が必要な処理を効率良く実行できます。AVX-512 命令のマスクレジスターを使用すると、プレディケーション(分岐の排除)によって、条件判断が必要な処理を効率良く実行できます。ここで紹介するものは、…
一次元配列同士の演算(float)をAVX512アセンブリ言語で記述します。呼び出し側をC++で、演算処理をAVX512アセンブリ言語で記述します。
一次元配列同士の演算(double)をAVX512アセンブリ言語で記述します。呼び出し側をC++で、演算処理をAVX512アセンブリ言語で記述します。
一次元配列同士の演算(byte)をAVX512アセンブリ言語で記述します。呼び出し側をC++で、演算処理をAVX512アセンブリ言語で記述します。
一次元配列同士の演算(short)をAVX512アセンブリ言語で記述します。呼び出し側をC++で、演算処理をAVX512アセンブリ言語で記述します。
一次元配列同士の演算(int or long)をAVX512アセンブリ言語で記述します。呼び出し側をC++で、演算処理をAVX512アセンブリ言語で記述します。
一次元配列同士の演算(long long)をAVX512アセンブリ言語で記述します。呼び出し側をC++で、演算処理をAVX512アセンブリ言語で記述します。
では、電光掲示板の色が薄いです。ここでは画像をブレンドせず、画像の各画素を比較し、明るい方の画素を取り出します。以降に、結果を示します。 写真1 2番目の写真 電光掲示板の撮影#2で、写真2を写真1の位置に合わせてからブレンドしました。ここで…
を改良し、最初の画像に2番目の画像位置を合わせ、その後ブレンドしてみましょう。先ほどと同じ2枚の画像を使用します。
スマホなどで電光掲示板を撮影すると、文字のすべてが綺麗に写らないことがあります。 写真1
一次元配列同士の加算する。呼び出し側をC++で、加算処理をAVX512アセンブリ言語で記述した例を示す。 まず、単純な例を示す。
一次元配列同士の加算する。C++、AVX-512の例を示す。
一次元配列へスカラー値を加算します。C++、x86アセンブラー、AVX2、AVX-512の例を示します。
AVX-512 イントリンシックでブロードキャスト。
AVX-512 イントリンシックでマスク、またはゼロマスクを使った移動。データはSIMD境界に揃っていない。
AVX-512 イントリンシックでゼロマスクを使った移動。
AVX-512 イントリンシックでマスクを使った移動。
AVX-512 イントリンシックでスカラーを__m512iへブロードキャストする。
C++とアセンブラーで開発した関数について一通り解説してきた。今回は、戻り値を持つ関数の説明を行う。 戻り値がchar 戻り値がshort 戻り値がint 戻り値がポインター 戻り値が単精度浮動小数点 戻り値が倍精度浮動小数点
C++とアセンブラーで開発した関数について一通り解説してきた。今回は、スタックへレジスターの保存を行うだけでなく、スタックに作業領域を割り当てて使う方法を紹介する。レジスターの保護と、作業領域確保の両方を行う例を紹介する。
C++とアセンブラー④で紹介したように、xmmレジスターを保護しただけでは、ymmレジスターやzmmレジスターの保護が保証されないことが分かった。そこで、ここでは512ビットのSIMDをサポートしたCPUはzmmレジスターを、256ビットのSIMDをサポートしたCPUはymmレ…
Visual Studio のC++が呼び出すアセンブリ関数でレジスターを保護する方法を紹介したが、xmmレジスターまでしか考慮していない。ymmレジスターやzmmレジスターを搭載したCPUで、本当にxmmレジスターをほごするだけで良いのか考察してみる。 保存するSIMDレジ…
Visual Studio のC++からアセンブリコードで記述した関数を紹介したが、レジスターの退避が十分とは言えませんので、破壊してはならないレジスターを保護する例を紹介する。