首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

有没有办法用gcc自动生成MMX指令(而不是SSE指令

gcc是一种开源的编译器套件,用于编译C、C++和其他编程语言的源代码。它提供了丰富的编译选项和优化功能,可以生成针对不同处理器架构的指令集。

MMX(MultiMedia eXtensions)是Intel推出的一种多媒体指令集,用于加速多媒体数据的处理。MMX指令集主要用于处理像素、音频和视频等多媒体数据,提供了一些特殊的指令和寄存器,可以并行处理多个数据。

在gcc中,可以使用特定的编译选项来生成针对MMX指令集的代码。通过使用"-march"和"-mcpu"选项,可以指定目标处理器架构和CPU型号,以便gcc生成相应的指令集代码。例如,对于支持MMX指令集的Intel处理器,可以使用以下编译选项:

代码语言:txt
复制
gcc -march=pentium -mmmx -o output input.c

上述命令中,"-march=pentium"指定目标处理器架构为Pentium系列,"-mmmx"指定使用MMX指令集。然后,将输入源文件"input.c"编译为可执行文件"output"。

需要注意的是,MMX指令集已经过时,现代的处理器更倾向于使用SSE(Streaming SIMD Extensions)指令集来进行多媒体数据的处理。SSE指令集提供了更多的功能和性能优化。因此,在实际开发中,建议使用SSE指令集来代替MMX指令集。

对于云计算领域,如果需要进行多媒体数据处理,可以考虑使用腾讯云的云服务器(CVM)产品。腾讯云的云服务器提供了多种配置和规格的虚拟机实例,可以满足不同应用场景的需求。您可以通过以下链接了解更多关于腾讯云云服务器的信息:

腾讯云云服务器产品介绍:https://cloud.tencent.com/product/cvm

总结:通过gcc编译器的特定选项,可以生成针对MMX指令集的代码。然而,由于MMX指令集已经过时,建议在实际开发中使用更先进的SSE指令集。对于云计算领域的多媒体数据处理需求,可以考虑使用腾讯云的云服务器产品。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Doris开发手记2:SIMD指令优化存储层的热点代码

实际数据Page之中存储的不是原始的字符串了,而是偏移量了。实际解码的时候,则需要分配内存,并从字典之中将对应偏移量的内存拷贝出来。这就是上面代码热点产生的地方。...当代的X86处理器通常都支持了MMXSSE,AVX等SIMD指令,通过这样的方式来加快了CPU的计算。 当然SIMD指令也是有一定代价的,从上面的图中也能看出端倪。...2.2 如何生成SIMD指令 通常生成SIMD指令的方式通常有两种: Auto Vectorized 自动向量化,也就是编译器自动去分析for循环是否能够向量化。...如果可以的话,便自动生成向量化的代码,通常我们开始的-O3优化便会开启自动向量化。...比如实现的AVX的向量化算法并不能在不支持AVX指令集的机器上运行,也无法SSE指令集代替。 3.开发起来,解决问题 通过上一小节对SIMD指令的分析。

1.2K11

浅析Clickhouse的向量化执行

关于Clickhouse之所以会像闪电一样快,是多方面的优化,包过但不仅限于:高效且磁盘友好的列式存储,高效的数据压缩,精心设计的各类索引,并行分布式查询,运行时代码生成等。...为了制作n杯果汁,非向量化执行的方式是1台榨汁机重复循环制作n次,向量化执行的方式是n台榨汁机只执行1次。 为了实现向量化执行,需要利用CPU的SIMD指令。...Intel的第一版SIMD扩展指令集称为MMX,于1997年发布。...ClickHouse的向量化执行机制主要依赖于SSE指令集,下面简要介绍之。 SSE指令SSE指令集是MMX的继任者,其第一版早在Pentium III时代就被引入了。...Intel将这类指令和函数统称为intrinsics,官方提供的速查手册见这里; 开启编译器的优化(-msse、-msse2等等),编译器会自动将符合条件的情景(如数组相加、矩阵相乘等)编译为intrinsic

53520

Doris开发手记2:SIMD指令优化存储层的热点代码

实际数据Page之中存储的不是原始的字符串了,而是偏移量了。实际解码的时候,则需要分配内存,并从字典之中将对应偏移量的内存拷贝出来。这就是上面代码热点产生的地方。...当代的X86处理器通常都支持了MMXSSE,AVX等SIMD指令,通过这样的方式来加快了CPU的计算。 当然SIMD指令也是有一定代价的,从上面的图中也能看出端倪。...2.2 如何生成SIMD指令 通常生成SIMD指令的方式通常有两种: Auto Vectorized 自动向量化,也就是编译器自动去分析for循环是否能够向量化。...如果可以的话,便自动生成向量化的代码,通常我们开始的-O3优化便会开启自动向量化。...比如实现的AVX的向量化算法并不能在不支持AVX指令集的机器上运行,也无法SSE指令集代替。 3.开发起来,解决问题 通过上一小节对SIMD指令的分析。

1.1K30

Qt-4.8.7交叉编译平台的搭建、移植详解( aarch32、aarch64 、mips64)「建议收藏」

指令集找不到,因此需要在执行配置时指定编译的架构,即添加:-DQT_ARCH_ARM。...截图如下: 然后进入lib目录,使用file *命令查看生成的动态库类型,如果显示为下图,则表示生成aarch32架构的qmake以及qt库成功。...指令集找不到,因此需要在执行配置时指定编译的架构,即添加:-arch generic。...然后进入lib目录,使用file *命令查看生成的动态库类型,如果显示为下图,则表示生成aarch64架构的qmake以及qt库成功。...然后进入lib目录,使用file *命令查看生成的动态库类型,如果显示为下图,则表示生成mips64el架构的qmake以及qt库成功。

7.3K21

i386和i686的具体定义

alpha、PowerPC、Sun等各个不同版本,所有从Intel386-P4都用i386版本,但i386版本中有几个内核(i486,i486,i586,i686),安装时安装程序检测到你得CPU级别后,自动为你安装相应内核...软件包为了能发挥好cpu的全部性能,就加入cpu相对应能指行的指令。因此就产生了各种不同的软件包。所以,i686的软件包能在奔腾二代以上的cpu上执行,但基本不能在此之先的cpu如486上执行。...i686是pentiumpro及以后的通用arch,i386是所有x86的通用arch,i386包括i686没有包括的就是386、486、586(pentium)、pentium-mmx 现在应该没有人还在用...pentium2: MMX pentium3(m): MMX SSE pentium-m: MMX SSE SSE2...pentium4(m): MMX SSE SSE2 prescott: MMX SSE SSE2 SSE3

1.2K60

i386i686x86-64的区别

alpha、PowerPC、Sun等各个不同版本,所有从Intel386-P4都用i386版本,但i386版本中有几个内核(i486,i486,i586,i686),安装时安装程序检测到你得CPU级别后,自动为你安装相应内核...软件包为了能发挥好cpu的全部性能,就加入cpu相对应能指行的指令。因此就产生了各种不同的软件包。所以,i686的软件包能在奔腾二代以上的cpu上执行,但基本不能在此之先的cpu如486上执行。...i686是pentiumpro及以后的通用arch,i386是所有x86的通用arch,i386包括i686没有包括的就是386、486、586(pentium)、pentium-mmx 现在应该没有人还在用...rpm都是为i386打的包,运行效率会低很多。 兼容性关系大概是 i386: i386: i486: winchip-c6: MMX 3dNOW!...: MMX SSE SSE2 pentium4(m): MMX SSE SSE2 prescott: MMX SSE SSE2 SSE3 nocona: MMX SSE SSE2 SSE3 (64bit

4.4K10

这篇文章不知道起什么名字

我这个文章不知道起什么名字,我就是在课堂上面搭建的了一个GCC的环境 help命令展示所有的帮助文件 打印所有平台的编译信息 gcc版本 对文件进行头文件展开 -E是展开头文件的编译开关 这个开关是生成汇编语言...-nostdlib:不链接系统标准启动文件和标准库文件,只把指定的文件传递给链接器 -W:打印一些额外的警告信息 -w:禁止显示所有警告信息 -msse/-msse2/mmx/mno-sse/mno-sse2.../mno-mmx:使用或者不使用MMXSSESSE2指令 -m32/-m64:生成32位/64位机器上的代码 -mpush-args/mon-push-args:(不)使用push指令来进行存储参数...创建并使用静态链接库方法 编写C源文件,设为static_lib.c,其中写入需要重复调用的函数,然后使用命令gcc -c static_lib.c生成目标文件static_lib.o 使用ar工具创建静态库.../static_lib.a -o app编译生成可执行文件app 创建并使用动态库方法 编写C源文件share_lib.c,写入需要重复调用的函数,然后使用命令gcc -shared -FPIC -o

72530

上古遗民-英特尔® Galileo

它比较像是改良了制程,但阉割了 MMX 指令集的奔腾 I 代处理器....从支持的指令集看,Quark 并不像其他 Atom 芯片那样支持 x64、MMXSSE 等高级的指令集,但包含了浮点指令集(x87)。...虽然 Intel 的官方参数中提到 Quark 的指令集是与奔腾兼容的,但很明显,由于缺少了 MMX 指令这个作为奔腾处理器的重要标志,实际上很多可以在奔腾 I CPU上运行的程序在 Quark 上可能是不能运行的...这点算是一个遗憾,缺少 MMXSSE 这类 SIMD 的指令集加速,使得 Quark 在处理多媒体、图像运算、计算机视觉等算法上可能会表现的较差。...因此现在的程序只要不带有 MMXSSE 指令,理论上是可以在 Quark 上运行的很好的。在功耗方面,Quark 将 max TDP 控制在 2.2W。

55620

各种开源汇编、反汇编引擎的非专业比较

指令集支持不全,由于Ollydbg年久失修,现在甚至连对MMX指令集都不全,现在的INTEL/AMD的扩展指令集标准又更新了多个版本,什么SSE5/AVX/AES/XOP就更别提了,完全无法解析。...目前实现的扩展指令集有: FPU, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, VMX, CLMUL, AES, MPX   同时它也给不同种类的指令进行了分类...udis86支持的X86扩展指令集有: MMX, FPU (x87), AMD 3DNow, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AES, AMD-V,...avx512f, avx512pf, bmi, bmi2, fma, fma4, fsgsbase, lzcnt, mmx, sha, slm, sse, sse2, sse3, sse4.1, sse4.2...,但是又各自有那么一丁点儿的缺陷,这世上没有完美的事情,人家都开源了,有的就不错了,自己总要做些事情不是

3.2K30

i386和i686的区别

alpha、PowerPC、Sun等各个不同版本,所有从Intel386-P4都用i386版本,但i386版本中有几个内核(i486,i486,i586,i686),安装时安装程序检测到你得CPU级别后,自动为你安装相应内核...软件包为了能发挥好cpu的全部性能,就加入cpu相对应能指行的指令。因此就产生了各种不同的软件包。所以,i686的软件包能在奔腾二代以上的cpu上执行,但基本不能在此之先的cpu如486上执行。...i686是pentiumpro及以后的通用arch,i386是所有x86的通用arch,i386包括i686没有包括的就是386、486、586(pentium)、pentium-mmx 现在应该没有人还在用...rpm都是为i386打的包,运行效率会低很多。 兼容性关系大概是 i386: i386: i486: winchip-c6: MMX 3dNOW!...: MMX SSE SSE2 pentium4(m): MMX SSE SSE2 prescott: MMX SSE SSE2 SSE3 nocona: MMX SSE SSE2 SSE3 (64bit

1.7K20

vc2010 sse指令优化效果明显

对于大量浮点数运算,sse指令优化的效果是非常明显的。...vs2010的编译器内置函数([Compiler Intrinsics])支持see指令,所以程序员不必痛苦的用汇编指令来实现sse指令优化,关于详细的sse指令说明参见microsoft的官方文档...Streaming SIMD Extensions (SSE)(点击打开链接) 下面这段代码简单的循环实现两个浮点数组的点积之和,sse指令重写之后效率相差4倍多。...其实道理也很简单,每条sse指令可以实现128位数的运算,对float型数据,就是4组float同时运算,循环次数减少4倍,效率自然也能提高4倍。...也可以通过程序检测cpu是否支持sse,参见 C++环境测试CPU是否支持MMXSSE等(点击打开链接) gcc编译也支持sse,调用方法也差不多,还在实现中。

33920

Xmake v2.8.2 发布,官方包仓库数量突破 1k

我们可以配置 soname 的版本后缀名称,xmake 会在编译、安装动态库的时候,自动生成符号链接,执行指定版本的动态库。...,目前支持以下几种扩展指令集: add_vectorexts("mmx") add_vectorexts("neon") add_vectorexts("avx", "avx2", "avx512")...add_vectorexts("sse", "sse2", "sse3", "ssse3", "sse4.2") 其中,avx512, sse4.2 是我们新版本新增的指令配置,另外我们还新增了一个...另外,它的搜索路径也是需要通过 add_includedirs 来控制,不是直接配置文件路径。...这些被添加文件不是代码文件,不会参与编译,也不会被安装,仅仅只是能够让用户方便的在生成的工程 IDE 中,快速编辑访问它们。 将来,我们也可能用此接口做更多其他的事情。

24410

Linux系统中使用GCC CPU参数优化代码编译

Linux系统中使用GCC CPU参数优化代码编译 使用特定的GCC参数可以使编译出的程序执行效率有较大提升。...具体如下: 1、优化原理: 在编译程序时,借助参数传递的方法,使用与系统CPU相匹配的gcc参数,编译出的程序就是为系统CPU进行特定优化过的,因而执行速度和效率都会是最好。...(2) 对于Gentoo Linux或FreeBSD可以通过修改/etc/make.conf添加参数的方法来实现,不必使用参数传递法。...下面对其中的一些参数进行具体说明: -O3:相对于-O、-O1、-O2,-O3开启了所有GCC支持的优化特性; -msse2:开启CPU所支持的sse2指令集; -mmmx:参考-msse2 -mfpmath...=sse:为指定指令生成浮点运算特性(优化浮点运算功能); -mcpu:指定CPU型号; -march:指定CPU型号,基本同-mcpu,GCC根据-march设定的CPU型号决定在生成代码时可以使用哪些种类的指令

2.4K10

g++入门教程

使用-S选项,只进行编译不进行汇编,生成汇编代码。 g++ -S test.i -o test.s //生成汇编.s文件 (3)汇编(Assembly)。...-fno-strict-prototype 只对g++起作用,使用这个选项,g++将对不带参数的函数,都认为是没有显式的对参数的个数和类型说明,不是没有 参数.gcc无论是否使用这个参数,都将对没有带参数的函数...-m32 -m64 生成32bits程序或64bits程序 -mmmx -msse -msse2 -mno-mmx -mno-sse -mno-sse2 使用或者不使用MMXSSESSE2指令。...-M 生成文件依赖的信息,包含目标文件所依赖的所有源文件。你可以gcc -M hello.c来测试一下,很简单。...例子用法: gcc -x c hello.pig -x none filename 关掉上一个选项,也就是让gcc根据文件名后缀,自动识别文件类型,例子用法: gcc -x c hello.pig

14.5K76

CPU SIMD简介

1996年,Intel针对X86指令集,推出了MMX扩展,这是第一次在商用硬件上支持SIMD技术,1999年,Intel在P3中推出了SSE(Streaming SIMD Extensions),基于128...当然,你也可以SSE指令_mm_set_ps1对result_sum4初始化。...结论是,加减乘除大概相当,指数会有较大提高,我查看了Release下对应的汇编,发现编译器对这类简单的for循环,会自动编译为SSE指令,因此,对这类代码,我们并不需要改造,而且我们的改造不见得比编译器写的好...最后,我要说的是,虽然学习SSE并不难,但在实践中还有很多综合应用,并且后续可能会有新增的指令集,不同CPU之间的兼容问题,所以,不建议自己写,而是一些专业的第三方库。...我们的重点不是写一套自己的SSE/AVX库。 要点4:专业的人做专业的事。

2.3K30

第十二章:向量指令 第一部分

MMX 让位于更强大的 128 位 SSE 浮点和 SSE2 整数及双精度浮点指令,这些指令使用 XMM0–XMM7 寄存器。...随着 64 位 CPU 的普及,MMX 指令集变得过时。然而,随着 AVX 和 AVX2 的出现,SSESSE2 指令并没有被废弃,仍然被积极使用。...实际上,这些函数并不是软件实现的:相反,编译器在生成目标代码时,向量指令替换了对它们的每个调用。因此,内嵌函数允许使用高级语言编写程序,其性能接近或等同于汇编程序。...尽管它们不是 C/C++ 语言标准的一部分,但主流编译器如 GCC、Clang、MSVC、Intel 都支持内嵌函数。 它们还有助于简化各种数据类型的处理。...与 SSE 不同,这些指令接受三个不是两个寄存器操作数:两个源寄存器和一个目标寄存器。执行指令后,源寄存器的内容不会丢失。

10910
领券