C Linux下基于MMX的图像处理
我想使用MMX指令集来优化我的Linux C程序,该程序对以RGB格式存储的图像执行大量操作(每个RGB组件存储在一个无符号字符中)。这些操作很简单:我将一个图像从另一个像素中逐像素减去,然后累积差值的绝对值之和。(基本上,我有一个小的图像,或者说模式,我试图在一个更大的图像中找到这个模式)C Linux下基于MMX的图像处理,c,image-processing,mmx,C,Image Processing,Mmx,我想使用MMX指令集来优化我的Linux C程序,该程序对以RGB格式存储的图像执行大量操作(每个RGB组件存储在一个无符号字符中)。这些操作很简单:我将一个图像从另一个像素中逐像素减去,然后累积差值的绝对值之和。(基本上,我有一个小的图像,或者说模式,我试图在一个更大的图像中找到这个模式) 我知道这可以用汇编语言编码,使用MMX指令以SIMD方式执行单个字节操作。然而,有没有更简单的方法?可能是使用MMX指令的库或更高级别的接口?通常有一个标题#包含,通常称为intrinsics.h。演示如何
我知道这可以用汇编语言编码,使用MMX指令以SIMD方式执行单个字节操作。然而,有没有更简单的方法?可能是使用MMX指令的库或更高级别的接口?通常有一个标题
#包含
,通常称为intrinsics.h
。演示如何将MMX与C一起使用。它包括文件emmintrin.h
。也许这个文件存在于Linux中
此外,如果您正在使用最新的硬件,您可能希望至少使用SSE,如果不是SSE2的话。我相信它们也可以以类似的方式包含进来。你看过这个项目吗?嗯,谢谢你的帮助,但我认为这与我的问题无关实际上,本页是如何将MMX指令合并到GNU C代码中的一个很好的简明说明和示例:尝试使用Intel IPP LIB,它们有linux版本,并且在内部使用SIMD指令。不幸的是,它是一个payware SDK(免费redistribs),但您可以安装并使用它一段时间而不必购买任何东西。英特尔C编译器不是免费的非商业用途吗?是的,我有一个非常新的CPU。我应该使用SSE2而不是MMX指令吗?这可能会容易得多,因为我直接使用C中的_mm_add_pi8()之类的指令。这等同于用汇编语言编写MMX指令吗?