linearfrac#

スカラー・パラメーターを持つベクトル ab の要素ごとの線形分数変換を計算します。

説明#

linearfrac(a,b,scalea,shifta,scaleb,shiftb) 関数は、スカラー・パラメーター (スケーリング乗数 scalea、scaleb、シフト加数 shifta、shiftb) を使用して、ベクトル a をベクトル b で線形分数変換します。

y[i]=(scalea·a[i]+shifta)/(scaleb·b[i]+shiftb)i=1,2 … n

linearfrac 関数は EP 精度モードでのみ実装されるため、この関数には特定の値は定義されていません。HA または LA モードで使用する場合、linearfrac は VM エラーステータスを status::accuracy_warning に設定します。計算結果の正当性は、各入力パラメーターで定義されているしきい値の範囲内で保証されます (下の表を参照)。それ以外の場合、動作は未指定となります。

入力パラメーターのしきい値制限

2EMIN/2≤ |scalea| 2(EMAX-2)/2

2EMIN/2≤ |scaleb| 2(EMAX-2)/2

|shifta| 2EMAX-2

|shiftb| 2EMAX-2

2EMIN/2≤a[i] 2(EMAX-2)/2

2EMIN/2≤b[i] 2(EMAX-2)/2

a[i] - (shifta/scalea)*(1-δ1), |δ1| 21-(p-1)/2

b[i] - (shiftb/scaleb)*(1-δ2), |δ2| 21-(p-1)/2

EMINEMAX は最小指数と最大指数であり、p は ANSI/IEEE 標準 754-2008 [IEEE754] に従ったデータタイプの有効ビット数 (精度) です:

  • 単精度の場合、EMIN = -126、EMAX = 127、p = 24

  • 倍精度の場合、EMIN = -1022、EMAX = 1023、p = 53

scalea=0 および/または scaleb=0 の一般的なケースでは、しきい値は緩和されます。

  • scalea=0 の場合、a[i]shifta の値に制限はありません。

  • scaleb=0 の場合、b[i]shiftb の値に制限はありません。

API#

構文#

バッファー API

namespace oneapi::mkl::vm { 

sycl::event linearfrac(sycl::queue & exec_queue, 
      std::int64_t n, 
      sycl::buffer<T> & a, 
      sycl::buffer<T> & b, 
      T scalea, 
      T shifta, 
      T scaleb, 
      T shiftb, 
      sycl::buffer<T> & y, 
      oneapi::mkl::vm::mode mode = oneapi::mkl::vm::mode::not_defined, 
      oneapi::mkl::vm::error_handler<T> errhandler = {}); 

}
namespace oneapi::mkl::vm { 

sycl::event linearfrac(sycl::queue & exec_queue, 
      sycl::buffer<T> & a, 
      oneapi::mkl::slice sa, 
      sycl::buffer<T> & b, 
      oneapi::mkl::slice sb, 
      T scalea, 
      T shifta, 
      T scaleb, 
      T shiftb, 
      sycl::buffer<T> & y, 
      oneapi::mkl::slice sy, 
      oneapi::mkl::vm::mode mode = oneapi::mkl::vm::mode::not_defined, 
      oneapi::mkl::vm::error_handler<T> errhandler = {}); 

}

USM API

namespace oneapi::mkl::vm { 

sycl::event linearfrac(sycl::queue & exec_queue, 
      std::int64_t n, 
      T const * a, 
      T const * b, 
      T scalea, 
      T shifta, 
      T scaleb, 
      T shiftb, 
      T * y, 
      std::vector<sycl::event> const & depends = {}, 
      oneapi::mkl::vm::mode mode = oneapi::mkl::vm::mode::not_defined, 
      oneapi::mkl::vm::error_handler<T> errhandler = {}); 

}
namespace oneapi::mkl::vm { 

sycl::event linearfrac(sycl::queue & exec_queue, 
      T const * a, 
      oneapi::mkl::slice sa, 
      T const * b, 
      oneapi::mkl::slice sb, 
      T scalea, 
      T shifta, 
      T scaleb, 
      T shiftb, 
      T * y, 
      oneapi::mkl::slice sy, 
      std::vector<sycl::event> const & depends = {}, 
      oneapi::mkl::vm::mode mode = oneapi::mkl::vm::mode::not_defined, 
      oneapi::mkl::vm::error_handler<T> errhandler = {}); 

}

linearfrac は次の精度とデバイスをサポートしています。

T

デバイスサポート

sycl::half

GPU

_Float16

CPU

float

CPU および GPU

double

CPU および GPU

入力パラメーター#

バッファー API

exec_queue

ルーチンが実行されるキュー。

n

計算する要素の数を指定します。

a

1 番目の入力ベクトルを含むバッファー。

sa

a のスライスセレクター。oneMKL スライスタイプの説明については、データタイプを参照してください。

b

2 番目の入力ベクトルを含むバッファー。

sb

b のスライスセレクター。oneMKL スライスタイプの説明については、データタイプを参照してください。

scalea

ベクトル a のスケーリング乗数の定数値

shifta

ベクトル a の加数をシフトする定数値

scaleb

ベクトル b のスケーリング乗数の定数値

shiftb

ベクトル b の加数をシフトする定数値

sy

y のスライスセレクター。oneMKL スライスタイプの説明については、データタイプを参照してください。

mode

この関数呼び出しのグローバル VM モード設定をオーバーライドします。指定可能な値とその説明については、set_mode 関数を参照してください。これはオプションのパラメーターです。デフォルト値は mode::not_defined です。

errhandler

この関数呼び出しのローカルエラー処理モードを設定します。引数と説明については、create_error_handler 関数を参照してください。これはオプションのパラメーターです。ローカル・エラー・ハンドラーはデフォルトで無効になっています。

USM API

exec_queue

ルーチンが実行されるキュー。

n

計算する要素の数を指定します。

a

最初の入力ベクトルへのポインター。

sa

a のスライスセレクター。oneMKL スライスタイプの説明については、データタイプを参照してください。

b

2 番目の入力ベクトルへのポインター。

sb

b のスライスセレクター。oneMKL スライスタイプの説明については、データタイプを参照してください。

scalea

ベクトル a のスケーリング乗数の定数値

shifta

ベクトル a の加数をシフトする定数値

scaleb

ベクトル b のスケーリング乗数の定数値

shiftb

ベクトル b の加数をシフトする定数値

sy

y のスライスセレクター。oneMKL スライスタイプの説明については、データタイプを参照してください。

depends

依存イベントのベクトル (入力データの準備ができるまで待機)。これはオプションのパラメーターです。デフォルトは空のベクトルです。

mode

この関数呼び出しのグローバル VM モード設定をオーバーライドします。指定可能な値とその説明については、set_mode 関数を参照してください。これはオプションのパラメーターです。デフォルト値は mode::not_defined です。

errhandler

この関数呼び出しのローカルエラー処理モードを設定します。引数と説明については、create_error_handler 関数を参照してください。これはオプションのパラメーターです。ローカル・エラー・ハンドラーはデフォルトで無効になっています。

出力パラメーター#

バッファー API

y

出力ベクトルを含むバッファー。

戻り値 (event)

計算終了イベント。

USM API

y

出力ベクトルへのポインター。

戻り値 (event)

計算終了イベント。

#

linearfrac の使用例は、oneMKL インストール・ディレクトリーの以下の場所にあります。

share/doc/mkl/examples/sycl/vml/source/vllinearfrac.cpp