sse

    4熱度

    2回答

    我在處理SIMD顏色lerp函數時遇到了一些奇怪的行爲,並將其修剪爲最小程序。本示例中的SIMD代碼不再執行lerp,但是它執行從32位顏色到XMM寄存器的解包,然後返回到32位。 在MSVC++ 2015(更新3)中,在發佈x64模式下,以下代碼不會生成正確的結果,但在Debug x64或Release/Debug x86中它可以正常工作。這是在人少的Win32的C++控制檯應用程序項目的唯一代

    0熱度

    1回答

    我想弄清楚,什麼是CPU等同於CUDA類型轉換內部函數__double2loint,__double2hiint和__hiloint2double。 我猜_mm_cvttsd_si32可能相當於__double2loint(是否正確?),但我沒有找到__double2hiint和__hiloint2double的等價物。有可能在C中實現這種功能的快速版本?

    2熱度

    1回答

    我從來沒有寫過SSE優化的彙編代碼,所以很抱歉,如果這是一個菜鳥問題。在this aritcle解釋瞭如何使用條件語句矢量化for。然而,我的代碼(從here採取)的形式爲: for (int j=-halfHeight; j<=halfHeight; ++j) { for(int i=-halfWidth; i<=halfWidth; ++i) {

    1熱度

    1回答

    我想對齊的浮動陣列轉移到XMM寄存器 #define ALIGNED16 __declspec(align(16)) ALIGNED16 float vector1[4] = { 1.0f, 2.0f, 3.0f, 4.0f }; ALIGNED16 float vector2[4] = { 1.0f, 2.0f, 3.0f, 4.0f }; ALIGNED16 float result[

    0熱度

    2回答

    我試圖從源代碼安裝,因爲,當我與PIP和安裝virtualenv中未安裝CPU指令(SSE,AVX ...)警告Tensorflow: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.1 instructions, but these are

    1熱度

    1回答

    當我嘗試加載使用內在函數生成的某些密文時,出現段錯誤。我根本不明白這個錯誤。代碼示例: unsigned char c[177]; unsigned char m[161]; auth = _mm_setzero_si128(); unsigned char M_star[BLOCKSIZE]; __m128i tag = auth; for(i=0;i<numblocks_mes;++

    0熱度

    1回答

    我對SIMD相當新穎,想試試看能否讓GCC爲我引導一個簡單的動作。 所以我看着this post,想要做更多或更少的相同的事情。 (但在Linux 64位GCC 5.4.0,對於KabyLake處理器) 我基本上是有這個功能: /* m1 = N x M matrix, m2 = M x P matrix, m3 = N x P matrix & output */ void mmul(doub

    5熱度

    1回答

    我測試這個簡單的函數 void mul(double *a, double *b) { for (int i = 0; i<N; i++) a[i] *= b[i]; } 具有非常大的陣列,這樣勢必內存帶寬。我使用的測試代碼如下。當我編譯-O2需要1.7秒。當我用-O2 -mavx進行編譯時,它只需要1.0秒。非vex編碼的標量操作速度要慢70%! 這是爲什麼? 這是-O2和-O2

    3熱度

    1回答

    我在程序集x86中實現了一個函數,用於從C程序調用來添加浮點數組。函數的第一個參數是指向數組的指針,第二個參數是元素的數量。當我在linux中運行代碼時,出現了分段錯誤。我做錯了什麼? .text .globl floatsum floatsum: push %ebp movl %esp, %ebp movl 8(%ebp), %eax movl 12(%ebp), %edx s

    3熱度

    2回答

    我需要廣播一個__m128矢量的任意元素。 例如,第二元件: __m128 a = {a0, a1, a2, a3}; __m128 b = {a1, a1, a1, a1}; 我知道有內在_mm_set1_ps(浮點)和_mm_broadcast_ss(浮子*)。 但是這些內部函數可以從通用內存寄存器中加載值。 是否存在任何方式來從另一個向量寄存器設置標量值?