__m256
読み:アンダースコア-アンダースコア-エムにひゃくごじゅうろく
外語:__m256
x86プロセッサー用のC/C++で、Intel AVXを扱うための独自のデータ型(変数型)。関連して__m256iと__m256dが存在する。
概要
Intel AVXで使うYMMレジスターは、256ビット長のSIMD演算装置用レジスターである。これは従来のSSEの128ビット長XMMレジスターの拡張である。
通常のintやlongなどと性質の異なるものであり、Intel AVXで使われるレジスター幅の変数を定義するため、このような独自の型が用意された。
またこのデータ型を使用した場合、コンパイラーは自動的にアラインメントを32ビット境界に合わせる。
特徴
定義
Windows
Microsoft Visual Studio 2010の場合、immintrin.hに、次のように定義がある。
typedef union __declspec(intrin_type) _CRT_ALIGN(32) __m256 {
float m256_f32[8];
} __m256;
typedef struct __declspec(intrin_type) _CRT_ALIGN(32) {
double m256d_f64[4];
} __m256d;
typedef union __declspec(intrin_type) _CRT_ALIGN(32) __m256i {
__int8 m256i_i8[32];
__int16 m256i_i16[16];
__int32 m256i_i32[8];
__int64 m256i_i64[4];
unsigned __int8 m256i_u8[32];
unsigned __int16 m256i_u16[16];
unsigned __int32 m256i_u32[8];
unsigned __int64 m256i_u64[4];
} __m256i;
Cの標準機能のみで定義することができないため、Visual C/C++の独自拡張機能を用いて定義されているが、その実体はどうやらunionのようである。
FreeBSD
FreeBSD 8.0現在、定義がないため使用できない。
利用方法
__m256は、関数の戻り値やパラメーターとして利用できるが、他の一般的な算術式と共に使うことはできない。
処理系の実装に依存するが、この変数型を扱うための関数が用意されており、これを通してIntel AVXを使うことになる。
結果として、__m256データ型は8つの32ビット浮動小数点数、__m256dデータ型は4つの64ビット浮動小数点数、__m256iデータ型は32個の8ビット整数値、16個の16ビット整数値、8個の32ビット整数値、または4個の64ビット整数値を保持することができる。
再検索