本文主要是介绍C/C++相关知识点随记(持续更新),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
个人在C/C++程序中的一些语法小结
一.一些比较习惯的用法
1.C++编程中,如下情况,表示对无符号数0按位取反后右移一位,若在在32系统中,就是将来32位的0取反后右移一位的值赋给inf
const int inf = ~0u>>1
详细说明:
~ 逐位求反
u 后辍为 定义unsigned类型
>>右移
2.如下表示无符号长整数常量1,用16进制表示
0x1ul
后缀u代表无符号数
后缀l代表长型数
这三个标记都不区分大小写
二.关于指令集
#include <immintrin.h> //immintrin.h Intel-specific intrinsics(AVX)
引入因特尔指令集
Intrinsics头文件与SIMD指令集、Visual Studio版本对应表(转)
File:Intrinsics头文件
描述:指令集描述
VS:Visual Studio版本号
VisualStudio:Visual Studio版本名
File | 描述 | VS | VisualStudio |
intrin.h | All Architectures | 8.0 | 2005 |
mmintrin.h | MMX intrinsics | 6.0 | 6.0 SP5+PP5 |
xmmintrin.h | Streaming SIMD Extensions intrinsics | 6.0 | 6.0 SP5+PP5 |
emmintrin.h | Willamette New Instruction intrinsics (SSE2) | 6.0 | 6.0 SP5+PP5 |
pmmintrin.h | SSE3 intrinsics | 9.0 | 2008 |
tmmintrin.h | SSE3 intrinsics | 9.0 | 2008 |
smmintrin.h | SSE4.1 intrinsics | 9.0 | 2008 |
nmmintrin.h | SSE4.2 intrinsics. | 9.0 | 2008 |
wmmintrin.h | AES and PCLMULQDQ intrinsics. | 10.0 | 2010 |
immintrin.h | Intel-specific intrinsics(AVX) | 10.0 | 2010 SP1 |
ammintrin.h | AMD-specific intrinsics (FMA4, LWP, XOP) | 10.0 | 2010 SP1 |
mm3dnow.h | AMD 3DNow! intrinsics | 6.0 | 6.0 SP5+PP5 |
armintr.h:ARM的常用指令集。
arm_neon.h:ARM的neon指令集。
intrin.h中以前大段的ARM Intrinsics被移到armintr.h中去了,现在的intrin.h只需引入armintr.h(拥有_M_ARM宏时)。
但是intrin.h并没有引入arm_neon.h。搜索了一下其他头文件,也没有引入arm_neon.h。看来不会自动引入,需要开发者根据情况手动引入arm_neon.h。
又对比了一下原来就有Intrinsics头文件,发现两个文件增加了新的Intrinsics函数集——
immintrin.h:F16C、RDRAND、FSGSBASE、FMA、AVX2、BMI1、BMI2、LZCNT、INVPCID、HLE、RTM。
ammintrin.h:BMI1、TBM。
指令简介——
F16C、RDRAND、FSGSBASE:这些是Ivy Bridge架构的新指令。
FMA、AVX2、BMI1、BMI2、INVPCID、HLE、RTM:这些是Haswell架构的新指令。
LZCNT:AMD的ABM指令集,现在Intel对其支持。以前intrin.h有一个双下划线版的,现在immintrin.h提供单下划线版。
TBM:AMD的TBM指令集。
Haswell架构在2013年第二季度才发售,VC2012已提前做好准备。
SSE是指令集的简称,它包括70条指令,其中包含单指令多数据浮点计算、以及额外的SIMD整数和高速缓存控制指令。其优势包括:更高分辨率的图像浏览和处理、高质量音频、MPEG2视频、同时MPEG2加解密;语音识别占用更少CPU资源;更高精度和更快响应速度。SSE(Streaming SIMD Extensions)是英特尔在AMD的3D Now!发布一年之后,在其计算机芯片Pentium III中引入的指令集,是MMX的超集。AMD后来在Athlon XP中加入了对这个指令集的支持。这个指令集增加了对8个128位寄存器XMM0-XMM7的支持,每个寄存器可以存储4个单精度浮点数。使用这些寄存器的程序必须使用FXSAVE和FXRSTR指令来保持和恢复状态。但是在Pentium III对SSE的实现中,浮点数寄存器又一次被新的指令集占用了,但是这一次切换运算模式不是必要的了,只是SSE和浮点数指令不能同时进入CPU的处理线而已。
AVX指令集是Sandy Bridge和Larrabee架构下的新指令集。AVX是在之前的128bit扩展到和256bit的SIMD(Single Instruction, Multiple Data)。而Sandy Bridge的SIMD演算单元扩展到256bits的同时数据传输也获得了提升,所以从理论上看CPU内核浮点运算性能提升到了2倍。
这篇关于C/C++相关知识点随记(持续更新)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!