C++言語を使用している際に、直接アセンブリで記述した機械語(AVX命令)を実行します。
特定の値を一次元配列内から探し、そのインデックス値を返します。指定した値が配列内に存在しない時は-1を返します。特定の値が一次元配列内に複数含まれる場合は、一番若いインデックス値を返します。以降に処理の概要図を示します。
FMA命令を使用し、行列の積を求めるプログラムを紹介します。行列a (n × m) と b (m × p) の積 c は(n × p) の行列です。分かりやすいように、行列を以降に示します。 これらの積をc に求めるには、 を行います。行列c を以降に示します。
C++言語で記述したプログラムと、アセンブリ言語で記述した関数を利用したときの性能差を検証してみましょう。
以前紹介した、一連の「一次元配列同士の演算」などを任意長を扱えるように拡張します。 arques.hatenablog.com 機能は、配列同士の各要素を演算し、別の配列へ格納するするプログラムです。処理概要を図で示します。
一次元配列の各要素を検査し、条件を満足していたら、その要素を抽出します。当時に抽出した要素の位置を得ます。ここでは任意の値以上の要素を抽出、任意の値以下の要素を抽出、任意範囲の要素を抽出するとともに、そのインデックスを得る例を示します。前の関数は要素だけを抽出しましたが、本関数は要素に加え、その要素の位置(インデックス値)を抽出します。以降に処理概要を図で示します。
一次元配列の各要素を検査し、条件を満足していたら、その要素を抽出します。ここでは任意の値以上の要素を抽出する、任意の値以下の要素を抽出する、任意範囲の要素を抽出する例を示します。以降に処理概要を図で示します。