B.39. 整数関数

表B.110 表:四則・絶対値・最小最大値関数

関数詳細 
ugentype abs (gentype x)

| x |を計算します。
ugentype abs_diff (gentype x, gentype y)
オーバーフローを発生
させずに| x – y |を
計算します。
gentype hadd (gentype x, gentype y)
和のオーバーフローを
発生させずに(x + y) >> 1
を計算します。
gentype rhadd (gentype x, gentype y)
和のオーバーフローを発生
させずに(x + y + 1) >> 1
を計算します。

gentype clamp (gentype x,
    gentype minval,
    gentype maxval)
gentype clamp (gentype x,
    sgentype minval,
    sgentype maxval)
min(max(x, minval), maxval)
を計算します。
結果はminval > maxval
のときに未定義です。

gentype clz (gentype x)
最上位ビットから連続
する0のビット数を計算
します。

gentype max (gentype x, gentype y)
gentype max (gentype x, sgentype y)
x < yのときは、y
それ以外のときは、
xを計算します。
gentype min (gentype x, gentype y)
gentype min (gentype x, sgentype y)

y < xのときは、y
れ以外のときは、xを計算します。
gentype rotate (gentype v, gentype i)
vの各要素に対して、iビット
の左シフトを行ないます。
左シフトで押し出されたビッ
トは右側に挿入されます。
short upsample (char hi, uchar lo)
ushort upsample (uchar hi, uchar lo)
shortn upsample (charn hi, ucharn lo)
ushortn upsample (ucharn hi, ucharn lo)
int upsample (short hi, ushort lo)
uint upsample (ushort hi, ushort lo)
intn upsample (shortn hi, ushortn lo)
uintn upsample (ushortn hi, ushortn lo)
long upsample (int hi, uint lo)
ulong upsample (uint hi, uint lo)
longn upsample (intn hi, uintn lo)
ulongn upsample (uintn hi, uintn lo)
以下の計算をします。
result[i] = ((short)hi[i] << 8) | lo[i]
result[i] = ((ushort)hi[i] << 8) | lo[i]
result[i] = ((int)hi[i] << 16) | lo[i]
result[i] = ((uint)hi[i] << 16) | lo[i]
result[i] = ((long)hi[i] << 32) | lo[i]
result[i] = ((ulong)hi[i] << 32) | lo[i]

gentype popcount (gentype x)

引数xの0でないビットの数を計算します。

B.39.1. MADと乗算

表B.111 表:乗算関数

関数詳細
gentype mul_hi (
    gentype x,
    gentype y)
x * yを計算し、算出し
た値の上半分を返します。
gentype mad_hi (
    gentype a,
    gentype b,
    gentype c)
mul_hi(a, b) + c
を計算します。
gentype mad24 (
    gentype x,
    gentype y,
    gentype z)
2つの24ビット整数値x
とyの積を計算し、32ビッ
ト整数値zを足します。
gentype mul24 (
    gentype x,
    gentype y)
2つの24ビット整数値xと
yの積を計算します。xとy
は両方とも32ビット整数値
ですが計算では下位24ビッ
トのみを使います。xとyの
両方が符号つきのときは、
[-223, 223-1]、符号無し
のときは [0, 224-1] の
範囲内にあるとき使うこと
が推奨されています。xとy
がこれらの範囲内にないと
き、計算結果は実装システ
ムに依存します。

B.39.2. 飽和演算

表B.112 表:(飽和)加算・減算関数

関数詳細
gentype sub_sat (gentype x, gentype y)

x - yを計算します。
結果については飽和を
適用します
gentype add_sat (gentype x, gentype y)

x + yを計算します。
結果については飽和を
適用します。
gentype mad_sat (
    gentype a,
    gentype b,
    gentype c)
a * b + cを計算します。
結果については飽和を
適用します。

B.39.3. 整数型OpenCLマクロ

表:整数型マクロ. 

#define CHAR_BIT 8
#define CHAR_MAX SCHAR_MAX
#define CHAR_MIN SCHAR_MIN
#define INT_MAX 2147483647
#define INT_MIN (-2147483647 – 1)
#define LONG_MAX 0x7fffffffffffffffL
#define LONG_MIN (-0x7fffffffffffffffL – 1)
#define SCHAR_MAX 127
#define SCHAR_MIN (-127 – 1)
#define SHRT_MAX 32767
#define SHRT_MIN (-32767 – 1)
#define UCHAR_MAX 255
#define USHRT_MAX 65535
#define UINT_MAX 0xffffffff
#define ULONG_MAX 0xffffffffffffffffUL

表B.113 表:ホストAPIとデータ型の対応

OpenCL CマクロOpenCL APIマクロ
CHAR_BIT
CL_CHAR_BIT
CHAR_MAX
CL_CHAR_MAX

CHAR_MIN
CL_CHAR_MIN
INT_MAX
CL_INT_MAX
INT_MIN
CL_INT_MIN
LONG_MAX
CL_LONG_MAX
LONG_MIN
CL_LONG_MIN
SCHAR_MAX

CL_SCHAR_MAX
SCHAR_MIN
CL_SCHAR_MIN
SHRT_MAX
CL_SHRT_MAX
SHRT_MIN
CL_SHRT_MIN
UCHAR_MAX
CL_UCHAR_MAX

Copyright 2018-2019, by Masaki Komatsu