我们试图以高性能的方式比较使用不等式操作的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