固定した原文への補足
XXH_DISPATCH_AVX512のVisual Studio 2017に関する説明は、原文どおり「AVX2」と訳しています。固定したxxh_x86dispatch.cの125–140行では、このコメントに続く条件が、_MSC_VER >= 1910をXXH_DISPATCH_AVX512を1と定義する条件の一つとして使用しています。コメントの記述と、AVX512へのディスパッチを有効にする固定コードの条件を区別してください。この確認は静的なコード照合であり、各コンパイラーでの実行試験ではありません。
マクロ値中のdisable attribute targetというコメントは「target属性を無効にする」という意味です。コメントを含む定義値は原文どおり保持しています。
マクロ | |
| #define | XXH_DISPATCH_SCALAR 1 |
| スカラーコードパスへのディスパッチを有効にします。 | |
| #define | XXH_DISPATCH_AVX2 0 |
| AVX2へのディスパッチを有効または無効にします。 | |
| #define | XXH_DISPATCH_AVX512 0 |
| AVX512へのディスパッチを有効または無効にします。 | |
| #define | XXH_TARGET_SSE2 /* disable attribute target */ |
| SSE2組み込み関数を使用して関数をコンパイルできるようにします。 | |
| #define | XXH_TARGET_AVX2 /* disable attribute target */ |
| XXH_TARGET_SSE2と同様ですが、AVX2向けです。 | |
| #define | XXH_TARGET_AVX512 /* disable attribute target */ |
| XXH_TARGET_SSE2と同様ですが、AVX512向けです。 | |
詳細説明
マクロ定義の説明
◆ XXH_DISPATCH_SCALAR
| #define XXH_DISPATCH_SCALAR 1 |
スカラーコードパスへのディスパッチを有効にします。
これを0と定義した場合、SSE2対応が前提となります。スカラーパスが不要なときに、コードサイズを削減できます。
次の条件では、自動的に0と定義されます:
- コンパイラーでSSE2対応が有効になっている
- x86_64をターゲットにしている
- Android x86をターゲットにしている
- macOSをターゲットにしている
◆ XXH_DISPATCH_AVX2
| #define XXH_DISPATCH_AVX2 0 |
AVX2へのディスパッチを有効または無効にします。
定義されていない場合は、自動的に検出されます。
- GCC 4.7以降がAVX2に対応することは知られていますが、-mavx -mavx2を指定せずにAVX2の組み込み関数と型定義を利用するには、4.9より新しい版が必要です。
- Visual Studio 2013 Update 2以降がAVX2に対応することは知られています。
- GCC/Clangの内部ヘッダーである <avx2intrin.h> が検出されます。これを直接インクルードすることは認められていませんが、組み込みのインクルードパスには存在するため、次の機能で検出できます: __has_include。
- 関連項目
- XXH_AVX2
◆ XXH_DISPATCH_AVX512
| #define XXH_DISPATCH_AVX512 0 |
AVX512へのディスパッチを有効または無効にします。
次の条件のいずれかを満たす場合、自動的に検出されます:
- GCC 4.9以降がAVX512に対応することは知られています。
- Visual Studio 2017以降がAVX2に対応することは知られています。
- GCC/Clangの内部ヘッダーである <avx512fintrin.h> が検出されます。これを直接インクルードすることは認められていませんが、組み込みのインクルードパスには存在するため、次の機能で検出できます: __has_include。
- 関連項目
- XXH_AVX512
◆ XXH_TARGET_SSE2
| #define XXH_TARGET_SSE2 /* disable attribute target */ |
SSE2組み込み関数を使用して関数をコンパイルできるようにします。
GCCでは、次の属性を使用して: __attribute__((__target__("sse2"))) 次のオプションを指定した場合でもSSE2を使用できるようにします: -mno-sse2。