我們試圖以高性能的方式比較使用不等式操作的signed int
值的兩個大小相同的本機數組,其中值爲<,< =>,>和> =。將許多值進行比較時,true/false
結果將會輸入相同大小輸入的char
陣列,其中0x00
表示false
和0xff
表示true
。signed int數組的高性能比較(使用Intel IPP庫)
爲了實現這一目標,我們使用了英特爾IPP庫。問題在於我們發現從圖像和視頻處理庫中找到的名爲ippiCompare_*
的操作只支持unsigned char
(Ipp8u
),signed/unsigned short
(Ipp16s/Ipp16u
)和float
(Ipp32f
)類型的函數。它不直接支持signed int
(Ipp32s
)
我(只)設想解決這個的兩種可能的方式:
鑄造數組的直接支持的類型之一,並執行在多個步驟進行比較(它將成爲兩倍大小的短陣列或四倍大小的char數組)併合並中間結果。
使用另一個函數直接支持來自IPP或另一個庫的
signed int
數組,可以在性能方面做一些等同的事情。
但是可能有其他創造性的方法......所以我問你是否有幫助! :)
PS:使用英特爾IPP的優勢在於大型陣列的性能提升:它同時使用多值處理器功能和多個內核(也許還有更多技巧)。所以簡單的環路解決方案不會像快速AFAIK那樣做。
PS2:鏈接,ippiCompare_* doc
我現在正在檢查MMX操作,這似乎是完成我的目標的好方法。在這種情況下,我只是不確定多核的使用情況:它看起來不是「自動地」完成的,對嗎? – Chuim 2009-10-19 12:48:15
否。並且由於兩個內核共享資源的一部分,如緩存和內存的最後一級,內存帶寬很可能成爲瓶頸。對於一個如此簡單的例程來說,這可能是不值得的。或者更糟糕的是,表現可能因各種原因而受到影響 – hirschhornsalz 2009-10-19 15:22:22