![]() |
OpenCV 4.13.0
Open Source Computer Vision
|
トピック | |
| プライベート実装ヘルパー | |
「Universal intrinsics」は、異なるプラットフォーム上でのコードのベクトル化を簡素化することを目的とした型と関数のセットである。現在、異なるアーキテクチャ上のいくつかの異なるSIMD拡張がサポートされている。
OpenCV Universal Intrinsicsは以下の命令セットをサポートしている:
コンパイル時に利用可能なSIMD拡張がない場合は、intrinsicsのフォールバックC++実装が選択され、より遅くなる可能性はあるものの、コードは期待通りに動作する。
パックされた値のベクトルレジスタを表すいくつかの型があり、各型は1つのSIMDレジスタに基づく構造体として実装されている。
列挙された型の正確なビット長(および値の個数)はコンパイル時に推定され、ライブラリのコンパイル時に利用可能として選択されたアーキテクチャのSIMD機能に依存する。すべての型は、その型の正確な値の個数を確認するための nlanes 列挙を含む。
型の正確なビット長が重要な場合は、特定の固定長レジスタ型を使用できる。
128ビットレジスタを表すいくつかの型がある。
256ビットレジスタを表す型がいくつか存在する。
512ビットレジスタを表す型がいくつか存在する。
これらの操作により、レジスタの内容を明示的に設定したり、メモリブロックから読み込んで設定したり、レジスタの内容をメモリブロックに保存したりできる。
選択したプラットフォームの能力に応じて利用可能な最大サイズの結果を返す、可変サイズのレジスタロード操作が存在する。
固定サイズのレジスタロード/ストア操作も存在する。
128ビットレジスタ向け
256ビットレジスタ向け (CV_SIMD256プリプロセッサ定義を確認)
512ビットレジスタ向け (CV_SIMD512プリプロセッサ定義を確認)
メモリへのストア操作は、プラットフォームの能力によらず同様である: v_store, v_store_aligned, v_store_high, v_store_low
これらの操作により、1つまたは複数のベクトル内の要素を並べ替えたり、再結合したりできる。
要素ごとの二項演算および単項演算。
これらの操作のほとんどは値を1つだけ返す。
さまざまな型変換とキャスト:
これらの操作では、ベクトルは行列の行/列を表す: v_dotprod, v_dotprod_fast, v_dotprod_expand, v_dotprod_expand_fast, v_matmul, v_transpose4x4
ほとんどの操作は利用可能な型の一部に対してのみ実装されている。以下の表に、さまざまな操作の各型への適用可否を示す。
通常の整数:
| Operations\Types | uint 8 | int 8 | uint 16 | int 16 | uint 32 | int 32 |
|---|---|---|---|---|---|---|
| load, store | x | x | x | x | x | x |
| interleave | x | x | x | x | x | x |
| expand | x | x | x | x | x | x |
| expand_low | x | x | x | x | x | x |
| expand_high | x | x | x | x | x | x |
| expand_q | x | x | ||||
| add, sub | x | x | x | x | x | x |
| add_wrap, sub_wrap | x | x | x | x | ||
| mul_wrap | x | x | x | x | ||
| mul | x | x | x | x | x | x |
| mul_expand | x | x | x | x | x | |
| compare | x | x | x | x | x | x |
| shift | x | x | x | x | ||
| dotprod | x | x | ||||
| dotprod_fast | x | x | ||||
| dotprod_expand | x | x | x | x | x | |
| dotprod_expand_fast | x | x | x | x | x | |
| logical | x | x | x | x | x | x |
| min, max | x | x | x | x | x | x |
| absdiff | x | x | x | x | x | x |
| absdiffs | x | x | ||||
| reduce | x | x | x | x | x | x |
| mask | x | x | x | x | x | x |
| pack | x | x | x | x | x | x |
| pack_u | x | x | ||||
| pack_b | x | |||||
| unpack | x | x | x | x | x | x |
| extract | x | x | x | x | x | x |
| rotate (lanes) | x | x | x | x | x | x |
| cvt_flt32 | x | |||||
| cvt_flt64 | x | |||||
| transpose4x4 | x | x | ||||
| reverse | x | x | x | x | x | x |
| extract_n | x | x | x | x | x | x |
| broadcast_element | x | x |
大きな整数:
| Operations\Types | uint 64 | int 64 |
|---|---|---|
| load, store | x | x |
| add, sub | x | x |
| shift | x | x |
| logical | x | x |
| reverse | x | x |
| extract | x | x |
| rotate (lanes) | x | x |
| cvt_flt64 | x | |
| extract_n | x | x |
浮動小数点:
| Operations\Types | float 32 | float 64 |
|---|---|---|
| load, store | x | x |
| interleave | x | |
| add, sub | x | x |
| mul | x | x |
| div | x | x |
| compare | x | x |
| min, max | x | x |
| absdiff | x | x |
| reduce | x | |
| mask | x | x |
| unpack | x | x |
| cvt_flt32 | x | |
| cvt_flt64 | x | |
| sqrt, abs | x | x |
| float math | x | x |
| transpose4x4 | x | |
| extract | x | x |
| rotate (lanes) | x | x |
| reverse | x | x |
| extract_n | x | x |
| broadcast_element | x | |
| exp | x | x |
| log | x | x |
| sin, cos | x | x |
クラス | |
| struct | cv::v_reg< _Tp, n > |
マクロ定義 | |
| #define | OPENCV_HAL_MATH_HAVE_EXP 1 |
型定義 | |
| typedef v_float32x16 | simd512::v_float32 |
| 32ビット浮動小数点値(単精度)の利用可能な最大ベクトルレジスタ容量 | |
| typedef v_reg< float, 16 > | cv::v_float32x16 |
| 16個の32ビット浮動小数点値(単精度) | |
| typedef v_reg< float, 4 > | cv::v_float32x4 |
| 4個の32ビット浮動小数点値(単精度) | |
| typedef v_reg< float, 8 > | cv::v_float32x8 |
| 8個の32ビット浮動小数点値(単精度) | |
| typedef v_float64x8 | simd512::v_float64 |
| 64ビット浮動小数点値(倍精度)の利用可能な最大ベクトルレジスタ容量 | |
| typedef v_reg< double, 2 > | cv::v_float64x2 |
| 2個の64ビット浮動小数点値(倍精度) | |
| typedef v_reg< double, 4 > | cv::v_float64x4 |
| 4個の64ビット浮動小数点値(倍精度) | |
| typedef v_reg< double, 8 > | cv::v_float64x8 |
| 8個の64ビット浮動小数点値(倍精度) | |
| typedef v_int16x32 | simd512::v_int16 |
| 16ビット符号付き整数値の利用可能な最大ベクトルレジスタ容量。 | |
| typedef v_reg< short, 16 > | cv::v_int16x16 |
| 16個の16ビット符号付き整数値。 | |
| typedef v_reg< short, 32 > | cv::v_int16x32 |
| 32個の16ビット符号付き整数値。 | |
| typedef v_reg< short, 8 > | cv::v_int16x8 |
| 8個の16ビット符号付き整数値。 | |
| typedef v_int32x16 | simd512::v_int32 |
| 32ビット符号付き整数値の利用可能な最大ベクトルレジスタ容量。 | |
| typedef v_reg< int, 16 > | cv::v_int32x16 |
| 16個の32ビット符号付き整数値。 | |
| typedef v_reg< int, 4 > | cv::v_int32x4 |
| 4個の32ビット符号付き整数値。 | |
| typedef v_reg< int, 8 > | cv::v_int32x8 |
| 8個の32ビット符号付き整数値。 | |
| typedef v_int64x8 | simd512::v_int64 |
| 64ビット符号付き整数値の利用可能な最大ベクトルレジスタ容量。 | |
| typedef v_reg< int64, 2 > | cv::v_int64x2 |
| 2個の64ビット符号付き整数値。 | |
| typedef v_reg< int64, 4 > | cv::v_int64x4 |
| 4個の64ビット符号付き整数値。 | |
| typedef v_reg< int64, 8 > | cv::v_int64x8 |
| 8個の64ビット符号付き整数値。 | |
| typedef v_int8x64 | simd512::v_int8 |
| 8ビット符号付き整数値の利用可能な最大ベクトルレジスタ容量。 | |
| typedef v_reg< schar, 16 > | cv::v_int8x16 |
| 16個の8ビット符号付き整数値。 | |
| typedef v_reg< schar, 32 > | cv::v_int8x32 |
| 32個の8ビット符号付き整数値。 | |
| typedef v_reg< schar, 64 > | cv::v_int8x64 |
| 64個の8ビット符号付き整数値。 | |
| typedef v_uint16x32 | simd512::v_uint16 |
| 16ビット符号なし整数値の利用可能な最大ベクトルレジスタ容量。 | |
| typedef v_reg< ushort, 16 > | cv::v_uint16x16 |
| 16個の16ビット符号なし整数値。 | |
| typedef v_reg< ushort, 32 > | cv::v_uint16x32 |
| 32個の16ビット符号なし整数値。 | |
| typedef v_reg< ushort, 8 > | cv::v_uint16x8 |
| 8個の16ビット符号なし整数値。 | |
| typedef v_uint32x16 | simd512::v_uint32 |
| 32ビット符号なし整数値の利用可能な最大ベクトルレジスタ容量。 | |
| typedef v_reg< unsigned, 16 > | cv::v_uint32x16 |
| 16個の32ビット符号なし整数値。 | |
| typedef v_reg< unsigned, 4 > | cv::v_uint32x4 |
| 4個の32ビット符号なし整数値。 | |
| typedef v_reg< unsigned, 8 > | cv::v_uint32x8 |
| 8個の32ビット符号なし整数値。 | |
| typedef v_uint64x8 | simd512::v_uint64 |
| 64ビット符号なし整数値の利用可能な最大ベクトルレジスタ容量。 | |
| typedef v_reg< uint64, 2 > | cv::v_uint64x2 |
| 2個の64ビット符号なし整数値。 | |
| typedef v_reg< uint64, 4 > | cv::v_uint64x4 |
| 4個の64ビット符号なし整数値。 | |
| typedef v_reg< uint64, 8 > | cv::v_uint64x8 |
| 8個の64ビット符号なし整数値。 | |
| typedef v_uint8x64 | simd512::v_uint8 |
| 8ビット符号なし整数値の利用可能な最大ベクトルレジスタ容量。 | |
| typedef v_reg< uchar, 16 > | cv::v_uint8x16 |
| 16個の8ビット符号なし整数値。 | |
| typedef v_reg< uchar, 32 > | cv::v_uint8x32 |
| 32個の8ビット符号なし整数値。 | |
| typedef v_reg< uchar, 64 > | cv::v_uint8x64 |
| 64個の8ビット符号なし整数値。 | |
列挙型 | |
| enum | { cv::simd128_width = 16 , cv::simd256_width = 32 , cv::simd512_width = 64 , cv::simdmax_width = simd512_width } |
関数 | |
| void | cv::v256_cleanup () |
| template<typename _Tp > | |
| v_reg< _Tp, simd256_width/sizeof(_Tp)> | cv::v256_load (const _Tp *ptr) |
| メモリから256ビット長のレジスタ内容をロードする。 | |
| template<typename _Tp > | |
| v_reg< _Tp, simd256_width/sizeof(_Tp)> | cv::v256_load_aligned (const _Tp *ptr) |
| メモリからレジスタ内容をロードする(アラインメント済み) | |
| template<typename _Tp > | |
| v_reg< typename V_TypeTraits< _Tp >::w_type, simd256_width/sizeof(typename V_TypeTraits< _Tp >::w_type)> | cv::v256_load_expand (const _Tp *ptr) |
| メモリからレジスタ内容を倍展開してロードする。 | |
| v_reg< float, simd256_width/sizeof(float)> | cv::v256_load_expand (const hfloat *ptr) |
| template<typename _Tp > | |
| v_reg< typename V_TypeTraits< _Tp >::q_type, simd256_width/sizeof(typename V_TypeTraits< _Tp >::q_type)> | cv::v256_load_expand_q (const _Tp *ptr) |
| メモリからレジスタ内容を4倍展開してロードする。 | |
| template<typename _Tp > | |
| v_reg< _Tp, simd256_width/sizeof(_Tp)> | cv::v256_load_halves (const _Tp *loptr, const _Tp *hiptr) |
| 2つのメモリブロックからレジスタ内容をロードする。 | |
| template<typename _Tp > | |
| v_reg< _Tp, simd256_width/sizeof(_Tp)> | cv::v256_load_low (const _Tp *ptr) |
| 128ビットのデータを下位部分にロードする(上位部分は未定義)。 | |
| void | cv::v512_cleanup () |
| template<typename _Tp > | |
| v_reg< _Tp, simd512_width/sizeof(_Tp)> | cv::v512_load (const _Tp *ptr) |
| メモリから512ビット長のレジスタ内容をロードする。 | |
| template<typename _Tp > | |
| v_reg< _Tp, simd512_width/sizeof(_Tp)> | cv::v512_load_aligned (const _Tp *ptr) |
| メモリからレジスタ内容をロードする(アラインメント済み) | |
| template<typename _Tp > | |
| v_reg< typename V_TypeTraits< _Tp >::w_type, simd512_width/sizeof(typename V_TypeTraits< _Tp >::w_type)> | cv::v512_load_expand (const _Tp *ptr) |
| メモリからレジスタ内容を倍展開してロードする。 | |
| v_reg< float, simd512_width/sizeof(float)> | cv::v512_load_expand (const hfloat *ptr) |
| template<typename _Tp > | |
| v_reg< typename V_TypeTraits< _Tp >::q_type, simd512_width/sizeof(typename V_TypeTraits< _Tp >::q_type)> | cv::v512_load_expand_q (const _Tp *ptr) |
| メモリからレジスタ内容を4倍展開してロードする。 | |
| template<typename _Tp > | |
| v_reg< _Tp, simd512_width/sizeof(_Tp)> | cv::v512_load_halves (const _Tp *loptr, const _Tp *hiptr) |
| 2つのメモリブロックからレジスタ内容をロードする。 | |
| template<typename _Tp > | |
| v_reg< _Tp, simd512_width/sizeof(_Tp)> | cv::v512_load_low (const _Tp *ptr) |
| 256ビットのデータを下位部分にロードする(上位部分は未定義)。 | |
| template<typename _Tp , int n> | |
| v_reg< typename V_TypeTraits< _Tp >::abs_type, n > | cv::v_abs (const v_reg< _Tp, n > &a) |
| 要素の絶対値。 | |
| template<typename _Tp , int n> | |
| v_reg< typename V_TypeTraits< _Tp >::abs_type, n > | cv::v_absdiff (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
| 絶対差。 | |
| template<int n> | |
| v_reg< double, n > | cv::v_absdiff (const v_reg< double, n > &a, const v_reg< double, n > &b) |
| template<int n> | |
| v_reg< float, n > | cv::v_absdiff (const v_reg< float, n > &a, const v_reg< float, n > &b) |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_absdiffs (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
| 飽和付き絶対差。 | |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_add (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
| 値を加算する。 | |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_add_wrap (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
| 飽和なしで値を加算する。 | |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_and (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
| ビットごとのAND。 | |
| template<int i, typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_broadcast_element (const v_reg< _Tp, n > &a) |
| ベクトルのi番目の要素をブロードキャストする。 | |
| template<int n> | |
| v_reg< int, n *2 > | cv::v_ceil (const v_reg< double, n > &a) |
| template<int n> | |
| v_reg< int, n > | cv::v_ceil (const v_reg< float, n > &a) |
| 要素の切り上げ。 | |
| template<typename _Tp , int n> | |
| bool | cv::v_check_all (const v_reg< _Tp, n > &a) |
| パックされた全ての値が0未満かどうかを判定する。 | |
| template<typename _Tp , int n> | |
| bool | cv::v_check_any (const v_reg< _Tp, n > &a) |
| パックされた値のいずれかが0未満かどうかを判定する。 | |
| void | cv::v_cleanup () |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_combine_high (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
| 2つのベクトルの末尾要素からベクトルを合成する。 | |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_combine_low (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
| 2つのベクトルの先頭要素からベクトルを合成する。 | |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_cos (const v_reg< _Tp, n > &a) |
| 要素の余弦 \( cos(x) \)。 | |
| template<int n> | |
| v_reg< float, n *2 > | cv::v_cvt_f32 (const v_reg< double, n > &a) |
| 下位半分をfloatに変換する。 | |
| template<int n> | |
| v_reg< float, n *2 > | cv::v_cvt_f32 (const v_reg< double, n > &a, const v_reg< double, n > &b) |
| floatに変換する。 | |
| template<int n> | |
| v_reg< float, n > | cv::v_cvt_f32 (const v_reg< int, n > &a) |
| floatに変換する。 | |
| template<int n> | |
| v_reg< double,(n/2)> | cv::v_cvt_f64 (const v_reg< float, n > &a) |
| 下位半分をdoubleに変換する。 | |
| template<int n> | |
| v_reg< double, n/2 > | cv::v_cvt_f64 (const v_reg< int, n > &a) |
| 下位半分をdoubleに変換する。 | |
| template<int n> | |
| v_reg< double, n > | cv::v_cvt_f64 (const v_reg< int64, n > &a) |
| doubleに変換する。 | |
| template<int n> | |
| v_reg< double,(n/2)> | cv::v_cvt_f64_high (const v_reg< float, n > &a) |
| ベクトルの上位部分をdoubleに変換する。 | |
| template<int n> | |
| v_reg< double,(n/2)> | cv::v_cvt_f64_high (const v_reg< int, n > &a) |
| ベクトルの上位部分をdoubleに変換する。 | |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_div (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
| 値を除算する。 | |
| template<typename _Tp , int n> | |
| v_reg< typename V_TypeTraits< _Tp >::w_type, n/2 > | cv::v_dotprod (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
| 要素の内積。 | |
| template<typename _Tp , int n> | |
| v_reg< typename V_TypeTraits< _Tp >::w_type, n/2 > | cv::v_dotprod (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b, const v_reg< typename V_TypeTraits< _Tp >::w_type, n/2 > &c) |
| 要素の内積。 | |
| template<typename _Tp , int n> | |
| v_reg< typename V_TypeTraits< _Tp >::q_type, n/4 > | cv::v_dotprod_expand (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
| 要素の内積と展開。 | |
| template<typename _Tp , int n> | |
| v_reg< typename V_TypeTraits< _Tp >::q_type, n/4 > | cv::v_dotprod_expand (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b, const v_reg< typename V_TypeTraits< _Tp >::q_type, n/4 > &c) |
| 要素の内積。 | |
| template<int n> | |
| v_reg< double, n/2 > | cv::v_dotprod_expand (const v_reg< int, n > &a, const v_reg< int, n > &b) |
| template<int n> | |
| v_reg< double, n/2 > | cv::v_dotprod_expand (const v_reg< int, n > &a, const v_reg< int, n > &b, const v_reg< double, n/2 > &c) |
| template<typename _Tp , int n> | |
| v_reg< typename V_TypeTraits< _Tp >::q_type, n/4 > | cv::v_dotprod_expand_fast (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
| 要素の高速内積と展開。 | |
| template<typename _Tp , int n> | |
| v_reg< typename V_TypeTraits< _Tp >::q_type, n/4 > | cv::v_dotprod_expand_fast (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b, const v_reg< typename V_TypeTraits< _Tp >::q_type, n/4 > &c) |
| 要素の高速内積。 | |
| template<int n> | |
| v_reg< double, n/2 > | cv::v_dotprod_expand_fast (const v_reg< int, n > &a, const v_reg< int, n > &b) |
| template<int n> | |
| v_reg< double, n/2 > | cv::v_dotprod_expand_fast (const v_reg< int, n > &a, const v_reg< int, n > &b, const v_reg< double, n/2 > &c) |
| template<typename _Tp , int n> | |
| v_reg< typename V_TypeTraits< _Tp >::w_type, n/2 > | cv::v_dotprod_fast (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
| 要素の高速内積。 | |
| template<typename _Tp , int n> | |
| v_reg< typename V_TypeTraits< _Tp >::w_type, n/2 > | cv::v_dotprod_fast (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b, const v_reg< typename V_TypeTraits< _Tp >::w_type, n/2 > &c) |
| 要素の高速内積。 | |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_eq (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
| 等価比較。 | |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_erf (const v_reg< _Tp, n > &a) |
| Error 関数。 | |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_exp (const v_reg< _Tp, n > &a) |
| 要素の指数関数 \( e^x \)。 | |
| template<typename _Tp , int n> | |
| void | cv::v_expand (const v_reg< _Tp, n > &a, v_reg< typename V_TypeTraits< _Tp >::w_type, n/2 > &b0, v_reg< typename V_TypeTraits< _Tp >::w_type, n/2 > &b1) |
| 値をより幅広いパック型へ展開する。 | |
| template<typename _Tp , int n> | |
| v_reg< typename V_TypeTraits< _Tp >::w_type, n/2 > | cv::v_expand_high (const v_reg< _Tp, n > &a) |
| 上位の値をより幅広いパック型へ展開する。 | |
| template<typename _Tp , int n> | |
| v_reg< typename V_TypeTraits< _Tp >::w_type, n/2 > | cv::v_expand_low (const v_reg< _Tp, n > &a) |
| 下位の値をより幅広いパック型へ展開する。 | |
| template<int s, typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_extract (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
| ベクトルの抽出。 | |
| template<int s, typename _Tp , int n> | |
| _Tp | cv::v_extract_n (const v_reg< _Tp, n > &v) |
| ベクトルの抽出。 | |
| template<int n> | |
| v_reg< int, n *2 > | cv::v_floor (const v_reg< double, n > &a) |
| template<int n> | |
| v_reg< int, n > | cv::v_floor (const v_reg< float, n > &a) |
| 要素の切り捨て。 | |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_fma (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b, const v_reg< _Tp, n > &c) |
| 乗算して加算する。 | |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_ge (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
| 以上の比較。 | |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_gt (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
| より大きいかの比較。 | |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_interleave_pairs (const v_reg< _Tp, n > &vec) |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_interleave_quads (const v_reg< _Tp, n > &vec) |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_invsqrt (const v_reg< _Tp, n > &a) |
| 逆平方根。 | |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_le (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
| 以下の比較。 | |
| template<typename _Tp > | |
| v_reg< _Tp, simd128_width/sizeof(_Tp)> | cv::v_load (const _Tp *ptr) |
| メモリからレジスタ内容をロードする。 | |
| template<typename _Tp > | |
| v_reg< _Tp, simd128_width/sizeof(_Tp)> | cv::v_load_aligned (const _Tp *ptr) |
| メモリからレジスタ内容をロードする(アラインメント済み) | |
| template<typename _Tp , int n> | |
| void | cv::v_load_deinterleave (const _Tp *ptr, v_reg< _Tp, n > &a, v_reg< _Tp, n > &b) |
| ロードしてデインターリーブする(2チャンネル) | |
| template<typename _Tp , int n> | |
| void | cv::v_load_deinterleave (const _Tp *ptr, v_reg< _Tp, n > &a, v_reg< _Tp, n > &b, v_reg< _Tp, n > &c) |
| ロードしてデインターリーブする(3チャンネル) | |
| template<typename _Tp , int n> | |
| void | cv::v_load_deinterleave (const _Tp *ptr, v_reg< _Tp, n > &a, v_reg< _Tp, n > &b, v_reg< _Tp, n > &c, v_reg< _Tp, n > &d) |
| ロードしてデインターリーブする(4チャンネル) | |
| template<typename _Tp > | |
| v_reg< typename V_TypeTraits< _Tp >::w_type, simd128_width/sizeof(typename V_TypeTraits< _Tp >::w_type)> | cv::v_load_expand (const _Tp *ptr) |
| メモリからレジスタ内容を倍展開してロードする。 | |
| v_reg< float, simd128_width/sizeof(float)> | cv::v_load_expand (const hfloat *ptr) |
| template<typename _Tp > | |
| v_reg< typename V_TypeTraits< _Tp >::q_type, simd128_width/sizeof(typename V_TypeTraits< _Tp >::q_type)> | cv::v_load_expand_q (const _Tp *ptr) |
| メモリからレジスタ内容を4倍展開してロードする。 | |
| template<typename _Tp > | |
| v_reg< _Tp, simd128_width/sizeof(_Tp)> | cv::v_load_halves (const _Tp *loptr, const _Tp *hiptr) |
| 2つのメモリブロックからレジスタ内容をロードする。 | |
| template<typename _Tp > | |
| v_reg< _Tp, simd128_width/sizeof(_Tp)> | cv::v_load_low (const _Tp *ptr) |
| 64ビットのデータを下位部分にロードする(上位部分は未定義)。 | |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_log (const v_reg< _Tp, n > &a) |
| 要素の自然対数 \( \log(x) \)。 | |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_lt (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
| 未満の比較。 | |
| template<typename _Tp > | |
| v_reg< _Tp, simd128_width/sizeof(_Tp)> | cv::v_lut (const _Tp *tab, const int *idx) |
| template<int n> | |
| v_reg< double, n/2 > | cv::v_lut (const double *tab, const v_reg< int, n > &idx) |
| template<int n> | |
| v_reg< float, n > | cv::v_lut (const float *tab, const v_reg< int, n > &idx) |
| template<int n> | |
| v_reg< int, n > | cv::v_lut (const int *tab, const v_reg< int, n > &idx) |
| template<int n> | |
| v_reg< unsigned, n > | cv::v_lut (const unsigned *tab, const v_reg< int, n > &idx) |
| template<int n> | |
| void | cv::v_lut_deinterleave (const double *tab, const v_reg< int, n *2 > &idx, v_reg< double, n > &x, v_reg< double, n > &y) |
| template<int n> | |
| void | cv::v_lut_deinterleave (const float *tab, const v_reg< int, n > &idx, v_reg< float, n > &x, v_reg< float, n > &y) |
| template<typename _Tp > | |
| v_reg< _Tp, simd128_width/sizeof(_Tp)> | cv::v_lut_pairs (const _Tp *tab, const int *idx) |
| template<typename _Tp > | |
| v_reg< _Tp, simd128_width/sizeof(_Tp)> | cv::v_lut_quads (const _Tp *tab, const int *idx) |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_magnitude (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
| 大きさ。 | |
| template<int n> | |
| v_reg< float, n > | cv::v_matmul (const v_reg< float, n > &v, const v_reg< float, n > &a, const v_reg< float, n > &b, const v_reg< float, n > &c, const v_reg< float, n > &d) |
| 行列の乗算。 | |
| template<int n> | |
| v_reg< float, n > | cv::v_matmuladd (const v_reg< float, n > &v, const v_reg< float, n > &a, const v_reg< float, n > &b, const v_reg< float, n > &c, const v_reg< float, n > &d) |
| 行列の乗算と加算。 | |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_max (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
| 各ペアの最大値を選択する。 | |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_min (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
| 各ペアの最小値を選択する。 | |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_mul (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
| 値を乗算する。 | |
| template<typename _Tp , int n> | |
| void | cv::v_mul_expand (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b, v_reg< typename V_TypeTraits< _Tp >::w_type, n/2 > &c, v_reg< typename V_TypeTraits< _Tp >::w_type, n/2 > &d) |
| 乗算して拡張する。 | |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_mul_hi (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
| 乗算して上位部分を取り出す。 | |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_mul_wrap (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
| 飽和なしで値を乗算する。 | |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_muladd (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b, const v_reg< _Tp, n > &c) |
| v_fma の別名。 | |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_ne (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
| 非等価の比較。 | |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_not (const v_reg< _Tp, n > &a) |
| ビットごとのNOT。 | |
| template<int n> | |
| v_reg< double, n > | cv::v_not_nan (const v_reg< double, n > &a) |
| template<int n> | |
| v_reg< float, n > | cv::v_not_nan (const v_reg< float, n > &a) |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_or (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
| ビットごとのOR。 | |
| template<int n> | |
| void | cv::v_pack_store (hfloat *ptr, const v_reg< float, n > &v) |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_pack_triplets (const v_reg< _Tp, n > &vec) |
| template<typename _Tp , int n> | |
| v_reg< typename V_TypeTraits< _Tp >::abs_type, n > | cv::v_popcount (const v_reg< _Tp, n > &a) |
| ベクトルの各レーン内の1のビット数を数え、対応する符号なし型として結果を返す。 | |
| template<typename _Tp , int n> | |
| void | cv::v_recombine (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b, v_reg< _Tp, n > &low, v_reg< _Tp, n > &high) |
| 2つの別のベクトルの下位部分と上位部分から2つのベクトルを結合する。 | |
| template<typename _Tp , int n> | |
| _Tp | cv::v_reduce_max (const v_reg< _Tp, n > &a) |
| 1つの最大値を求める。 | |
| template<typename _Tp , int n> | |
| _Tp | cv::v_reduce_min (const v_reg< _Tp, n > &a) |
| 1つの最小値を求める。 | |
| template<typename _Tp , int n> | |
| V_TypeTraits< typenameV_TypeTraits< _Tp >::abs_type >::sum_type | cv::v_reduce_sad (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
| 値の絶対差の総和を求める。 | |
| template<typename _Tp , int n> | |
| V_TypeTraits< _Tp >::sum_type | cv::v_reduce_sum (const v_reg< _Tp, n > &a) |
| パックされた値を合計する。 | |
| template<int n> | |
| v_reg< float, n > | cv::v_reduce_sum4 (const v_reg< float, n > &a, const v_reg< float, n > &b, const v_reg< float, n > &c, const v_reg< float, n > &d) |
| 各入力ベクトルのすべての要素を合計し、合計のベクトルを返す。 | |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_reverse (const v_reg< _Tp, n > &a) |
| ベクトルの順序を反転する。 | |
| template<int imm, typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_rotate_left (const v_reg< _Tp, n > &a) |
| ベクトル内で要素を左にシフトする。 | |
| template<int imm, typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_rotate_left (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
| template<int imm, typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_rotate_right (const v_reg< _Tp, n > &a) |
| ベクトル内で要素を右にシフトする。 | |
| template<int imm, typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_rotate_right (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
| template<int n> | |
| v_reg< int, n *2 > | cv::v_round (const v_reg< double, n > &a) |
| template<int n> | |
| v_reg< int, n *2 > | cv::v_round (const v_reg< double, n > &a, const v_reg< double, n > &b) |
| template<int n> | |
| v_reg< int, n > | cv::v_round (const v_reg< float, n > &a) |
| 要素を丸める。 | |
| template<typename _Tp , int n> | |
| int | cv::v_scan_forward (const v_reg< _Tp, n > &a) |
| 最初の負の値を持つレーンのインデックスを取得する。 | |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_select (const v_reg< _Tp, n > &mask, const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
| 要素ごとの選択 (ブレンド演算) | |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_shl (const v_reg< _Tp, n > &a, int imm) |
| ビットごとの左シフト。 | |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_shr (const v_reg< _Tp, n > &a, int imm) |
| ビットごとの右シフト。 | |
| template<typename _Tp , int n> | |
| int | cv::v_signmask (const v_reg< _Tp, n > &a) |
| 負の値のマスクを取得する。 | |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_sin (const v_reg< _Tp, n > &a) |
| 要素の正弦 \( sin(x) \)。 | |
| template<typename _Tp , int n> | |
| void | cv::v_sincos (const v_reg< _Tp, n > &x, v_reg< _Tp, n > &s, v_reg< _Tp, n > &c) |
| 要素の正弦 \( sin(x) \) と余弦 \( cos(x) \) を同時に計算する。 | |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_sqr_magnitude (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
| 大きさの2乗。 | |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_sqrt (const v_reg< _Tp, n > &a) |
| 要素の平方根。 | |
| template<typename _Tp , int n> | |
| void | cv::v_store (_Tp *ptr, const v_reg< _Tp, n > &a) |
| データをメモリに格納する。 | |
| template<typename _Tp , int n> | |
| void | cv::v_store (_Tp *ptr, const v_reg< _Tp, n > &a, hal::StoreMode) |
| template<typename _Tp , int n> | |
| void | cv::v_store_aligned (_Tp *ptr, const v_reg< _Tp, n > &a) |
| データをメモリに格納する (アライメント済み) | |
| template<typename _Tp , int n> | |
| void | cv::v_store_aligned (_Tp *ptr, const v_reg< _Tp, n > &a, hal::StoreMode) |
| template<typename _Tp , int n> | |
| void | cv::v_store_aligned_nocache (_Tp *ptr, const v_reg< _Tp, n > &a) |
| template<typename _Tp , int n> | |
| void | cv::v_store_high (_Tp *ptr, const v_reg< _Tp, n > &a) |
| データをメモリに格納する (上位半分) | |
| template<typename _Tp , int n> | |
| void | cv::v_store_interleave (_Tp *ptr, const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b, const v_reg< _Tp, n > &c, const v_reg< _Tp, n > &d, hal::StoreMode=hal::STORE_UNALIGNED) |
| インターリーブして格納する (4チャンネル) | |
| template<typename _Tp , int n> | |
| void | cv::v_store_interleave (_Tp *ptr, const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b, const v_reg< _Tp, n > &c, hal::StoreMode=hal::STORE_UNALIGNED) |
| インターリーブして格納する (3チャンネル) | |
| template<typename _Tp , int n> | |
| void | cv::v_store_interleave (_Tp *ptr, const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b, hal::StoreMode=hal::STORE_UNALIGNED) |
| インターリーブして格納する (2チャンネル) | |
| template<typename _Tp , int n> | |
| void | cv::v_store_low (_Tp *ptr, const v_reg< _Tp, n > &a) |
| データをメモリに格納する (下位半分) | |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_sub (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
| 値を減算する。 | |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_sub_wrap (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
| 飽和なしで値を減算する。 | |
| template<typename _Tp , int n> | |
| void | cv::v_transpose4x4 (v_reg< _Tp, n > &a0, const v_reg< _Tp, n > &a1, const v_reg< _Tp, n > &a2, const v_reg< _Tp, n > &a3, v_reg< _Tp, n > &b0, v_reg< _Tp, n > &b1, v_reg< _Tp, n > &b2, v_reg< _Tp, n > &b3) |
| 4x4行列を転置する。 | |
| template<int n> | |
| v_reg< int, n *2 > | cv::v_trunc (const v_reg< double, n > &a) |
| template<int n> | |
| v_reg< int, n > | cv::v_trunc (const v_reg< float, n > &a) |
| 要素を切り捨てる。 | |
| template<typename _Tp , int n> | |
| v_reg< _Tp, n > | cv::v_xor (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
| ビットごとのXOR。 | |
| template<typename _Tp , int n> | |
| void | cv::v_zip (const v_reg< _Tp, n > &a0, const v_reg< _Tp, n > &a1, v_reg< _Tp, n > &b0, v_reg< _Tp, n > &b1) |
| 2つのベクトルをインターリーブする。 | |
変数 | |
| static const unsigned char | cv::popCountTable [] |
Reinterpret | |
基となるデータを変更せずにベクトルを別の型に変換する。 | |
| template<typename _Tp0 , int n0> | |
| v_reg< uchar, n0 *sizeof(_Tp0)/sizeof(uchar)> | cv::v_reinterpret_as_u8 (const v_reg< _Tp0, n0 > &a) |
| template<typename _Tp0 , int n0> | |
| v_reg< schar, n0 *sizeof(_Tp0)/sizeof(schar)> | cv::v_reinterpret_as_s8 (const v_reg< _Tp0, n0 > &a) |
| template<typename _Tp0 , int n0> | |
| v_reg< ushort, n0 *sizeof(_Tp0)/sizeof(ushort)> | cv::v_reinterpret_as_u16 (const v_reg< _Tp0, n0 > &a) |
| template<typename _Tp0 , int n0> | |
| v_reg< short, n0 *sizeof(_Tp0)/sizeof(short)> | cv::v_reinterpret_as_s16 (const v_reg< _Tp0, n0 > &a) |
| template<typename _Tp0 , int n0> | |
| v_reg< unsigned, n0 *sizeof(_Tp0)/sizeof(unsigned)> | cv::v_reinterpret_as_u32 (const v_reg< _Tp0, n0 > &a) |
| template<typename _Tp0 , int n0> | |
| v_reg< int, n0 *sizeof(_Tp0)/sizeof(int)> | cv::v_reinterpret_as_s32 (const v_reg< _Tp0, n0 > &a) |
| template<typename _Tp0 , int n0> | |
| v_reg< float, n0 *sizeof(_Tp0)/sizeof(float)> | cv::v_reinterpret_as_f32 (const v_reg< _Tp0, n0 > &a) |
| template<typename _Tp0 , int n0> | |
| v_reg< double, n0 *sizeof(_Tp0)/sizeof(double)> | cv::v_reinterpret_as_f64 (const v_reg< _Tp0, n0 > &a) |
| template<typename _Tp0 , int n0> | |
| v_reg< uint64, n0 *sizeof(_Tp0)/sizeof(uint64)> | cv::v_reinterpret_as_u64 (const v_reg< _Tp0, n0 > &a) |
| template<typename _Tp0 , int n0> | |
| v_reg< int64, n0 *sizeof(_Tp0)/sizeof(int64)> | cv::v_reinterpret_as_s64 (const v_reg< _Tp0, n0 > &a) |
Left shift | |
左シフト | |
| template<int shift, int n> | |
| v_reg< ushort, n > | cv::v_shl (const v_reg< ushort, n > &a) |
| template<int shift, int n> | |
| v_reg< short, n > | cv::v_shl (const v_reg< short, n > &a) |
| template<int shift, int n> | |
| v_reg< unsigned, n > | cv::v_shl (const v_reg< unsigned, n > &a) |
| template<int shift, int n> | |
| v_reg< int, n > | cv::v_shl (const v_reg< int, n > &a) |
| template<int shift, int n> | |
| v_reg< uint64, n > | cv::v_shl (const v_reg< uint64, n > &a) |
| template<int shift, int n> | |
| v_reg< int64, n > | cv::v_shl (const v_reg< int64, n > &a) |
Right shift | |
右シフト | |
| template<int shift, int n> | |
| v_reg< ushort, n > | cv::v_shr (const v_reg< ushort, n > &a) |
| template<int shift, int n> | |
| v_reg< short, n > | cv::v_shr (const v_reg< short, n > &a) |
| template<int shift, int n> | |
| v_reg< unsigned, n > | cv::v_shr (const v_reg< unsigned, n > &a) |
| template<int shift, int n> | |
| v_reg< int, n > | cv::v_shr (const v_reg< int, n > &a) |
| template<int shift, int n> | |
| v_reg< uint64, n > | cv::v_shr (const v_reg< uint64, n > &a) |
| template<int shift, int n> | |
| v_reg< int64, n > | cv::v_shr (const v_reg< int64, n > &a) |
Rounding shift | |
丸めを伴う右シフト | |
| template<int shift, int n> | |
| v_reg< ushort, n > | cv::v_rshr (const v_reg< ushort, n > &a) |
| template<int shift, int n> | |
| v_reg< short, n > | cv::v_rshr (const v_reg< short, n > &a) |
| template<int shift, int n> | |
| v_reg< unsigned, n > | cv::v_rshr (const v_reg< unsigned, n > &a) |
| template<int shift, int n> | |
| v_reg< int, n > | cv::v_rshr (const v_reg< int, n > &a) |
| template<int shift, int n> | |
| v_reg< uint64, n > | cv::v_rshr (const v_reg< uint64, n > &a) |
| template<int shift, int n> | |
| v_reg< int64, n > | cv::v_rshr (const v_reg< int64, n > &a) |
Pack | |
2つのベクトルの値を1つにパックする 入力ベクトル型の2倍の要素数を持つベクトル型を返す。u サフィックス付きの変種は、対応する符号なし型にも変換する。
| |
| template<int n> | |
| v_reg< uchar, 2 *n > | cv::v_pack (const v_reg< ushort, n > &a, const v_reg< ushort, n > &b) |
| template<int n> | |
| v_reg< schar, 2 *n > | cv::v_pack (const v_reg< short, n > &a, const v_reg< short, n > &b) |
| template<int n> | |
| v_reg< ushort, 2 *n > | cv::v_pack (const v_reg< unsigned, n > &a, const v_reg< unsigned, n > &b) |
| template<int n> | |
| v_reg< short, 2 *n > | cv::v_pack (const v_reg< int, n > &a, const v_reg< int, n > &b) |
| template<int n> | |
| v_reg< unsigned, 2 *n > | cv::v_pack (const v_reg< uint64, n > &a, const v_reg< uint64, n > &b) |
| template<int n> | |
| v_reg< int, 2 *n > | cv::v_pack (const v_reg< int64, n > &a, const v_reg< int64, n > &b) |
| template<int n> | |
| v_reg< uchar, 2 *n > | cv::v_pack_u (const v_reg< short, n > &a, const v_reg< short, n > &b) |
| template<int n> | |
| v_reg< ushort, 2 *n > | cv::v_pack_u (const v_reg< int, n > &a, const v_reg< int, n > &b) |
Pack with rounding shift | |
2つのベクトルの値を、丸めを伴う右シフトで1つにパックする 入力ベクトルの値は丸めを伴って n ビット右にシフトされ、より狭い型に変換されて結果ベクトルとして返される。u サフィックス付きの変種は符号なし型に変換する。
| |
| template<int shift, int n> | |
| v_reg< uchar, 2 *n > | cv::v_rshr_pack (const v_reg< ushort, n > &a, const v_reg< ushort, n > &b) |
| template<int shift, int n> | |
| v_reg< schar, 2 *n > | cv::v_rshr_pack (const v_reg< short, n > &a, const v_reg< short, n > &b) |
| template<int shift, int n> | |
| v_reg< ushort, 2 *n > | cv::v_rshr_pack (const v_reg< unsigned, n > &a, const v_reg< unsigned, n > &b) |
| template<int shift, int n> | |
| v_reg< short, 2 *n > | cv::v_rshr_pack (const v_reg< int, n > &a, const v_reg< int, n > &b) |
| template<int shift, int n> | |
| v_reg< unsigned, 2 *n > | cv::v_rshr_pack (const v_reg< uint64, n > &a, const v_reg< uint64, n > &b) |
| template<int shift, int n> | |
| v_reg< int, 2 *n > | cv::v_rshr_pack (const v_reg< int64, n > &a, const v_reg< int64, n > &b) |
| template<int shift, int n> | |
| v_reg< uchar, 2 *n > | cv::v_rshr_pack_u (const v_reg< short, n > &a, const v_reg< short, n > &b) |
| template<int shift, int n> | |
| v_reg< ushort, 2 *n > | cv::v_rshr_pack_u (const v_reg< int, n > &a, const v_reg< int, n > &b) |
Pack and store | |
入力ベクトルの値をパックしてメモリに格納する 値はより狭い型に変換されてメモリに格納される。u サフィックス付きの変種は、対応する符号なし型に変換する。
| |
| template<int n> | |
| void | cv::v_pack_store (uchar *ptr, const v_reg< ushort, n > &a) |
| template<int n> | |
| void | cv::v_pack_store (schar *ptr, const v_reg< short, n > &a) |
| template<int n> | |
| void | cv::v_pack_store (ushort *ptr, const v_reg< unsigned, n > &a) |
| template<int n> | |
| void | cv::v_pack_store (short *ptr, const v_reg< int, n > &a) |
| template<int n> | |
| void | cv::v_pack_store (unsigned *ptr, const v_reg< uint64, n > &a) |
| template<int n> | |
| void | cv::v_pack_store (int *ptr, const v_reg< int64, n > &a) |
| template<int n> | |
| void | cv::v_pack_u_store (uchar *ptr, const v_reg< short, n > &a) |
| template<int n> | |
| void | cv::v_pack_u_store (ushort *ptr, const v_reg< int, n > &a) |
Pack and store with rounding shift | |
入力ベクトルの値をパックしてメモリに格納する 値は丸めを伴って n ビット右にシフトされ、より狭い型に変換されてメモリに格納される。u サフィックス付きの変種は符号なし型に変換する。
| |
| template<int shift, int n> | |
| void | cv::v_rshr_pack_store (uchar *ptr, const v_reg< ushort, n > &a) |
| template<int shift, int n> | |
| void | cv::v_rshr_pack_store (schar *ptr, const v_reg< short, n > &a) |
| template<int shift, int n> | |
| void | cv::v_rshr_pack_store (ushort *ptr, const v_reg< unsigned, n > &a) |
| template<int shift, int n> | |
| void | cv::v_rshr_pack_store (short *ptr, const v_reg< int, n > &a) |
| template<int shift, int n> | |
| void | cv::v_rshr_pack_store (unsigned *ptr, const v_reg< uint64, n > &a) |
| template<int shift, int n> | |
| void | cv::v_rshr_pack_store (int *ptr, const v_reg< int64, n > &a) |
| template<int shift, int n> | |
| void | cv::v_rshr_pack_u_store (uchar *ptr, const v_reg< short, n > &a) |
| template<int shift, int n> | |
| void | cv::v_rshr_pack_u_store (ushort *ptr, const v_reg< int, n > &a) |
Pack boolean values | |
複数のベクトルのブール値を1つの符号なし8ビット整数ベクトルにパックする
| |
| template<int n> | |
| v_reg< uchar, 2 *n > | cv::v_pack_b (const v_reg< ushort, n > &a, const v_reg< ushort, n > &b) |
| ! 16ビットのブール値用 | |
| template<int n> | |
| v_reg< uchar, 4 *n > | cv::v_pack_b (const v_reg< unsigned, n > &a, const v_reg< unsigned, n > &b, const v_reg< unsigned, n > &c, const v_reg< unsigned, n > &d) |
| template<int n> | |
| v_reg< uchar, 8 *n > | cv::v_pack_b (const v_reg< uint64, n > &a, const v_reg< uint64, n > &b, const v_reg< uint64, n > &c, const v_reg< uint64, n > &d, const v_reg< uint64, n > &e, const v_reg< uint64, n > &f, const v_reg< uint64, n > &g, const v_reg< uint64, n > &h) |
| #define OPENCV_HAL_MATH_HAVE_EXP 1 |
#include <opencv2/core/hal/intrin_cpp.hpp>
| typedef v_float32x16 simd512::v_float32 |
#include <opencv2/core/hal/intrin.hpp>
利用可能な最大のベクトルレジスタ容量での32ビット浮動小数点値 (単精度)
| typedef v_reg<float, 16> cv::v_float32x16 |
#include <opencv2/core/hal/intrin_cpp.hpp>
16個の32ビット浮動小数点値 (単精度)
| typedef v_reg<float, 4> cv::v_float32x4 |
#include <opencv2/core/hal/intrin_cpp.hpp>
4個の32ビット浮動小数点値 (単精度)
| typedef v_reg<float, 8> cv::v_float32x8 |
#include <opencv2/core/hal/intrin_cpp.hpp>
8個の32ビット浮動小数点値 (単精度)
| typedef v_float64x8 simd512::v_float64 |
#include <opencv2/core/hal/intrin.hpp>
利用可能な最大のベクトルレジスタ容量での64ビット浮動小数点値 (倍精度)
| typedef v_reg<double, 2> cv::v_float64x2 |
#include <opencv2/core/hal/intrin_cpp.hpp>
2個の64ビット浮動小数点値(倍精度)
| typedef v_reg<double, 4> cv::v_float64x4 |
#include <opencv2/core/hal/intrin_cpp.hpp>
4個の64ビット浮動小数点値(倍精度)
| typedef v_reg<double, 8> cv::v_float64x8 |
#include <opencv2/core/hal/intrin_cpp.hpp>
8個の64ビット浮動小数点値(倍精度)
| typedef v_int16x32 simd512::v_int16 |
#include <opencv2/core/hal/intrin.hpp>
利用可能な最大ベクトルレジスタ容量の16ビット符号付き整数値。
| typedef v_reg<short, 16> cv::v_int16x16 |
#include <opencv2/core/hal/intrin_cpp.hpp>
16個の16ビット符号付き整数値。
| typedef v_reg<short, 32> cv::v_int16x32 |
#include <opencv2/core/hal/intrin_cpp.hpp>
32個の16ビット符号付き整数値。
| typedef v_reg<short, 8> cv::v_int16x8 |
#include <opencv2/core/hal/intrin_cpp.hpp>
8個の16ビット符号付き整数値。
| typedef v_int32x16 simd512::v_int32 |
#include <opencv2/core/hal/intrin.hpp>
利用可能な最大ベクトルレジスタ容量の32ビット符号付き整数値。
| typedef v_reg<int, 16> cv::v_int32x16 |
#include <opencv2/core/hal/intrin_cpp.hpp>
16個の32ビット符号付き整数値。
| typedef v_reg<int, 4> cv::v_int32x4 |
#include <opencv2/core/hal/intrin_cpp.hpp>
4個の32ビット符号付き整数値。
| typedef v_reg<int, 8> cv::v_int32x8 |
#include <opencv2/core/hal/intrin_cpp.hpp>
8個の32ビット符号付き整数値。
| typedef v_int64x8 simd512::v_int64 |
#include <opencv2/core/hal/intrin.hpp>
利用可能な最大ベクトルレジスタ容量の64ビット符号付き整数値。
| typedef v_reg<int64, 2> cv::v_int64x2 |
#include <opencv2/core/hal/intrin_cpp.hpp>
2個の64ビット符号付き整数値。
| typedef v_reg<int64, 4> cv::v_int64x4 |
#include <opencv2/core/hal/intrin_cpp.hpp>
4個の64ビット符号付き整数値。
| typedef v_reg<int64, 8> cv::v_int64x8 |
#include <opencv2/core/hal/intrin_cpp.hpp>
8個の64ビット符号付き整数値。
| typedef v_int8x64 simd512::v_int8 |
#include <opencv2/core/hal/intrin.hpp>
利用可能な最大ベクトルレジスタ容量の8ビット符号付き整数値。
| typedef v_reg<schar, 16> cv::v_int8x16 |
#include <opencv2/core/hal/intrin_cpp.hpp>
16個の8ビット符号付き整数値。
| typedef v_reg<schar, 32> cv::v_int8x32 |
#include <opencv2/core/hal/intrin_cpp.hpp>
32個の8ビット符号付き整数値。
| typedef v_reg<schar, 64> cv::v_int8x64 |
#include <opencv2/core/hal/intrin_cpp.hpp>
64個の8ビット符号付き整数値。
| typedef v_uint16x32 simd512::v_uint16 |
#include <opencv2/core/hal/intrin.hpp>
利用可能な最大ベクトルレジスタ容量の16ビット符号なし整数値。
| typedef v_reg<ushort, 16> cv::v_uint16x16 |
#include <opencv2/core/hal/intrin_cpp.hpp>
16個の16ビット符号なし整数値。
| typedef v_reg<ushort, 32> cv::v_uint16x32 |
#include <opencv2/core/hal/intrin_cpp.hpp>
32個の16ビット符号なし整数値。
| typedef v_reg<ushort, 8> cv::v_uint16x8 |
#include <opencv2/core/hal/intrin_cpp.hpp>
8個の16ビット符号なし整数値。
| typedef v_uint32x16 simd512::v_uint32 |
#include <opencv2/core/hal/intrin.hpp>
利用可能な最大ベクトルレジスタ容量の32ビット符号なし整数値。
| typedef v_reg<unsigned, 16> cv::v_uint32x16 |
#include <opencv2/core/hal/intrin_cpp.hpp>
16個の32ビット符号なし整数値。
| typedef v_reg<unsigned, 4> cv::v_uint32x4 |
#include <opencv2/core/hal/intrin_cpp.hpp>
4個の32ビット符号なし整数値。
| typedef v_reg<unsigned, 8> cv::v_uint32x8 |
#include <opencv2/core/hal/intrin_cpp.hpp>
8個の32ビット符号なし整数値。
| typedef v_uint64x8 simd512::v_uint64 |
#include <opencv2/core/hal/intrin.hpp>
利用可能な最大ベクトルレジスタ容量の64ビット符号なし整数値。
| typedef v_reg<uint64, 2> cv::v_uint64x2 |
#include <opencv2/core/hal/intrin_cpp.hpp>
2個の64ビット符号なし整数値。
| typedef v_reg<uint64, 4> cv::v_uint64x4 |
#include <opencv2/core/hal/intrin_cpp.hpp>
4個の64ビット符号なし整数値。
| typedef v_reg<uint64, 8> cv::v_uint64x8 |
#include <opencv2/core/hal/intrin_cpp.hpp>
8個の64ビット符号なし整数値。
| typedef v_uint8x64 simd512::v_uint8 |
#include <opencv2/core/hal/intrin.hpp>
利用可能な最大ベクトルレジスタ容量の8ビット符号なし整数値。
| typedef v_reg<uchar, 16> cv::v_uint8x16 |
#include <opencv2/core/hal/intrin_cpp.hpp>
16個の8ビット符号なし整数値。
| typedef v_reg<uchar, 32> cv::v_uint8x32 |
#include <opencv2/core/hal/intrin_cpp.hpp>
32個の8ビット符号なし整数値。
| typedef v_reg<uchar, 64> cv::v_uint8x64 |
#include <opencv2/core/hal/intrin_cpp.hpp>
64個の8ビット符号なし整数値。
| anonymous enum |
#include <opencv2/core/hal/intrin_cpp.hpp>
| 列挙値 | |
|---|---|
| simd128_width | |
| simd256_width | |
| simd512_width | |
| simdmax_width | |
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
メモリから256ビット長のレジスタ内容をロードする。
| ptr | データを格納したメモリブロックへのポインタ |
sizeof(lane type) で十分なはず)。ポインタのアライメントを実行時にチェックせずにポインタ型をキャストしてはならない(例: uchar* => int*)。
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
メモリからレジスタ内容をロードする(アライメント済み)
cv::v256_load に似ているが、ソースメモリブロックはアライメントされていなければならない(SIMD256 の場合は32バイト境界、SIMD512 の場合は64バイトなど)
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
メモリからレジスタ内容を2倍に拡張してロードする。
cv::v256_load と同じだが、結果のパック型はメモリの型より2倍幅広くなる。
8、16、32ビット整数のソース型向け。
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
メモリからレジスタ内容を4倍に拡張してロードする。
cv::v256_load_expand と同じだが、結果の型はソースより4倍幅広くなる。
8ビット整数のソース型向け。
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
2つのメモリブロックからレジスタ内容をロードする。
| loptr | 前半 (0..n/2) のデータを含むメモリブロック |
| hiptr | 後半 (n/2..n) のデータを含むメモリブロック |
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
128ビットのデータを下位部分にロードする(上位部分は未定義)。
| ptr | 前半 (0..n/2) のデータを含むメモリブロック |
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
メモリから512ビット長のレジスタ内容をロードする。
| ptr | データを格納したメモリブロックへのポインタ |
sizeof(lane type) で十分なはず)。ポインタのアライメントを実行時にチェックせずにポインタ型をキャストしてはならない(例: uchar* => int*)。
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
メモリからレジスタ内容をロードする(アライメント済み)
cv::v512_load に似ているが、ソースメモリブロックはアライメントされていなければならない(SIMD512 の場合は64バイト境界など)
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
メモリからレジスタ内容を2倍に拡張してロードする。
cv::v512_load と同じだが、結果のパック型はメモリの型より2倍幅広くなる。
8、16、32ビット整数のソース型向け。
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
メモリからレジスタ内容を4倍に拡張してロードする。
cv::v512_load_expand と同じだが、結果の型はソースより4倍幅広くなる。
8ビット整数のソース型向け。
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
2つのメモリブロックからレジスタ内容をロードする。
| loptr | 前半 (0..n/2) のデータを含むメモリブロック |
| hiptr | 後半 (n/2..n) のデータを含むメモリブロック |
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
256ビットのデータを下位部分にロードする(上位部分は未定義)。
| ptr | 前半 (0..n/2) のデータを含むメモリブロック |
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
絶対差。
対応する符号なし型に変換した \( |a - b| \) を返す。例:
8、16、32ビット整数のソース型向け。
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
64ビット浮動小数点値向け
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
32ビット浮動小数点値向け
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
飽和演算による絶対差。
\( saturate(|a - b|) \) を返す。8、16ビット符号付き整数のソース型向け。
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
ベクトルの i 番目の要素をブロードキャストする。
模式図:
制約: 0 <= i < nlanes サポートされる型: 32ビット整数および浮動小数点数 (s32/u32/f32)
#include <opencv2/core/hal/intrin_cpp.hpp>
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
#include <opencv2/core/hal/intrin_cpp.hpp>
要素を切り上げる。
各値を切り上げる。入力型は float ベクトル ==> 出力型は int ベクトル。
#include <opencv2/core/hal/intrin_cpp.hpp>
パックされた全ての値が0未満かどうかを判定する。
符号なし値は符号付きにキャストされる: uchar 254 => char -2。
#include <opencv2/core/hal/intrin_cpp.hpp>
パックされた値のいずれかが0未満かどうかを判定する。
符号なし値は符号付きにキャストされる: uchar 254 => char -2。
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
2つのベクトルの末尾要素からベクトルを合成する。
模式図:
64ビットを除く全ての型に対応。
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
2つのベクトルの先頭要素からベクトルを合成する。
模式図:
64ビットを除く全ての型に対応。
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
要素のドット積。
2つのレジスタの値を乗算し、隣接する結果のペアを加算する。
模式図:
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
要素のドット積。
cv::v_dotprod と同じだが、隣接ペアの和に第3の要素を加える。模式図:
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
要素のドット積と拡張。
2つのレジスタの値を乗算し、隣接する結果のペアの和を拡張する。
模式図:
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
要素のドット積。
cv::v_dotprod_expand と同じだが、隣接ペアの和に第3の要素を加える。模式図:
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
要素の高速ドット積と拡張。
2つのレジスタの値を乗算し、隣接する結果のペアの和を拡張する。
cv::v_dotprod_expand と同じだが、一部のプラットフォームでは結果ペア間の和を順序を問わず計算する場合がある。全レーンの総和のみが重要な場合にこの組み込み関数を使用でき、対象プラットフォームでより良い性能をもたらすはずである。
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
要素の高速ドット積。
cv::v_dotprod_expand_fast と同じだが、隣接ペアの和に第3の要素を加える。
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
要素の高速ドット積。
cv::v_dotprod と同じだが、一部のプラットフォームでは結果ペア間の和を順序を問わず計算する場合がある。全レーンの総和のみが重要な場合にこの組み込み関数を使用でき、対象プラットフォームでより良い性能をもたらすはずである。
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
要素の高速ドット積。
cv::v_dotprod_fast と同じだが、隣接ペアの和に第3の要素を加える。
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
等価比較。
#include <opencv2/core/hal/intrin_cpp.hpp>
要素の指数 \( e^x \)。
浮動小数点型のみ。中核となる実装の手順:
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
値をより幅の広いパック型に拡張する。
レジスタの内容を、2倍幅のパック型を持つ2つのレジスタにコピーする。模式図:
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
上位の値をより幅の広いパック型に拡張する。
cv::v_expand_low と同じだが、ベクトルの上位半分を拡張する。
模式図:
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
下位の値をより幅の広いパック型に拡張する。
cv::v_expand と同じだが、ベクトルの下位半分を返す。
模式図:
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
ベクトルの抽出。
模式図:
制約: 0 <= shift < nlanes
使用例:
すべての型向け。
#include <opencv2/core/hal/intrin_cpp.hpp>
ベクトルの抽出。
模式図: v の s 番目の要素を返す。制約: 0 <= s < nlanes
使用例:
すべての型向け。
#include <opencv2/core/hal/intrin_cpp.hpp>
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
#include <opencv2/core/hal/intrin_cpp.hpp>
要素を切り捨てる。
各値を切り捨てる。入力型は float ベクトル ==> 出力型は int ベクトル。
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
メモリからレジスタの内容を読み込む。
| ptr | データを格納したメモリブロックへのポインタ |
sizeof(lane type) で十分なはず)。ポインタのアライメントを実行時にチェックせずにポインタ型をキャストしてはならない(例: uchar* => int*)。
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
メモリからレジスタ内容をロードする(アライメント済み)
cv::v_load と同様だが、ソースのメモリブロックはアライメントされている必要がある (SIMD128の場合は16バイト境界、SIMD256では32バイト、など)
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
読み込みとデインターリーブ (2チャンネル)
メモリからデータを読み込んでデインターリーブし、2つのレジスタに格納する。模式図:
64ビットを除く全ての型に対応。
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
読み込みとデインターリーブ (3チャンネル)
メモリからデータを読み込んでデインターリーブし、3つのレジスタに格納する。模式図:
64ビットを除く全ての型に対応。
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
読み込みとデインターリーブ (4チャンネル)
メモリからデータを読み込んでデインターリーブし、4つのレジスタに格納する。模式図:
64ビットを除く全ての型に対応。
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
メモリからレジスタ内容を2倍に拡張してロードする。
cv::v_load と同じだが、結果のパック型はメモリ型の2倍幅になる。
8、16、32ビット整数のソース型向け。
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
メモリからレジスタ内容を4倍に拡張してロードする。
cv::v_load_expand と同様だが、結果の型はソースの4倍の幅になる。
8ビット整数のソース型向け。
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
2つのメモリブロックからレジスタ内容をロードする。
| loptr | 前半 (0..n/2) のデータを含むメモリブロック |
| hiptr | 後半 (n/2..n) のデータを含むメモリブロック |
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
64ビットのデータを下位部分にロードする(上位部分は未定義)。
| ptr | 前半 (0..n/2) のデータを含むメモリブロック |
#include <opencv2/core/hal/intrin_cpp.hpp>
要素の自然対数 \( \log(x) \)。
浮動小数点型のみ。中核となる実装の手順:
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
行列の乗算。
模式図:
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
行列の乗算と加算。
模式図:
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
各ペアの最大値を選択する。
模式図:
64ビット整数を除くすべての型について。
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
各ペアの最小値を選択する。
模式図:
64ビット整数を除くすべての型について。
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
乗算して拡張する。
2つのレジスタの値を乗算し、より幅の広いパック型を持つ2つのレジスタに結果を格納する。模式図:
例:
16ビットおよび符号なし32ビットのソース型(v_int16x8, v_uint16x8, v_uint32x4)についてのみ実装されている。
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
乗算して上位部分を取り出す。
2つのレジスタの値を乗算し、結果の上位部分を格納する。16ビットのソース型(v_int16x8, v_uint16x8)についてのみ実装されている。\( a*b >> 16 \) を返す。
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
非等価の比較。
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
これはオーバーロードされたメンバ関数であり、利便性のために提供されている。上記の関数とは受け取る引数のみが異なる。64ビットのブール値について
模式図:
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
これはオーバーロードされたメンバ関数であり、利便性のために提供されている。上記の関数とは受け取る引数のみが異なる。32ビットのブール値について
模式図:
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
! 16ビットのブール値について
模式図:
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
ベクトルの各レーンの1のビット数を数え、対応する符号なし型として結果を返す。
模式図:
すべての整数型について。
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
他の2つのベクトルの下位部分と上位部分から2つのベクトルを合成する。
#include <opencv2/core/hal/intrin_cpp.hpp>
1つの最大値を求める。
模式図:
64ビット整数および64ビット浮動小数点型を除くすべての型について。
#include <opencv2/core/hal/intrin_cpp.hpp>
1つの最小値を求める。
模式図:
64ビット整数および64ビット浮動小数点型を除くすべての型について。
|
inline |
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
各入力ベクトルのすべての要素を合計し、その総和からなるベクトルを返す。
模式図:
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
ベクトルの順序を反転する。
ベクトルの順序を反転する。模式図:
すべての型向け。
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
#include <opencv2/core/hal/intrin_cpp.hpp>
要素を丸める。
各値を丸める。入力型は float ベクトル ==> 出力型は int ベクトル。
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
最初の負の値を持つレーンのインデックスを取得する。
戻り値は、最初の負の値を持つレーンのインデックスである(すべて正の値の入力に対しては未定義)。例:
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
要素ごとの選択(ブレンド演算)
戻り値は、次の方式で値 a と b を組み合わせて構築される: result[i] = mask[i] ? a[i] : b[i];
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
負の値のマスクを取得する。
戻り値は、負のパック値のインデックスに対応する位置のビットが1にセットされたビットマスクである。例:
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
要素の正弦 \( sin(x) \) と余弦 \( cos(x) \) を同時に計算する。
浮動小数点型のみ。中核となる実装の手順:
#include <opencv2/core/hal/intrin_cpp.hpp>
データをメモリに格納する。
レジスタの内容をメモリに格納する。模式図:
ポインタはアラインメントされていなくてもよい。
|
inline |
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
データをメモリに格納する(アラインメント済み)
レジスタの内容をメモリに格納する。模式図:
ポインタは16バイト境界にアラインメントされている必要がある。
|
inline |
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
データをメモリに格納する(上位半分)
レジスタの内容の上位半分をメモリに格納する。模式図:
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
インターリーブして格納する(4チャンネル)
4個のレジスタのデータをインターリーブしてメモリに格納する。模式図:
64ビットを除く全ての型に対応。
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
インターリーブして格納する(3チャンネル)
3個のレジスタのデータをインターリーブしてメモリに格納する。模式図:
64ビットを除く全ての型に対応。
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
インターリーブして格納する(2チャンネル)
2個のレジスタのデータをインターリーブしてメモリに格納する。模式図:
64ビットを除く全ての型に対応。
#include <opencv2/core/hal/intrin_cpp.hpp>
データをメモリに格納する(下位半分)
レジスタの内容の下位半分をメモリに格納する。模式図:
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
4x4行列を転置する。
模式図:
#include <opencv2/core/hal/intrin_cpp.hpp>
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
#include <opencv2/core/hal/intrin_cpp.hpp>
要素を切り捨てる。
各値を切り捨てる。入力型はfloatベクトル ==> 出力型はintベクトル。
|
inline |
#include <opencv2/core/hal/intrin_cpp.hpp>
2つのベクトルをインターリーブする。
模式図:
64ビットを除く全ての型に対応。
|
static |
#include <opencv2/core/hal/intrin_cpp.hpp>