ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

设置多媒体指令加速级

2021-05-06 23:04:45  阅读:161  来源: 互联网

标签:AVX512F 0000 指令集 int 指令 Extensions 设置 多媒体


  多媒体指令加速级(Multimedia instruction acceleration level,MIAL)是将多媒体指令分为“级”,按不同能力采用不同加速方案,这里给出思路、方案、及源代码。针对单精度浮点,主要应用于人工智能、视频、3维等并行运算。

1. 分级加速方案,有助于自动有效利用系统资源,提高程序运行速度,这里给出3级区别

    0级:CPU不支持多媒体加速指令,无加速能力。

    1级:使用SSE2指令集,寄存器为16字节(128位)长度。支持4个单精度浮点同时计算,4倍运算加速。

    2级:使用AVX2指令集,寄存器为32字节(256位)长度。支持8个单精度浮点同时计算,8倍运算加速。

    3级:使用AVX512F指令集,寄存器为64字节(512位)长度。支持16个单精度浮点同时计算,16倍运算加速。

2. 源代码

#include <intrin.h>
 
int const CpuAccLevel_1 = 1; // 使用一级多媒体指令 1: SSE2
int const CpuAccLevel_2 = 2; // 使用二级多媒体指令 2: AVX2
int const CpuAccLevel_3 = 3; // 使用三级多媒体指令 3: AVX512F

static const int Mark_SSE2 = 0x04000000;    // 0000 0100 0000 0000 0000 0000 0000 0000 | 26
static const int Mark_AVX2 = 0x00000010;    // 0000 0000 0000 0000 0000 0000 0001 0000 | 5
static const int Mark_AVX512F = 0x00010000; // 0000 0000 0000 0001 0000 0000 0000 0000 | 16

static bool bSSE2_Extensions,
            bAVX2_Extensions,
            bAVX512F_Extensions;

int GetCpuAccLevel(void) // 获取CPU指令级
{
    int dwRet,CPUInfo[4];

    __cpuid(CPUInfo, 1); // 常规选项

    if (CPUInfo[3] & Mark_SSE2) 
        bSSE2_Extensions = true;
        else
        bSSE2_Extensions = false;

    __cpuid(CPUInfo, 7);

    if (CPUInfo[1] & Mark_AVX2) 
        bAVX2_Extensions = true;
        else
        bAVX2_Extensions = false;

    if (CPUInfo[1] & Mark_AVX512F) 
        bAVX512F_Extensions = true;
        else
        bAVX512F_Extensions = false;

    dwRet = 0;
    if (bAVX512F_Extensions)
        dwRet = CpuAccLevel_3;
        else
    if (bAVX2_Extensions)
	       dwRet = CpuAccLevel_2;  
        else
    if (bSSE2_Extensions) 
        dwRet = CpuAccLevel_1;
         
    return dwRet;
}

注:

1. 在VS2017 c++ 调试通过。

2. 仅在工作机(Intel主机SSE2指令集)测试通过,其他未测试。

3. 近期上市的 Intel 11 代处理器开始支持AVX512F指令集。

4. 由于 Intel 11 代处理器明确支持AVX512F指令集,所以简化了我的《多媒体指令支持级设置》。

5. 未发现 VS2017/VS2019 c++ 支持AVX512F指令集。

参考资料

1. https://docs.microsoft.com/en-us/cpp/intrinsics/cpuid-cpuidex?redirectedfrom=MSDN&view=msvc-150

 

标签:AVX512F,0000,指令集,int,指令,Extensions,设置,多媒体
来源: https://www.cnblogs.com/hbg200/p/14737183.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有