altivec

    2熱度

    1回答

    我想確定何時激活一些Altivec代碼路徑。當我檢查-qaltivec生效時的預處理器宏時,我看不到相應的預處理器宏(請參見下文)。 我們擔心或恐懼的是需要-qaltivec和-DALTIVEC=1或類似的。用戶幾乎從不閱讀手冊,因此會爲該平臺生成無盡的問題和錯誤報告。如果RTFM能夠發揮作用,那麼在過去的50年左右就會發生。 當-qaltivec有效時,XL/C信號Altivec是否有效?如果不

    1熱度

    1回答

    我試圖將一些ARM NEON代碼移植到AltiVec。我們的NEON代碼有兩個LOAD,一個ROT,一個XOR和一個存儲,所以它看起來像一個簡單的測試案例。根據IBM的vec_rl文檔: 結果的每個元素都是通過將左邊的相應元素旋轉b的相應元素指定的位數獲得的。 該文檔繼續說vector unsigned int是,除非-qarch=power8最大的數據類型,在這種情況下vector unsign

    2熱度

    3回答

    我試圖在PPC64-LE上編譯源文件。我正在使用xlC編譯器,編譯失敗。海灣合作委員會接受該計劃,所以我不確定問題的原因是什麼。 這裏的命令行: $ xlc test-p8.c -qarch=pwr8 -qaltivec -o test-p8.exe 這裏的編譯錯誤: "test-p8.c", line 113.52: 1506-324 (S) "int" cannot be converte

    0熱度

    1回答

    我一直在使用altivec實現基本的數學運算,作爲學習即將到來的項目的simd的一種方式。此外,爲了看到它的性能優勢,我追蹤了執行操作需要多長時間,但我遇到了一些奇怪的事情。 我做的第一件事是將兩個向量加在一起並減去兩個向量。這工作正常。接下來我做的是將兩個向量放在一起。然而,乘法比加法更快,即使使用較少的時鐘週期來增加經文的乘積,這取決於我的特定CPU數據表中關於所用指令的說法。 我有兩個數組,

    0熱度

    1回答

    我正在使用內置的C/C++工作。我需要指令lvd2x將未對齊的數據加載到VMX寄存器中。 Power7和Power8處理器上可以看到lvd2x。 GCC提供vec_vsx_ld內置執行任務。據IBM XL C/C++ for Linux, V13.1.5,第4章,增強在13.1.4版本中增加: 新的內置功能 下GCC載體的內置功能的支持: vec_vsx_ld ... 該代碼對於XL C來說是保護

    5熱度

    1回答

    我們在幾個地方對一個向量進行排列,我們需要使用內置的vec_perm來區分0值。我們一直無法找到vec_zero()或類似的東西,所以我們想知道我們應該如何處理。 該代碼目前使用兩種策略。第一個策略是一個載體負載: __attribute__((aligned(16))) static const uint8_t z[16] = { 0,0,0,0, 0,0,0,0, 0,0,0,0,

    0熱度

    2回答

    我正在使用AltiVec編程接口進行項目工作。 在一個地方,我想從一個向量寄存器8個字節存儲到緩衝器中。 在SSE,我們有一個固有_mm_storel_epi64到低8個字節SIMD寄存器的存儲到緩衝器中。 上的AltiVec執行8字節存儲任何想法?

    1熱度

    2回答

    請原諒我對以下問題的無知。我們支持GCC 4.8(及以上)和IBM XL C/C++ 12(及以上)。我們還在AIX和Linux上支持big和little-endian。編譯器和平臺使代碼相當混亂。 我們希望將常量1加載到VSX寄存器中。這是我們已經能夠製作的代碼,但它似乎是錯誤的,因爲它非常複雜。宏XLC_VERSION,GCC_VERSION和LITTLE_ENDIAN具有它們的習慣含義,所以

    1熱度

    1回答

    我試圖追查Power8 Power8上運行時的endianess問題。大端是可以的,小端有一些麻煩。 低於uint8x16_p8是typedef對於__vector unsigned char。在大端機器,我看到: 1110 uint8x16_p8 r5 = (uint8x16_p8)VectorLoadKey(s_mask); (gdb) 1112 for (unsigned int i

    2熱度

    1回答

    我試圖移植一個SSE函數,它可以得到兩個8位無符號整數數組的絕對差值。 它看起來像: uint64_t AbsDiffSum(const uint8_t * a, const uint8_t * b, size_t size) { assert(size%16 == 0); __m128i _sum = _mm_setzero_si128(); for(size_t