このページの内容

固定した原文への補足

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。