cost 151 ms
按索引從 __m128 訪問 rust 中的值

[英]Access value from __m128 in rust by index

我已經看到在 C 中按索引訪問__m128寄存器中的值相當簡單。 但是,在 rust 中無法做到這一點。 如何訪問這些值? 具體來說,我一次計算四個值,然后使用_mm_cmplt_ps比較它們。 我使用該返回寄存器作為進一步計算的掩碼。 ...

AVX 將 __m256i 打包的 32 位整數除以二(無 AVX2)

[英]AVX divide __m256i packed 32-bit integers by two (no AVX2)

我正在尋找使用 AVX 將打包的 32 位整數的__m256i除以二(又名右移一位)的最快方法。 我無權訪問 AVX2。 據我所知,我的選擇是: 下拉到 SSE2 類似於AVX __m256i integer 帶符號 32 位元素的除法如果我需要將 go 降低到 SSE2,我會感謝最好的 SSE2 ...

FP 比較像 SSE2 _mm_cmpeq_pd 可以用來比較 64 位整數嗎?

[英]Can FP compares like SSE2 _mm_cmpeq_pd be used to compare 64 bit integers?

FP 比較像 SSE2 _mm_cmpeq_pd / AVX _mm_cmp_pd可以用來比較 64 位整數嗎? 這個想法是模擬丟失的_mm_cmpeq_epi64 ,它類似於_mm_cmpeq_epi8 、 _mm_cmpeq_epi16 、 _mm_cmpeq_epi32 。 擔心的是我不確 ...

SVML 與普通內在平方根函數之間有區別嗎?

[英]Is there a difference between SVML vs. normal intrinsic square root functions?

普通 sqrtps/pd 或 SVML 版本之間在精度或性能上是否存在任何差異: 我知道像_mm_sin_ps這樣的 SVML Intrinsics 實際上是由多個 asm 指令組成的函數,因此它們應該比任何單個乘法甚至除法都慢。 但是,我很好奇如果有可用的硬件級內部函數,為什么這些 functi ...

_mm_load_si128 以相反的順序加載數據

[英]_mm_load_si128 loads data in reverse order

我正在編寫一個帶有 SSE2 內在函數的 C function 以基本上比較 4 個 32 位整數並檢查哪些大於零,並以 16 位掩碼的形式給出該結果。 我正在使用以下代碼來執行此操作 但是,當我編譯並運行它時,它會打印0xf0f0 。 我希望結果遵循從 memory 加載的相同順序。 為了進一步檢 ...

2021-03-14 17:31:33   1   67    c / sse / simd / sse2  
使用 function _mm_clflush 刷新大型結構的正確方法

[英]The right way to use function _mm_clflush to flush a large struct

我開始使用像_mm_clflush 、 _mm_clflushopt和_mm_clwb這樣的函數。 現在說,因為我已經定義了一個結構名稱 mystruct,它的大小是 256 字節。 我的緩存線大小是 64 字節。 現在我想刷新包含 mystruct 變量的緩存行。 以下哪種方法是正確的方法? 或者 ...

非 SSE2 CPU 上 SSE2 movq 指令的快速解決方法

[英]Quick workaround for SSE2 movq instruction on non-SSE2 CPUs

我怎樣才能將movq SSE2 指令轉換成一個簡單的代碼片段,然后我可以將其修補到原來的 EXE 中? 如果您可以提供示例直接說明以用作替代“模板”,那就更好了! 我最感興趣的是主要使用 C 將這種基於模板的替換寫入我的 CodeBlocks 項目,所以我更喜歡它是內聯 ASM 表單。 這樣,我可以 ...

如何最好地模擬 _mm_slli_si128(128 位位移)的邏輯含義,而不是 _mm_bslli_si128

[英]How to best emulate the logical meaning of _mm_slli_si128 (128-bit bit-shift), not _mm_bslli_si128

瀏覽英特爾內在函數指南,我看到了這個指令。 翻看命名模式,意思應該很清楚了:“將 128 位寄存器左移固定位數”,其實不然。 實際上,它移動了固定的字節數,這使得它與_mm_bslli_si128 。 這是疏忽嗎? 它不應該按_mm_slli_epi32或_mm_slli_epi64類的位移動嗎? ...

使用 SSE2 intrinsic 存儲或提取標量 int 結果的更好方法

[英]Better way to store or extract scalar int result using SSE2 intrinsic

我想知道在使用 SSE2 時如何有效地加載和存儲變量。 在這個例子中,我想對 C function 執行pclmulqdq指令(進行較少的乘法,對多項式算術有用),所以我需要與標准 function 相同的“調用約定”。 a 和 b 是 16 位有效位,結果將有 32 位有效位 ...

x86 組件中的 SSE2 寄存器

[英]SSE2 registers in x86 assembly

我有以下代碼: 基本上,我從用戶那里獲取數字,然后我想使用 SSE2 計算這個數字的階乘。 “階乘”部分尚未完成,我只想檢查這些寄存器是否獲得正確的值。 所以問題是當我嘗試movups xmm0, [eax]時出現分段錯誤,因此我的問題是將這個數字傳輸到 sse2 寄存器的正確方法是什么? 我找不 ...

在 SSE2 上進行無符號 64 位比較的最有效方法是什么?

[英]What is the most efficient way to do unsigned 64 bit comparison on SSE2?

PCMPGTQ 在 SSE2 上不存在,並且本身不適用於無符號整數。 我們的目標是為無符號 64 位比較提供向后兼容的解決方案,以便我們可以將它們包含到 WebAssembly SIMD 標准中。 這是 ARMv7+NEON 的姊妹問題: 在 ARMv7 上使用 NEON 進行 SIMD 無符號 ...

SSE4.1 無符號 integer 比較與溢出

[英]SSE4.1 unsigned integer comparison with overflow

考慮到 16 位無符號加法( _mm_add_epi16() )是否會溢出,有什么方法可以使用 SSE2/4.1 指令執行類似 C >= (A + B) 的比較? 代碼片段看起來像 - 問題是當 16 位加法溢出(回繞)時,大於比較會導致誤報。 我不能出於我的目的使用飽和添加。 我在這里查看了 ...

如何在 sse2 上模擬 pcmpgtq?

[英]How to simulate pcmpgtq on sse2?

PCMPGTQ 是在 sse4.2 中引入的,它為產生掩碼的 64 位數字提供大於符號的比較。 在 sse4.2 之前的指令集上如何支持此功能? 更新:同樣的問題適用於帶有 Neon 的 ARMv7,它也缺少 64 位比較器。 在這里可以找到與此相關的姊妹問題: 在 ARMv7a 與 Neon ...

如何使用 SSE2 添加變量?

[英]How to add to variable using SSE2?

如何使用SSE2“添加到”變量? 我最近一直在 C++ 中使用 SSE2 來優化一些數學函數,但是在嘗試添加到現有變量時遇到了問題。 我有一個函數,它接收這樣的變量: 但我找不到正確的內在名稱... 我知道_mm_add_pd只會將變量加在一起,但我找不到任何可以解釋如何將其添加到 ( + ...

2020-11-16 19:54:04   1   39    c++ / sse2  
你如何在 SSE2 上做帶符號的 32 位擴展乘法?

[英]How do you do signed 32bit widening multiplication on SSE2?

在審查擴展乘法的 WebAssembly SIMD 提議時提出了這個問題。 為了支持較舊的硬件,我們需要支持 SSE2,並且 32 位整數的唯一向量乘法運算是pmuludq 。 (帶符號pmuldq是SSE4.1才加入的) (非加寬相對容易;隨機輸入 2x pmuludq並取 4 個結果的低半 ...

你將如何優化這個矢量化的諧波總和?

[英]how would you optimize this vectorized sum of harmonics?

我正在使用矢量化(僅 SSE2 max 作為 SIMD)將一堆諧波相加,每個諧波具有不同的相位/幅度。 這是我的實際嘗試: 但: 我想我可以優化它更多,也許用一些數學技巧,或者以一些增量保存 我不喜歡為V4重復一次“相同的代碼”,一次為remainder (如果諧波的數量不是 % 4) ...

如何將 X 字節或位從 __m128i 復制到標准內存中

[英]How to copy X bytes or bits from an __m128i into standard memory

我有一個循環,它通過_mm_add_epi16()將兩個數組中的 int16s 添加在一起。 有一個小數組和一個大數組,結果被寫回大數組。 如果內在函數已到達末尾,則它可能從小數組中獲得少於 8x 個 int16s(128 位) - 當我不想要所有 128 位時,如何將_mm_add_epi16() ...

測試 xmm 寄存器中的任何字節是否為 0

[英]Test if any byte in an xmm register is 0

我目前正在自學 SIMD,並且正在編寫一個相當簡單的字符串處理子程序。 但是,我僅限於 SSE2 ,這使我無法利用 ptest 找到 null 終端。 我目前試圖找到 null 終端的方式使我的 SIMD 循環有 >16 條指令,這違背了使用 SIMD 的目的——或者至少使它不值得。 我想知 ...


 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM