10

コードでいくつかの AVX 組み込み関数を利用しようとしていますが、対数組み込み関数でレンガの壁にぶつかりました。

Linux 用 Intel Intrinsics Guide v3.0.1 を使用すると_mm256_log_ps(__m256)、"immintrin.h" の一部として組み込みがリストされ、現在のアーキテクチャでもサポートされていることがわかります。

ただし、この単純なテスト ケースをコンパイルしようとすると、「エラー: '_mm256_log_ps' はこのスコープで宣言されていません」で失敗します。

例はでコンパイルされましたg++-4.8 -march=native -mavx test.cpp

#include <immintrin.h>
int main()
{
        __m256 i;
        _mm256_log_ps(i);
}

ここで基本的な何かが欠けていますか? 特定の組み込み関数は g++ でサポートされておらず、icc でのみ使用できますか?

解決済み: この命令は真の組み込み関数ではなく、ICC 用インテル SVML の一部として実装されています。

4

2 に答える 2

11

あなたの質問へのコメントに示されているように、その組み込みは実際の AVX 命令にマップされません。これは、組み込みセットに対する Intel 拡張です。対数は自明な演算ではないため、実装では多くの基になる命令が使用される可能性があります。

Intel 以外のコンパイラを使用したいが、高速な対数の実装が必要な場合は、 AVX を使用した 、 、および関数このオープンソース実装をsin()cos()exp()log()確認してください。これらは、同じ関数の以前のSSE2 バージョンに基づいています。

于 2013-09-11T19:21:55.297 に答える