分享好友 最新动态首页 最新动态分类 切换频道
如何做网站?/百度竞价推广流程
2024-12-30 00:38

博客来源:http://blog.csdn.net/zyl910/article/details/8100744

如何做网站?/百度竞价推广流程

现在很多编译器支持intrinsic函数,这给编写SSE等SIMD代码带来了方便。但是各个编译器略有差异,于是我编写了zintrin.h,智能引入intrinsic函数。

  最早支持intrinsic函数的VC编译器是VC 6.0。它在装上Visual Studio 6.0 Service Pack 5、Visual C++ 6.0 Processor Pack这两个补丁后,便提供了mmintrin.h、mm3dnow.h、xmmintrin.h、emmintrin.h,用于支持MMX、3DNow!、SSE、SSE2的intrinsic函数。
  从VC2005开始,提供了intrin.h,用于引入所有的intrinsic函数。
  详见——
http://www.cnblogs.com/zyl910/archive/2012/02/28/vs_intrin_table.html
Intrinsics头文件与SIMD指令集、Visual Studio版本对应表

  如果希望得知当前编译环境是否支持某种intrinsic函数,只能利用_MSC_VER判断VC的版本 来间接确认。
  而且实际过程中会发现一些兼容性小问题,例如——VC不支持x64下的MMX指令、VC2008之前没有_mm_cvtss_f32 等。

  gcc也支持intrinsic函数。例如在Fedora 17中,“/usr/lib/gcc/i686-redhat-linux/4.7.0/include/”目录下有Intrinsics头文件。而对于Windows中的MinGW,Intrinsics头文件是在MinGW的“libgccmingw324.6.2include”子目录中。
  详见——
http://www.cnblogs.com/zyl910/archive/2012/08/27/intrin_table_gcc.html
GCC中的Intrinsics头文件与SIMD指令集、宏、参数的对应表

  gcc允许通过命令行参数来控制是否打开某种指令集的支持,例如“-mmmx”用于打开MMX支持。可在终端中执行“gcc --target-help”,得到详细的参数列表。

  当通过命令行参数打开指令集支持后,gcc会自动定义对应的预处理宏。例如用“-mmmx”打开MMX支持后,gcc会自动定义“__MMX__”这个预定义宏。这一类的预定义宏有——
__MMX__
__3dNOW__
__SSE__
__SSE2__
__SSE3__
__SSSE3__
__SSE4_1__
__SSE4_2__
__SSE4A__
__AES__
__PCLMUL__
__AVX__
__AVX2__
__F16C__
__FMA__
__FMA4__
__XOP__
__LWP__
__RDRND__
__FSGSBASE__
__LZCNT__
__POPCNT__
__BMI__
__BMI2__
__TBM__

  gcc用于引入所有x86平台intrinsic函数的头文件是“x86intrin.h”,它会根据那些指令集预定义宏来引入相关的intrinsic函数。例如有“__MMX__”宏时,x86intrin.h会引入MMX的intrinsic函数。

  我在Mac OS X系统中找了很久,貌似它不支持intrinsic函数。详细版本是——
操作系统:Mac OS X Lion 10.7.4(11E53)
编程工具:Xcode 4.4.1(1448),并装好了它的“Command Line Tools”。

  __llvm__这个预定义宏可用来判断是不是llvm-gcc。

  不同的编译器引入intrinsic函数的办法——
对于VS2005之前的版本,只能手动逐个逐个的包含emmintrin.h、mm3dnow.h
对于VS2005之后的版本,可以利用intrin.h引入所有intrinsic函数
对于GCC,首先应该判断__llvm__宏来排除llvm-gcc,然后利用x86intrin.h引入所有intrinsic函数。

  这样做太麻烦了,我想编写一个头文件智能引入intrinsic函数。这就是zintrin.h。

  其次——
VC中,没有直接判断是否支持某种intrinsic函数的办法,只能利用_MSC_VER判断VC的版本 来间接确认。而且还有x64环境下不支持MMX等特殊情况。
对于GCC,虽然可以利用__MMX__等宏判断是否打开了指令集支持,但这并不代表支持intrinsic函数。例如Mac OS X 中的 llvm-gcc,默认打开了__MMX__、__SSE__、__SSE2__,但它不支持intrinsic函数。

  于是我想,如果有一种统一的方式判断当前编译环境是否支持某种intrinsic函数的办法就好了。

  功能——
1. 引入了编译器支持的所有intrinsic函数.
2. 提供了 INTRIN_MMX 等一系列宏用于判断当前编译环境是否支持该intrin函数.
3. 兼容性补丁. 例如 _mm_cvtss_f32 等.


  用于判断当前编译环境是否支持该intrin函数的宏:
INTRIN_MMX
INTRIN_3dNOW
INTRIN_SSE
INTRIN_SSE2
INTRIN_SSE3
INTRIN_SSSE3
INTRIN_SSE4_1
INTRIN_SSE4_2
INTRIN_SSE4A
INTRIN_AES
INTRIN_PCLMUL
INTRIN_AVX
INTRIN_AVX2
INTRIN_F16C
INTRIN_FMA
INTRIN_FMA4
INTRIN_XOP
INTRIN_LWP
INTRIN_RDRND
INTRIN_FSGSBASE
INTRIN_LZCNT
INTRIN_POPCNT
INTRIN_BMI
INTRIN_BMI2
INTRIN_TBM

  全部代码——

 

  全部代码——

 

  全部代码——

 

 

参考文献——
《Predefined Macros》. http://msdn.microsoft.com/en-us/library/b0084kay(v=vs.110).aspx
《Intrinsics头文件与SIMD指令集、Visual Studio版本对应表》. http://www.cnblogs.com/zyl910/archive/2012/02/28/vs_intrin_table.html
《GCC中的Intrinsics头文件与SIMD指令集、宏、参数的对应表》. http://www.cnblogs.com/zyl910/archive/2012/08/27/intrin_table_gcc.html

 

最新文章
excel 区域内按行排序_在Excel 2010中对行进行排序
Most of the time when you're sorting in Excel, you sort based on the values in one or more columns. If your workbooks are like mine, it's rare that you sort horizontally, based on the values in a row. But if you ne
c编程向计算机发送数据,一文读懂一台计算机是如何把数据发送给另一台计算机的...
这是之前一篇文章的修订版,感觉是一篇很不错的文章,重新修改排版了下。前言天各一方的两台计算机是如何通信的呢?在成千上万的计算机中,为什么一台计算机能够准确着寻找到另外一台计算机,并且把数据发送
CTF 工具 集合
From:Hello CTF:在学习CTF前希望您具备一些CS领域的基础知识,这里推荐您先阅读 JANlittle师傅写的CS入门资料 ( 点此跳转 ) 大致具备CS领域的基本技能后再开始CTF的学习。 入入入入门(fén)综述࿱
AI小助手使用指南:涵盖TV版操作与百度AI小助手应用教程
在这个科技日新月异的时代人工智能()正在逐步渗透到咱们生活的各个角落从智能手机、智能家居到智能电视等设备。小助手作为人工智能技术的产物它能帮助我们更高效地完成日常任务如播放音乐、查询天气、设置闹钟等,甚至可以成为我们的生活
08山东电视台公共频道节目推介暨广告年会直播
12月2日19:00时现场直播2008山东电视台公共频道节目推介暨广告年会  【大片头】  【新闻女生组推介板块】  1、 开场歌舞:《魅力》2’40  表演:七名新闻女生  伴舞:20男生  【主持人开场】孙亮 郭培鑫  【《新闻女生组》
Android 的开源电话/通讯/IM聊天项目全集
一、Android的XMPP客户端 BeemBeem 是一个运行于 Android 手机平台的 XMPP (jabber) 的客户端软件,兼容标准的 XMPP 服务器和服务,例如 Ejabberd, Openfire, Facebook, 和 Gmail). 支持 SASL, 代理(Socks4, Socks5, HTTP), DNS SRV, and c
ai智能机器人源码定制开发快速搭建送服务器
聊天机器人chatai*近推出了一款新产品——-Lisa,它能帮助人们更好地交流和分享想法。这款软件目前还在测试阶段,已经有很多人使用过了。1:chat在线聊天机器人的开发背景随着移动互联网的发展,智能手机已经成为人们生活中不可或缺的工具
AI智能生成文字Logo:一站式解决个性化标识设计需求
在数字化浪潮的推动下形象已成为企业竞争力的关键组成部分。一个独有、个性化的标识不仅可以吸引消费者的目光还能传递企业的核心价值。传统的标识设计往往需要耗费大量时间和精力且难以满足个性化需求。如今智能生成文字Logo的出现为解决这
BTS WORLD
【基本介绍】『一睁眼竟是2012年,而且我还成了Big Hit的职员?!在BTS还没出现的世界,我成为了BTS的经纪人。现在他们能否出道,全看我了!』难道就是追星的最高境界?我还能回到原来的世界吗?如同梦境一般在眼前展开的的神秘故事,现在
Autodesk Maya 2023 for Mac 正版激活永久使用(支持M1)
兼容M1的Autodesk Maya 2023 终于更新啦!!玛雅是专业的三维动画设计工具,这次的maya2023中文版引入Blue Pencil,它取代了现有的油性铅笔工具,提供更多用于文本和形状的绘图工具,以及用于注释的图层系统,另外还更新了布尔建模、拓扑工
相关文章
推荐文章
发表评论
0评