avx

    20熱度

    3回答

    對於雙精度浮點變量,英特爾高級矢量擴展(AVX)在256位版本(YMM寄存器)中不提供點積。 「爲什麼?」在另一個論壇(here)和Stack  溢出(here)中已經非常簡短地討論了問題。但是我面臨的問題是如何以有效的方式用其他AVX指令替換這個缺失的指令? 在256位版本的點積存在單精度浮點變量(reference here): __m256 _mm256_dp_ps(__m256 m1, _

    10熱度

    3回答

    我有一個__m256d矢量,它包含四個64位浮點值。 我需要找到向量元素的水平最大值並將結果存儲在雙精度標量值中; 我的嘗試都結束了使用了很多向量元素的混洗,使代碼不是非常優雅,也沒有效率。另外,我發現不可能只保留在AVX域名中。在某些時候,我不得不使用SSE 128位指令來提取最終的64位值。但是,我想在最後的聲明中被證明是錯誤的。 所以最理想的解決方案是: 1)只能使用AVX指令。 2)最小化

    3熱度

    1回答

    我有一些簡單的測試代碼,我試圖在Linux Redhat 5.6上使用icc v12.1生成AVX優化代碼。代碼如下所示: int main() { double sum = 0.0; for (unsigned int i = 0; i < 1024; i++) { sum += static_cast<double>(i); } std::

    3熱度

    2回答

    如何將單個32位浮點數加載/轉換爲AVX 256 ymm寄存器,以便所有8個浮點數都來自單個源浮點數? 此前我使用AVX 128 xmm寄存器將一個浮點數加載到4個打包浮點數中。 movss xmm7,[eax]; shufps xmm7,xmm7,0; add eax, 0x4;

    2熱度

    1回答

    爲什麼avx sqrt(未包裝)指令有三個操作數? vsqrtsd xmm1, xmm2, xmm3 這是不是意味着像xmm1=xmm2=sqrt(xmm3)? 編輯:詳細之下,但在短的裝配線答案是指: xmm1.low = sqrt(xmm3.low); xmm1.high = xmm2.high;

    5熱度

    2回答

    我想,我聽說過,但不知道在哪裏。 UPD:我告訴JIT

    7熱度

    2回答

    我需要一個具有周期2^128的__m128i變量的函數。它不需要單調增加(就像一個計數器),而是每訪問一次值。 我能想到的最簡單的例子實際上是一個128位的計數器,但我發現很難在SSE中實現。有沒有更簡單/更快的解決方案?

    3熱度

    1回答

    gcc的內在用於將加載到__m128和8整數到__m256(對齊/未對齊)?那麼unsigned ints呢?

    3熱度

    1回答

    如何在最少的時鐘週期數內將YMM寄存器的最低64位設置爲某個常數?我知道使用SSE指令以及AVX指令VBROADCASTSD可以做到這一點的各種方法,但我不確定哪種方法會產生最佳結果。 編輯:設置64位部分後,仍然需要使用完整的YMM寄存器。 感謝您的幫助!

    16熱度

    3回答

    我想結合兩個__m128值到一個__m256。 事情是這樣的: __m128 a = _mm_set_ps(1, 2, 3, 4); __m128 b = _mm_set_ps(5, 6, 7, 8); 喜歡的東西: __m256 c = { 1, 2, 3, 4, 5, 6, 7, 8 }; 在那裏,我可以用它來做到這一點任何內在?