OpenCV 4.5.3(日本語機械翻訳)
|
モジュール |
|
Private implementation helpers | |
クラス |
|
struct | cv::v_reg< _Tp, n > |
マクロ定義 |
|
#define | CV__HAL_INTRIN_EXPAND_WITH_INTEGER_TYPES(macro_name, ...) |
#define | CV__HAL_INTRIN_EXPAND_WITH_FP_TYPES(macro_name, ...) |
#define | CV__HAL_INTRIN_EXPAND_WITH_ALL_TYPES(macro_name, ...) |
#define | CV__HAL_INTRIN_IMPL_BIN_OP_(_Tp, bin_op) |
#define | CV__HAL_INTRIN_IMPL_BIN_OP(bin_op) CV__HAL_INTRIN_EXPAND_WITH_ALL_TYPES(CV__HAL_INTRIN_IMPL_BIN_OP_, bin_op) |
#define | CV__HAL_INTRIN_IMPL_BIT_OP_(_Tp, bit_op) |
#define | CV__HAL_INTRIN_IMPL_BIT_OP(bit_op) |
#define | CV__HAL_INTRIN_IMPL_BITWISE_NOT_(_Tp, dummy) |
型定義 |
|
typedef v_reg< uchar, 16 > | cv::v_uint8x16 |
16個の8ビット符号なし整数値 |
|
typedef v_reg< schar, 16 > | cv::v_int8x16 |
16 個の 8 ビット符号付き整数値 |
|
typedef v_reg< ushort, 8 > | cv::v_uint16x8 |
8個の16ビット符号なし整数値 |
|
typedef v_reg< short, 8 > | cv::v_int16x8 |
8個の16ビット符号付き整数値 |
|
typedef v_reg< unsigned, 4 > | cv::v_uint32x4 |
4つの32ビット符号なし整数値 |
|
typedef v_reg< int, 4 > | cv::v_int32x4 |
4個の32ビット符号付き整数値 |
|
typedef v_reg< float, 4 > | cv::v_float32x4 |
32ビット浮動小数点値(単精度)4個 |
|
typedef v_reg< double, 2 > | cv::v_float64x2 |
2つの64ビット浮動小数点値(倍精度) |
|
typedef v_reg< uint64, 2 > | cv::v_uint64x2 |
2つの64ビット符号なし整数値 |
|
typedef v_reg< int64, 2 > | cv::v_int64x2 |
2つの64ビット符号付き整数値 |
|
列挙型 |
|
enum | { simd128_width = 16 , simdmax_width = simd128_width } |
関数 |
|
void | CV__SIMD_NAMESPACE::vx_cleanup () |
SIMD処理状態のクリーンアップコール |
|
template<typename _Tp , int n> | |
CV_INLINE v_reg< _Tp, n > | cv::operator+ (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
値の加算[【詳解】(英語]
|
|
template<typename _Tp , int n> | |
CV_INLINE v_reg< _Tp, n > & | cv::operator+= (v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
template<typename _Tp , int n> | |
CV_INLINE v_reg< _Tp, n > | cv::operator- (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
値の減算[【詳解】(英語]
|
|
template<typename _Tp , int n> | |
CV_INLINE v_reg< _Tp, n > & | cv::operator-= (v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
template<typename _Tp , int n> | |
CV_INLINE v_reg< _Tp, n > | cv::operator* (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
値の乗算[【詳解】(英語]
|
|
template<typename _Tp , int n> | |
CV_INLINE v_reg< _Tp, n > & | cv::operator*= (v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
template<typename _Tp , int n> | |
CV_INLINE v_reg< _Tp, n > | cv::operator/ (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
値の除算[【詳解】(英語]
|
|
template<typename _Tp , int n> | |
CV_INLINE v_reg< _Tp, n > & | cv::operator/= (v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
template<typename _Tp , int n> | |
CV_INLINE v_reg< _Tp, n > | cv::operator& (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
ビットごとのAND[【詳解】(英語]
|
|
template<typename _Tp , int n> | |
CV_INLINE v_reg< _Tp, n > & | cv::operator&= (v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
template<typename _Tp , int n> | |
CV_INLINE v_reg< _Tp, n > | cv::operator| (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
ビットごとのOR[【詳解】(英語]
|
|
template<typename _Tp , int n> | |
CV_INLINE v_reg< _Tp, n > & | cv::operator|= (v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
template<typename _Tp , int n> | |
CV_INLINE v_reg< _Tp, n > | cv::operator^ (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
ビットごとのXOR[【詳解】(英語]
|
|
template<typename _Tp , int n> | |
CV_INLINE v_reg< _Tp, n > & | cv::operator^= (v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
template<typename _Tp , int n> | |
CV_INLINE v_reg< _Tp, n > | cv::operator~ (const v_reg< _Tp, n > &a) |
ビットごとのNOT[【詳解】(英語]
|
|
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<int n> | |
v_reg< float, n > | cv::v_not_nan (const v_reg< float, n > &a) |
小数点以下の比較[【詳解】(英語]
|
|
template<int n> | |
v_reg< double, n > | cv::v_not_nan (const v_reg< double, 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< float, n > | cv::v_absdiff (const v_reg< float, n > &a, const v_reg< float, 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<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_invsqrt (const v_reg< _Tp, n > &a) |
反転平方根[【詳解】(英語]
|
|
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<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_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_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< 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 >::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< 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<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<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_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_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> | |
int | cv::v_signmask (const v_reg< _Tp, n > &a) |
負の値のマスク取得[【詳解】(英語]
|
|
template<typename _Tp , int n> | |
int | cv::v_scan_forward (const v_reg< _Tp, n > &a) |
最初の負のレーンのインデックスを取得[【詳解】(英語]
|
|
template<typename _Tp , int n> | |
bool | cv::v_check_all (const v_reg< _Tp, n > &a) |
パックされたすべての値がゼロより小さいかどうかをチェックします。[【詳解】(英語]
|
|
template<typename _Tp , int n> | |
bool | cv::v_check_any (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> | |
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_low (const v_reg< _Tp, n > &a) |
低い値をより広いパックタイプに展開します。[【詳解】(英語]
|
|
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> | |
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つのベクターをインターリーブする[【詳解】(英語]
|
|
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 > | |
v_reg< _Tp, simd128_width/sizeof(_Tp)> | cv::v_load_low (const _Tp *ptr) |
下位部分に64ビットのデータをロードする(上位部分は未定義)。[【詳解】(英語]
|
|
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< typename V_TypeTraits< _Tp >::w_type, simd128_width/sizeof(typename V_TypeTraits< _Tp >::w_type)> | cv::v_load_expand (const _Tp *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) |
クワッドエキスパンダーでメモリからレジスタの内容をロードします。[【詳解】(英語]
|
|
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 , 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_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, 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 (_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_low (_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_aligned (_Tp *ptr, const v_reg< _Tp, n > &a) |
メモリへのデータの格納(アラインド)[【詳解】(英語]
|
|
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_aligned (_Tp *ptr, const v_reg< _Tp, n > &a, hal::StoreMode) |
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_combine_high (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
2つのベクトルの最後の要素からベクトルを合成する[【詳解】(英語]
|
|
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> | |
v_reg< _Tp, n > | cv::v_reverse (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 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 > | cv::v_round (const v_reg< float, 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_floor (const v_reg< float, n > &a) |
要素の階調[【詳解】(英語]
|
|
template<int n> | |
v_reg< int, n > | cv::v_ceil (const v_reg< float, n > &a) |
要素の暗号化[【詳解】(英語]
|
|
template<int n> | |
v_reg< int, n > | cv::v_trunc (const v_reg< float, n > &a) |
要素の切り捨て[【詳解】(英語]
|
|
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_floor (const v_reg< double, n > &a) |
template<int n> | |
v_reg< int, n *2 > | cv::v_ceil (const v_reg< double, n > &a) |
template<int n> | |
v_reg< int, n *2 > | cv::v_trunc (const v_reg< double, n > &a) |
template<int n> | |
v_reg< float, n > | cv::v_cvt_f32 (const v_reg< int, n > &a) |
float に変換します.[【詳解】(英語]
|
|
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> | |
CV_INLINE v_reg< double, n/2 > | cv::v_cvt_f64 (const v_reg< int, n > &a) |
下半分を double に変換します.[【詳解】(英語]
|
|
template<int n> | |
CV_INLINE v_reg< double,(n/2)> | cv::v_cvt_f64_high (const v_reg< int, n > &a) |
ベクトルの上位部分を double に変換します.[【詳解】(英語]
|
|
template<int n> | |
CV_INLINE v_reg< double,(n/2)> | cv::v_cvt_f64 (const v_reg< float, n > &a) |
下半分を double に変換します.[【詳解】(英語]
|
|
template<int n> | |
CV_INLINE v_reg< double,(n/2)> | cv::v_cvt_f64_high (const v_reg< float, n > &a) |
ベクトルの上位部分を double に変換します.[【詳解】(英語]
|
|
template<int n> | |
CV_INLINE v_reg< double, n > | cv::v_cvt_f64 (const v_reg< int64, n > &a) |
double に変換します.[【詳解】(英語]
|
|
template<typename _Tp > | |
v_reg< _Tp, simd128_width/sizeof(_Tp)> | cv::v_lut (const _Tp *tab, const int *idx) |
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<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> | |
v_reg< float, n > | cv::v_lut (const float *tab, const v_reg< int, n > &idx) |
template<int n> | |
v_reg< double, n/2 > | cv::v_lut (const double *tab, const v_reg< int, n > &idx) |
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<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<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_pack_triplets (const v_reg< _Tp, n > &vec) |
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< 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<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<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) |
v_reg< float, simd128_width/sizeof(float)> | cv::v_load_expand (const float16_t *ptr) |
template<int n> | |
void | cv::v_pack_store (float16_t *ptr, const v_reg< float, n > &v) |
void | cv::v_cleanup () |
Pack boolean values |
|
Pack boolean values from multiple vectors to one unsigned 8-bit integer vector
|
|
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) |
"Universal intrinsics" is a types and functions set intended to simplify vectorization of code on different platforms. Currently a few different SIMD extensions on different architectures are supported. 128 bit registers of various types support is implemented for a wide range of architectures including x86(SSE/SSE2/SSE4.2), ARM(NEON), PowerPC(VSX), MIPS(MSA). 256 bit long registers are supported on x86(AVX2) and 512 bit long registers are supported on x86(AVX512). In case when there is no SIMD extension available during compilation, fallback C++ implementation of intrinsics will be chosen and code will work as expected although it could be slower.
There are several types representing packed values vector registers, each type is implemented as a structure based on a one SIMD register.
Exact bit length(and value quantity) of listed types is compile time deduced and depends on architecture SIMD capabilities chosen as available during compilation of the library. All the types contains nlanes enumeration to check for exact value quantity of the type.
In case the exact bit length of the type is important it is possible to use specific fixed length register types.
There are several types representing 128-bit registers.
There are several types representing 256-bit registers.
There are several types representing 512-bit registers.
These operations allow to set contents of the register explicitly or by loading it from some memory block and to save contents of the register to memory block.
There are variable size register load operations that provide result of maximum available size depending on chosen platform capabilities.
Also there are fixed size register load/store operations.
For 128 bit registers
For 256 bit registers(check CV_SIMD256 preprocessor definition)
For 512 bit registers(check CV_SIMD512 preprocessor definition)
Store to memory operations are similar across different platform capabilities: v_store, v_store_aligned, v_store_high, v_store_low
These operations allow to reorder or recombine elements in one or multiple vectors.
Element-wise binary and unary operations.
Most of these operations return only one value.
Different type conversions and casts:
In these operations vectors represent matrix rows/columns: v_dotprod, v_dotprod_fast, v_dotprod_expand, v_dotprod_expand_fast, v_matmul, v_transpose4x4
Most operations are implemented only for some subset of the available types, following matrices shows the applicability of different operations to the types.
Regular integers:
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 |
Big integers:
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 |
Floating point:
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 |
#define CV__HAL_INTRIN_EXPAND_WITH_ALL_TYPES | ( | macro_name, | |
... | |||
) |
#define CV__HAL_INTRIN_EXPAND_WITH_FP_TYPES | ( | macro_name, | |
... | |||
) |
#define CV__HAL_INTRIN_EXPAND_WITH_INTEGER_TYPES | ( | macro_name, | |
... | |||
) |
#define CV__HAL_INTRIN_IMPL_BIN_OP_ | ( | _Tp, | |
bin_op | |||
) |
#define CV__HAL_INTRIN_IMPL_BIT_OP | ( | bit_op | ) |
#define CV__HAL_INTRIN_IMPL_BIT_OP_ | ( | _Tp, | |
bit_op | |||
) |
#define CV__HAL_INTRIN_IMPL_BITWISE_NOT_ | ( | _Tp, | |
dummy | |||
) |
CV_INLINE v_reg< _Tp, n > cv::operator& | ( | const v_reg< _Tp, n > & | a, |
const v_reg< _Tp, n > & | b | ||
) |
ビットごとのAND
整数型の場合のみ。
CV_INLINE v_reg< _Tp, n > cv::operator* | ( | const v_reg< _Tp, n > & | a, |
const v_reg< _Tp, n > & | b | ||
) |
値の乗算
16ビット、32ビットの整数型、浮動小数点型に対応。
CV_INLINE v_reg< _Tp, n > cv::operator+ | ( | const v_reg< _Tp, n > & | a, |
const v_reg< _Tp, n > & | b | ||
) |
値の加算
すべてのタイプに対応。
CV_INLINE v_reg< _Tp, n > cv::operator- | ( | const v_reg< _Tp, n > & | a, |
const v_reg< _Tp, n > & | b | ||
) |
値の減算
すべてのタイプに対応。
CV_INLINE v_reg< _Tp, n > cv::operator/ | ( | const v_reg< _Tp, n > & | a, |
const v_reg< _Tp, n > & | b | ||
) |
値の除算
浮動小数点タイプのみ。
CV_INLINE v_reg< _Tp, n > cv::operator^ | ( | const v_reg< _Tp, n > & | a, |
const v_reg< _Tp, n > & | b | ||
) |
ビットごとのXOR
整数型の場合のみ。
CV_INLINE v_reg< _Tp, n > cv::operator| | ( | const v_reg< _Tp, n > & | a, |
const v_reg< _Tp, n > & | b | ||
) |
ビットごとのOR
整数型の場合のみ。
CV_INLINE v_reg< _Tp, n > cv::operator~ | ( | const v_reg< _Tp, n > & | a | ) |
ビットごとのNOT
整数型の場合のみ。
|
inline |
彩度のない値の加算
8ビットおよび16ビットの整数値に対して
サチュレーションなしでの値の減算
8ビットおよび16ビットの整数値に対して
彩度のない値の乗算
8ビットおよび16ビットの整数値に対して
差の絶対値
戻り値対応する符号なしタイプに変換された 例
8、16、32ビットの整数型の場合
|
inline |
これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。
64ビット浮動小数点値の場合
|
inline |
これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。
32ビット浮動小数点値の場合
|
inline |
飽和絶対差
戻り値. 8 ビット,16 ビットの符号付き整数型の場合
|
inline |
ベクトルのi番目の要素を放送する
スキーム.
制限があります。0 <= i < nlanes サポートされる型。対応する型:32ビット整数と浮動小数点数 (s32/u32/f32)
これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。
要素の暗号化
各値を消去します。入力型は float ベクトル ==> 出力型は int ベクトルです。
|
inline |
パックされたすべての値がゼロより小さいかどうかをチェックします。
符号なしの値は符号ありにキャストされます。uchar 254 => char -2
.
|
inline |
パックされた値のいずれかがゼロより小さいかどうかをチェックします。
符号なしの値は符号ありにキャストされます。uchar 254 => char -2
.
|
inline |
2つのベクトルの最後の要素からベクトルを合成する
スキーム.
64ビットを除くすべての型で
|
inline |
2つのベクトルの最初の要素からベクトルを合成する
スキーム.
64ビットを除くすべての型で
下半分を float に変換します.
サポートされる入力形式は, cv::v_float64 です.
|
inline |
float に変換します.
サポートされる入力形式は, cv::v_float64 です.
float に変換します.
サポートされる入力形式は, cv::v_int32 です.
下半分を double に変換します.
サポートされる入力形式は, cv::v_float32 です.
下半分を double に変換します.
サポートされる入力形式は, cv::v_int32 です.
double に変換します.
サポートされる入力形式は, cv::v_int64 です.
ベクトルの上位部分を double に変換します.
サポートされる入力形式は, cv::v_float32 です.
ベクトルの上位部分を double に変換します.
サポートされる入力形式は, cv::v_int32 です.
|
inline |
要素のドットプロダクト
2つのレジスタの値を乗算し,隣接する結果の組を合計します.
スキーム.
|
inline |
要素のドットプロダクト
と同じです.cv::v_dotprodただし,隣接するペアの和に3番目の要素を加えます.Schemeです。
|
inline |
要素の点積と展開
2つのレジスタの値を乗算し、隣接する結果ペアの和を拡張します。
スキーム.
|
inline |
要素のドットプロダクト
と同じです.cv::v_dotprod_expandただし,隣接するペアの和に3番目の要素を加えます.Schemeです。
|
inline |
高速な要素のドット積と展開
2つのレジスタの値を乗算し、隣接する結果ペアの和を拡張します。
と同じです.cv::v_dotprod_expandただし、プラットフォームによっては、結果ペアの和が順不同になる可能性があります。すべてのレーン間の和が問題になるだけで、影響を受けるプラットフォームでより良いパフォーマンスが得られる場合は、この組込みを使用できます。
|
inline |
要素の高速ドット積
と同じです.cv::v_dotprod_expand_fast隣接するペアの合計に3番目の要素を追加します。
|
inline |
要素の高速ドット積
と同じです.cv::v_dotprodただし、プラットフォームによっては、結果ペアの和が順不同になる可能性があります。すべてのレーン間の和が問題になるだけで、影響を受けるプラットフォームでより良いパフォーマンスが得られる場合は、この組込みを使用できます。
|
inline |
要素の高速ドット積
と同じです.cv::v_dotprod_fast隣接するペアの合計に3番目の要素を追加します。
|
inline |
値をより広いパックタイプに展開
レジスタの内容を2倍のパックタイプで2つのレジスタにコピーします。スキーム。
|
inline |
より高い値をより広いパックタイプに展開
と同じです.cv::v_expand_lowベクトルの上位半分を拡張します。
スキーム.
|
inline |
低い値をより広いパックタイプに展開します。
と同じです.cv::v_expandただし、ベクターの下半分を返します。
スキーム.
|
inline |
ベクトル抽出
スキーム.
制限があります。0 <= shift < nlanes
使用方法
すべてのタイプに対応。
|
inline |
ベクトル抽出
Schemeです。vのs番目の要素を返します。0 <= s < nlanes
使用方法
すべてのタイプに対応。
これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。
要素の階調
各値を階調します。入力形式は float ベクトル ==> 出力形式は int ベクトルです。
|
inline |
乗算・加算
戻り値浮動小数点型と符号付き32ビットint型のみです。
反転平方根
戻り値浮動小数点タイプのみ。
|
inline |
レジスタの内容をメモリから読み込む
ptr | データのあるメモリブロックへのポインタ |
sizeof(lane type)
で十分です).実行時にポインタのアラインメントをチェックしないで,ポインタ型をキャストしてはいけません(例えばuchar*
=>int*
).
|
inline |
メモリからレジスタの内容を読み込む(アラインド).
に似ています。cv::v_loadただし、ソースメモリブロックはアラインされている必要があります(SIMD128の場合は16バイト境界、SIMD256の場合は32バイト境界など)。
|
inline |
ロード&デインターリーブ(2チャネル)
メモリからデータをロードしてデインタリーブし、2つのレジスタに格納する。スキームです。
64ビットを除くすべての型で
|
inline |
ロードアンドデインターリーブ(3チャネル)
メモリからデータをデインターリーブして3つのレジスタに格納します。スキーム
64ビットを除くすべての型で
|
inline |
ロード&デインターリーブ(4チャネル)
メモリからデータをデインターリーブして4つのレジスタに格納します。スキーム
64ビットを除くすべての型で
|
inline |
メモリからレジスタの内容をダブルエキスパンダーでロードします。
と同じです.cv::v_loadただし、結果のパックタイプはメモリタイプの2倍になります。
8、16、32ビットの整数型の場合
|
inline |
クワッドエキスパンダーでメモリからレジスタの内容をロードします。
と同じです.cv::v_load_expandしかし、結果のタイプはソースの4倍の幅になります。
8 ビット整数のソースタイプの場合。
|
inline |
2つのメモリブロックからレジスタコンテンツをロード
loptr | 前半(0..n/2)のデータを含むメモリブロック |
hiptr | 後半(n/2..n)のデータを含むメモリブロック |
|
inline |
下位部分に64ビットのデータをロードする(上位部分は未定義)。
ptr | 前半(0..n/2)のデータを含むメモリブロック |
|
inline |
マグニチュード
戻り値浮動小数点タイプのみ。
|
inline |
行列の乗算
スキーム.
|
inline |
行列の乗算と加算
スキーム.
|
inline |
乗算と展開
2つのレジスタの値を乗算し、結果をより広いパックタイプの2つのレジスタに格納します。スキーム。
例
16ビットと符号なし32ビットのソースタイプにのみ実装されています(v_int16x8,v_uint16x8,v_uint32x4).
|
inline |
乗算と高次部分の抽出
2つのレジスタの値を乗算し、その結果の上位部分を格納します。16ビットのソースタイプ(v_int16x8,v_uint16x8). 戻り値
小数点以下の比較
64ビットの整数値を除くすべての型に対して
大なり小なりの比較
64ビットの整数値を除くすべての型に対して
小数点以下の比較
64ビットの整数値を除くすべての型に対して
大なり小なりの比較
64ビットの整数値を除くすべての型に対して
等価比較
64ビットの整数値を除くすべての型に対して
等しくない比較
64ビットの整数値を除くすべての型に対して
|
inline |
これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。 64ビットのブール値の場合
スキーム.
|
inline |
これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。 32ビットのブール値の場合
スキーム.
|
inline |
! 16ビットのブーリアン値の場合
スキーム.
|
inline |
ベクトルレーン内の1ビットをカウントし、対応する符号なしタイプとして結果を返します。
スキーム.
すべての整数型の場合
|
inline |
2つのベクトルの下位部分と上位部分から2つのベクトルを合成する
|
inline |
|
inline |
ベクトルの要素を左にシフトする
すべての型に対して
ベクトル間での要素の右シフト
すべての型に対して
パックされた値の和
スキーム.
|
inline |
各入力ベクトルのすべての要素の和をとり、和のベクトルを返します。
スキーム.
ベクトルの逆順
ベクトルスキームの順序を逆にします。
すべてのタイプに対応。
これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。
|
inline |
これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。
要素の丸め
各値を丸めます。入力形式は float ベクトル ==> 出力形式は int ベクトルです。
|
inline |
最初の負のレーンのインデックスを取得
返される値は、最初の負のレーンのインデックスです(すべての正の値を入力した場合は未定義) 例:
|
inline |
エレメント単位の選択(ブレンド操作)
戻り値は、以下の方法で値を組み合わせて作られます。aおよびbresult[i] = mask[i] ? a[i] : b[i]. 結果[i]は、以下のスキームで値を組み合わせて作られます。
|
inline |
|
inline |
マグニチュードの2乗
戻り値浮動小数点タイプのみ。
|
inline |
データのメモリへの格納
レジスタの内容をメモリに格納します。Schemeです。
ポインタはアンアラインでもよい。
|
inline |
メモリへのデータの格納(アラインド)
レジスタの内容をメモリに格納します。Schemeです。
ポインタは16バイト境界でアラインされている必要があります。
|
inline |
データのメモリへの保存(上位半分)
レジスタの内容の上位半分をメモリに格納します。スキーム。
|
inline |
インターリーブ&ストア(4チャンネル)
4つのレジスタのデータをインターリーブしてメモリに格納します。スキーム
64ビットを除くすべての型で
|
inline |
インターリーブ&ストア(3チャネル)
3つのレジスタのデータをインターリーブしてメモリに格納します。スキーム
64ビットを除くすべての型で
|
inline |
インターリーブ&ストア(2チャンネル)
2つのレジスタのデータをインターリーブしてメモリに格納します。スキーム
64ビットを除くすべての型で
|
inline |
メモリへの格納(下半分)
レジスタの内容の下半分をメモリに格納します。スキーム
|
inline |
4x4の行列を転置する
スキーム.
これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。
要素の切り捨て
各値を切り捨てます。入力は float ベクトル ==> 出力は int ベクトルです。