avx

    10熱度

    2回答

    這似乎是一個recurring problem許多英特爾處理器(除非我錯了,直到Skylake)在將AVX-256指令與SSE指令混合使用時表現不佳。 根據Intel's documentation,這是由於SSE指令被定義爲保留YMM寄存器的高128位,所以爲了能夠通過不使用AVX數據路徑的高128位來節省功耗,CPU在執行SSE代碼時將這些位存儲起來,並在輸入AVX代碼時重新加載它們,存儲和加

    0熱度

    1回答

    您好我試圖編寫一個代碼向量標量乘法使用AVX桑迪橋處理器i7-3720QM (~2012)。 該代碼是C代碼,編號爲GNU gcc,代碼爲Mac OSX 10.8。 gcc -mavx -Wa,-q -o bb5 code1.c -lm 我得到Segmentation fault: 11。請幫忙。 輸出: 3.000000 6.000000 9.000000 12.000000 Segmenta

    -1熱度

    1回答

    我有一些代碼,一次對3個不對稱整數值的3個對稱集進行操作。有大量的條件代碼和大量的常量。 這已經成爲一個perf性能瓶頸,我正在尋找一些經驗法則,以便在64位Intel/AMD CPU上的SIMD能夠產生perf wins。代碼很長,我以前從未使用過SSE2或AVX,因此在投入時間之前,如果perf wins可能或可能會有一些想法,那將是非常好的。 如果您願意列出經驗法則或指向現有的白皮書,我會很

    22熱度

    2回答

    我一直在試圖找出應用程序中的性能問題,並最終將其縮小爲一個非常奇怪的問題。如果VZEROUPPER指令被註釋掉,以下代碼片段在Skylake CPU(i5-6500)上運行速度會減慢6倍。我測試過Sandy Bridge和Ivy Bridge CPU,兩個版本都以相同的速度運行,不管有沒有VZEROUPPER。 現在我對VZEROUPPER做的事情有了一個相當好的想法,我認爲在沒有VEX編碼指令並

    4熱度

    1回答

    我試圖將功能轉換爲AVX版本。函數本身基本上只是比較float和返回true/false取決於計算。 這裏是原來的功能: bool testSingle(float* thisFloat, float* otherFloat) { for (unsigned int k = 0; k < COL_COUNT/2; k++) { if (thisFloat[k]

    4熱度

    1回答

    我想使用SIMD重寫這段代碼: int16_t v; int32_t a[16]; int8_t b[32]; ... ((int16_t *)a[i])[0] = b[i]==1? -v:v; ((int16_t *)a[i])[1] = b[i]==1? -v:v; 我想用_mm256_cmpeq_epi8生成一個掩碼矢量,在那之後我可以用_mm256_and_si256和_mm

    1熱度

    1回答

    我得到時的程序(TEST.CPP)被編譯下面的錯誤: > g++ -o test test.cpp -O2 -mavx -msse4.1 test.cpp: In function ‘int main(int, char**)’: test.cpp:18:42: error: ‘_mm_rorv_epi32’ was not declared in this scope indice

    3熱度

    1回答

    鑑於在二維空間中旋轉的點的經典公式: cv::Point pt[NPOINTS]; cv::Point rotated[NPOINTS]; float angle = WHATEVER; float cosine = cos(angle); float sine = sin(angle); for (int i = 0; i < NPOINTS; i++) { rotate

    1熱度

    1回答

    我想用常數除AVX2向量。我訪問了this question和許多其他頁面。看到的東西,可能會幫助Fixed-point arithmetic,我不明白。所以問題是這個分裂是瓶頸。我嘗試了兩種方式: 首先,鑄造浮動,並與AVX指令執行操作: //outside the bottleneck: __m256i veci16; // containing some integer numbers (

    10熱度

    1回答

    簡短的問題是,如果我有一個函數需要兩個向量。一個是輸入,另一個是輸出(沒有別名)。我只能對其中一個,我應該選擇哪一個? 較長的版本是,考慮功能, void func(size_t n, void *in, void *out) { __m256i *in256 = reinterpret_cast<__m256i *>(in); __m256i *out256 = reint