avx2

    1

    1答えて

    私は最近、ベクトル化された指数関数の実装を研究していました。実際には単精度用のコードを見つけるのは非常に簡単ですが、倍精度用のコードを見つけるのは非常に難しいです。私は、倍精度AVXべき乗の実装を見つけることができませんでした。 SSEのコードはほとんど変更できますが、一般的に2^nで乗算するトリックはAVXに適応できないようです。 誰もそのような実装を知っていますか?

    7

    1答えて

    ?これまで私はスタックを一時的に使用していました。たとえば、 mov [rsp + 0x00], r8 mov [rsp + 0x08], r9 mov [rsp + 0x10], r10 mov [rsp + 0x18], r11 vmovdqa ymm0, [rsp] ; stack is properly aligned first. 5つのオペランドを持つ命令を意味するので、こ

    2

    1答えて

    私は係数ベクトルを生成し、このベクトルのドット積を大きな配列から取ったデータベクトルで返します。スピードを上げるために、私はAVX2 SIMD組み込み関数を使用して、一度に8つのベクトルに対してこれを行います。問題は、大量の時間がドット製品のデータを取得するギャザー操作によって消費されてしまうことです。 私はギャザーを実装するさまざまな方法を試しましたが、組み込み関数が最もうまくいくようです。これ

    0

    2答えて

    これは実装に依存するので、それを見つけるための唯一の方法は逆アセンブリによるものですか?

    2

    1答えて

    私のg ++​​ 5.4でベクトル化を使って比較するのに問題があります。基本的には、ベクトル化を使用して4つの符号なし整数を比較したいと思います。私の最初のアプローチは単純明快だった:g++ -std=c++11 -Wall -O3 -funroll-loops -march=native -mtune=native -ftree-vectorize -msse -msse2 -ffast-mat

    0

    1答えて

    一部のCコードでAVX2命令を使用しています。 VPERMD命令はidxに基づいaを置換することによって、2つの8整数ベクトルaとidxを取り、第三のいずれかを生成する、dst。これはdst[i] = a[idx[i]] for i in 0..7に相当します。このソースは、ソースに基づいてインデックス付けされているため、このソースをベースとしています。 ただし、計算されたインデックスは宛先ベース

    5

    1答えて

    組み込み関数を使用して、SIMDベクトルの要素をインクリメントする必要があります。 (注:vec_incは前に1に設定されている)最も簡単な方法は、このように、各要素に1を追加することであるように思わ vec = _mm256_add_epi16 (vec, vec_inc); が、ベクトルをインクリメントする特別な指示はありますか? incのようにthis page?または他の簡単な方法?

    3

    1答えて

    基本的に、これに相当するAVX2組み込み関数を作成するにはどうすればよいですか? result_in_floatは__m256であり、はshort int*またはshort int[8]であると仮定します。 for(i = 0; i < 8; i++) result[i] = (short int)result_in_float[i]; 私は山車が固有__m256i _mm256_c

    3

    1答えて

    AVX組み込み関数を使用していくつかのコードを最適化しようとしています。非常に単純なテストケースがコンパイルされますが、私のループは私が理解していないいくつかの理由でベクター化されていないことがわかります。 これは完全なプログラムである、simple.c #include <math.h> #include <stdlib.h> #include <assert.h> #include <i