我有一個布爾表達式,我已經設法在SSE2中實現。現在我希望嘗試在AVX中實現它,利用並行性增加的另外一個因子2(從128位SIMD類型到256)。但是,AVX不支持整數運算(AVX2,但我正在使用Sandy Bridge處理器,因此目前它不是一種選擇)。但是,因爲有AVX intrinsics for bitwise operations。我想我可以嘗試通過將我的整數類型轉換爲浮點類型並查看它是否工作。有沒有辦法在AVX上模擬_m256類型的整數按位運算?
第一次測試是成功的:
__m256 ones = _mm256_set_ps(1,1,1,1,1,1,1,1);
__m256 twos = _mm256_set_ps(2,2,2,2,2,2,2,2);
__m256 result = _mm256_and_ps(ones, twos);
我guetting全部爲0,因爲我應該。 Simularly AND'ing的二進制補碼,而不是我得到的2的結果,但嘗試11 XOR 4因此,當:
__m256 elevens = _mm256_set_ps(11,11,11,11,11,11,11,11);
__m256 fours = _mm256_set_ps(4,4,4,4,4,4,4,4);
__m256 result2 = _mm256_xor_ps(elevens, fours);
結果是6.46e-46(即接近於0),而不是15 Simularly做11或4給我的價值是22而不是15,因爲它應該是。我不明白這是爲什麼。這是一個錯誤或缺少一些配置嗎?
我實際上期待我的假設是使用float,就好像它們是不能工作的整數一樣,因爲初始化爲float值的整數實際上可能不是精確值,而是近似值。但即使如此,我對我得到的結果感到驚訝。
有沒有人有這個問題的解決方案,或者我必須升級我的CPU來獲得支持AVX2的支持?
這聽起來像你打印一個整數作爲一個浮動得到6.46e-46。你確定你的'printf()'格式說明符正確嗎? –
我沒有打印。我剛剛檢查了Visual Studio調試器中的值。 – Toby999