データタイプ#

BLAS と LAPACK のデータタイプ#

データ並列 C++ (DPC++) 対応インテル® oneMKL BLAS および LAPACK では、BLAS および LAPACK の従来の Fortran 文字のタイプセーフ・バージョンであるいくつかの新しい列挙データタイプが導入されています。これらは、oneapi/mkl/types.hpp で宣言されており、oneapi/mkl/blas.hpp または oneapi/mkl/lapack.hpp をインクルードすると自動的に展開されます。すべての oneMKL DPC++ 機能と同様に、これらは名前空間 oneapi::mkl:: に属します。

各列挙値には 2 つの名前が付きます: 1 文字の名前 (従来の BLAS/LAPACK 文字) と、より長い名前。2 つの名前はまったく同じであり、交換可能です。

Transpose#

transpose タイプは、入力行列を転置および/または共役にするか指定します。次の値を取ることができます。

関数の省略名

関数の正式名

説明

transpose::N

transpose::nontrans

行列を転置または共役しません。

transpose::T

transpose::trans

行列を転置します。

transpose::C

transpose::conjtrans

エルミート転置 (転置と共役) を実行します。複素行列にのみ適用されます。

Uplo#

uplo タイプは、三角行列、対称行列、またはエルミート行列の下三角形または上三角形にアクセスするかどうかを指定します。次の値を取ることができます。

関数の省略名

関数の正式名

説明

uplo::U

uplo::upper

行列の上部の三角形にアクセスします。

uplo::L

uplo::lower

行列の下部の三角形にアクセスします。

どちらの場合も、選択された三角形にない要素はアクセスも更新もされません。

Diag#

diag タイプは、三角行列の対角線上の値を指定します。次の値を取ることができます。

関数の省略名

関数の正式名

説明

diag::N

diag::nonunit

行列は単位三角行列ではありません。対角要素は行列データとともに保存されます。

diag::U

diag::unit

行列は単位三角行列です (対角要素はすべて 1 です)。行列データ内の対角要素にはアクセスされません。

Side#

side タイプは、1 つの行列が特殊な形式 (三角、対称、またはエルミート) である場合の行列乗算の順序を指定します。

関数の省略名

関数の正式名

説明

side::L

side::left

特殊形式の行列は乗算の左辺にあります。

side::R

side::right

特殊形式の行列は乗算の右辺にあります。

Offset#

offset タイプは、出力行列に適用するオフセットが固定オフセット、列オフセット、または行オフセットのいずれであるかを指定します。次の値を取ることができます。

関数の省略名

関数の正式名

説明

offset::F

offset::fix

出力行列に適用するオフセットは固定であり、C_offset 行列内のすべての入力は co 配列の最初の要素で指定された同じ値を持ちます。

offset::C

offset::column

出力行列に適用するオフセットは列オフセットです。つまり、C_offset 行列内のすべての列は同じであり、co 配列の要素で指定されます。

offset::R

offset::row

出力行列に適用するオフセットは行オフセットです。つまり、C_offset 行列内のすべての行は同じであり、co 配列の要素で指定されます。

value_or_pointer#

value_or_pointer タイプは、スカラー・パラメーター (通常は alpha または beta という名前) を受け取る BLAS ルーチンにユーザーがポインターまたは値を渡すことを可能にするラッパーとして使用されます。使用法については、スカラー引数で説明されています。

ベクトル数学データタイプ#

データ並列 C++ (DPC++) 対応の oneMKL VM では、oneapi::mkl 名前空間で使用できるスライスタイプが導入されています。スライスは、DPC++ VM ストライド API で使用されます。oneMKL スライスは、ベクトルの前方、静的、後方の横断に対して、それぞれ正、ゼロ、負のストライドを受け入れます。

コンストラクター

説明

slice()

デフォルトのコンストラクターは slice(0, 0, 0) と同等です。

slice(std::size_t start, std::size_t size, std::int64_t stride)

開始インデックス、選択する値の数、および 2 つの要素間のストライドを定義するスライス。

slice(const slice & other)

コピー・コンストラクター。

以下に例を示します。

  • slice(1, 5, 2) は、バッファーまたは配列内のインデックス 1、3、5、7、9 の要素のセレクターを定義します。

  • slice(0, 5, 0) は、インデックス 0 の単一要素のセレクターを 5 回繰り返して定義します。

  • slice(9, 4, -3) は、バッファーまたは配列内のインデックス 9、6、3、0 の要素のセレクターを定義します。

スライスが負のインデックスを生成する場合、そのスライスは無効とみなされます。サイズ 0 のスライスは要素を選択しません。スライスが範囲外のメモリーアクセスを引き起こす可能性がある場合、動作は未定義です。

無効または不等なスライスで使用される VM ストライド API の動作は、いくつかの oneMKL VM モード値で構成可能です。指定可能な値と説明については、set_mode 関数を参照してください。

slice_cyclic モードでは、サイズがゼロのスライスは無効です。