AMD或Intel上编译出来的程序,可以跑在海光上吗?
在上一篇博文《海光处理器与AMD Zen1的指令差异-CSDN博客》中发现,海光相比AMD,缺失了一些指令集。
那么在AMD或Intel上编译出来的程序,可以跑在海光上吗?
这个问题的关键,在于编译器默认使用哪些指令来编译程序。以CentOS8.4为例,它自带的gcc版本为gcc version 8.4.1 20200928:
| [root@CentOS8 ~]# gcc -v Using built-in specs. COLLECT_GCC=/usr/bin/gcc COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper OFFLOAD_TARGET_NAMES=nvptx-none OFFLOAD_TARGET_DEFAULT=1 Target: x86_64-redhat-linux Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --disable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux Thread model: posix gcc version 8.4.1 20200928 (Red Hat 8.4.1-1) (GCC) |
gcc在编译的时候,可通过-march=来指定要使用的指令范围,默认值为-march=x86-64,这个默认值是构建gcc自身时指定的,即上表中的--with-arch_32=x86-64。
接下来看一下-march=x86-64代表的指令范围。
| [root@CentOS8 ~]# gcc -march=x86-64 -c -Q --help=target | grep -i enabled -m128bit-long-double [enabled] -m64 [enabled] -m80387 [enabled] -malign-stringops [enabled] -mavx256-split-unaligned-load [enabled] -mavx256-split-unaligned-store [enabled] -mfancy-math-387 [enabled] -mfp-ret-in-387 [enabled] -mfxsr [enabled] -mglibc [enabled] -mhard-float [enabled] -mieee-fp [enabled] -mlong-double-80 [enabled] -mmmx [enabled] -mno-sse4 [enabled] -mpush-args [enabled] -mred-zone [enabled] -msse [enabled] -msse2 [enabled] -mstv [enabled] -mtls-direct-seg-refs [enabled] -mvzeroupper [enabled] |
这些指令代表什么意思呢?
| -march=x86-64 of GCC8.4.1(CentOS8.4) | x86-64 | Instructions |
| m128bit-long-double | [enabled] | sizeof(long double) is 16. |
| m64 | [enabled] | Generate 64bit x86-64 code. |
| m80387 | [enabled] | Use hardware fp. |
| malign-stringops | [enabled] | Align destination of the string operations. |
| march= | x86-64 | Generate code for given CPU. |
| mavx256-split-unaligned-load | [enabled] | d Split 32-byte AVX unaligned load. |
| mavx256-split-unaligned-store | [enabled] | re Split 32-byte AVX unaligned store. |
| mfancy-math-387 | [enabled] | Generate sin, cos, sqrt for FPU. |
| mfp-ret-in-387 | [enabled] | Return values of functions in FPU registers. |
| mfxsr | [enabled] | Support FXSAVE and FXRSTOR instructions. |
| mglibc | [enabled] | Use GNU C library. |
| mhard-float | [enabled] | Use hardware fp. |
| mieee-fp | [enabled] | Use IEEE math for fp comparisons. |
| mlong-double-80 | [enabled] | Use 80-bit long double. |
| mmmx | [enabled] | Support MMX built-in functions. |
| mno-sse4 | [enabled] | Do not support SSE4.1 and SSE4.2 built-in functions and code generation. |
| mpush-args | [enabled] | Use push instructions to save outgoing arguments. |
| mred-zone | [enabled] | Use red-zone in the x86-64 code. |
| msse | [enabled] | Support MMX and SSE built-in functions and code generation. |
| msse2 | [enabled] | Support MMX, SSE and SSE2 built-in functions and code generation. |
| mstv | [enabled] | Disable Scalar to Vector optimization pass transforming 64-bit integer computations into a vector ones. |
| mtls-direct-seg-refs | [enabled] | Use direct references against %gs when accessing tls data. |
| mvzeroupper | [enabled] | Generate vzeroupper instruction before a transfer of control flow out of the function. |
很明显,这个-march=x86-64代表的指令范围很小,海光全部都支持。所以,默认情况下,在AMD上编译的程序,依然可以跑在海光上。
如果gcc编译的时候指定-march=znver1,那么海光可以运行吗?答案是否定的,因为至少有2个指令集海光是不支持的:aes和pclmul。
只有一种特例:那就是程序本身并不涉及加解密,编译之后的汇编代码不包括aes和pclmul相关指令,即使编译的时候指定-march=znver1,那么这个程序还是可以跑在海光上的。
| -march=??? of GCC8.4.1(CentOS8.4) | x86-64 | znver1 |
| m128bit-long-double | [enabled] | [enabled] |
| m64 | [enabled] | [enabled] |
| m80387 | [enabled] | [enabled] |
| mabm | [disabled] | [enabled] |
| madx | [disabled] | [enabled] |
| maes | [disabled] | [enabled] |
| malign-stringops | [enabled] | [enabled] |
| march= | x86-64 | znver1 |
| mavx | [disabled] | [enabled] |
| mavx2 | [disabled] | [enabled] |
| mavx256-split-unaligned-store | [enabled] | [enabled] |
| mbmi | [disabled] | [enabled] |
| mbmi2 | [disabled] | [enabled] |
| mclflushopt | [disabled] | [enabled] |
| mclzero | [disabled] | [enabled] |
| mcx16 | [disabled] | [enabled] |
| mf16c | [disabled] | [enabled] |
| mfancy-math-387 | [enabled] | [enabled] |
| mfma | [disabled] | [enabled] |
| mfp-ret-in-387 | [enabled] | [enabled] |
| mfsgsbase | [disabled] | [enabled] |
| mfxsr | [enabled] | [enabled] |
| mglibc | [enabled] | [enabled] |
| mhard-float | [enabled] | [enabled] |
| mieee-fp | [enabled] | [enabled] |
| mlong-double-80 | [enabled] | [enabled] |
| mlzcnt | [disabled] | [enabled] |
| mmmx | [enabled] | [enabled] |
| mmovbe | [disabled] | [enabled] |
| mmwaitx | [disabled] | [enabled] |
| mpclmul | [disabled] | [enabled] |
| mpopcnt | [disabled] | [enabled] |
| mprfchw | [disabled] | [enabled] |
| mpush-args | [enabled] | [enabled] |
| mrdrnd | [disabled] | [enabled] |
| mrdseed | [disabled] | [enabled] |
| mred-zone | [enabled] | [enabled] |
| msahf | [disabled] | [enabled] |
| msha | [disabled] | [enabled] |
| msse | [enabled] | [enabled] |
| msse2 | [enabled] | [enabled] |
| msse3 | [disabled] | [enabled] |
| msse4 | [disabled] | [enabled] |
| msse4.1 | [disabled] | [enabled] |
| msse4.2 | [disabled] | [enabled] |
| msse4a | [disabled] | [enabled] |
| mssse3 | [disabled] | [enabled] |
| mstv | [enabled] | [enabled] |
| mtls-direct-seg-refs | [enabled] | [enabled] |
| mtune= | generic | znver1 |
| mvzeroupper | [enabled] | [enabled] |
| mxsave | [disabled] | [enabled] |
| mxsavec | [disabled] | [enabled] |
| mxsaveopt | [disabled] | [enabled] |
| mxsaves | [disabled] | [enabled] |
如果你觉得有用,请点赞收藏哈!
相关文章:
AMD或Intel上编译出来的程序,可以跑在海光上吗?
在上一篇博文《海光处理器与AMD Zen1的指令差异-CSDN博客》中发现,海光相比AMD,缺失了一些指令集。 那么在AMD或Intel上编译出来的程序,可以跑在海光上吗? 这个问题的关键,在于编译器默认使用哪些指令来编译程序。以Ce…...
ChatGPT 4o 使用指南 (9月更新)
首先基础知识还是要介绍得~ 一、模型知识: GPT-4o:最新的版本模型,支持视觉等多模态,OpenAI 文档中已经更新了 GPT-4o 的介绍:128k 上下文,训练截止 2023 年 10 月(作为对比,GPT-4…...
微信getUserProfile不弹出授权框
当我们在微信小程序开发工具中想要使用getUserProfile来获取个人信息的时候,会发现不弹出授权框,这是什么原因呢? 早在2022年的小程序官方公告中就已经明确给出了小程序用户头像昵称获取规则调整公告 因此如果还想继续使用getUserProfile的弹…...
iostat 命令:系统状态监控
一、命令简介 iostat 命令用于报告系统中 CPU、磁盘、tty 设备和 CPU 利用率统计信息。 需安装 sysstat 软件包,该软件包提供了一组工具,包括 iostat、sar、mpstat 等,用于系统性能监控和报告。 二、命令参数 iostat…...
从底层原理上解释 ClickHouse 的索引
ClickHouse 是一款高性能的列式数据库,它通过列式存储、稀疏索引、MergeTree 引擎等技术实现了极高的查询效率和吞吐量。索引是数据库中提高查询效率的关键机制之一。为了深入了解 ClickHouse 中的索引实现机制,我们将从底层原理、关键数据结构以及 Clic…...
9.20-使用k8s部署wordpress项目
部署wordpress项目 部署mariadb # 启动docker进程systemctl start docker# 拉取三个镜像docker pull nginx:alpinedocker pull wordpress:latestdocker pull mariadb:latest# 保存三个镜像cddocker save -o wordpress.tar wordpress:latestdocker save -o mariadb.tar…...
OSPFv3协议几类LSA介绍
OSPFv3协议介绍 与OSPFv2相比,OSPFv3在工作机制上与OSPFv2基本相同;但为了支持IPv6地址格式,OSPFv3对OSPFv2做了一些改动。OSPFv3基于OSPFv2基本原理增强,是一个独立的路由协议(v3不兼容v2)协议号仍然是89…...
煤矿智慧矿井数据集 (1.煤矿采掘工作面智能分析数据集2.煤矿井下钻场智能分析数据集 )
智慧矿井智能分析数据集 数据1:数据1包含煤矿采掘工作面工人安全帽检测,工人行为检测(行走,站立,坐,操作,弯腰,靠,摔,爬),液压支撑防护…...
举例说明协方差的数学公式计算步骤以及皮尔逊相关系数数学公式的计算步骤
例子:协方差的计算步骤 协方差是用于衡量两个随机变量之间的线性相关性的统计量。它表示两个变量如何一起变化。如果协方差为正,表示两个变量倾向于同方向变化;如果为负,表示它们倾向于反方向变化。 下面我们将通过一个具体的例…...
2024/9/16论文赏析(均为1区或顶刊
Labeled-to-Unlabeled Distribution Alignment for Partially-Supervised Multi-Organ Medical Image Segmentation 代码链接:GitHub - xjiangmed/LTUDA 论文链接:Labeled-to-Unlabeled Distribution Alignment for Partially-Supervised Multi-Organ …...
IDEA 2024.3 EAP新特征早览!
0 前言 IntelliJ IDEA 2024.3 第一个 EAP 版本已发布,提前体验 下一个重大版本的一部分改进。 持续关注 EAP 更新,未来几周内将推出更多 IntelliJ IDEA 新功能。尝试这些新功能,分享您的反馈,共同完善 IDE。 1 AI 助手 1.1 内…...
如何在安卓設備上更換IP地址?
IP地址是設備在網路中的唯一標識,通過IP地址,網路能夠識別並與設備進行通信。本文將詳細介紹在安卓設備上更換IP地址的幾種方法。 在安卓設備上更換IP地址的方法 1. 使用Wi-Fi網路更換IP地址 最簡單的方法是通過Wi-Fi網路更換IP地址。步驟如下&#x…...
LINUX网络编程:TCP(1)
目录 1.认识Tcp的报头 2.确认应答机制(ACK) 序号与确认序号 捎带应答 3.超时重传机制 4.Tcp连接管理 三次握手 为什是三次握手 四次挥手 理解TIMEWAIT 1.认识Tcp的报头 源端口和目的端口号没什么说的 32位的序号和确认序号,之后会介…...
基于PHP的新闻管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于phpMySQL的新闻管理系统。…...
6.C++程序中的基本数据类型
数据类型是指在C中用于声明不同类型变量或函数的一个系统或抽象或者是一个分类,它决定了变量存储占用的内存空间以及解析存储的位模式。其实数据类型可以理解为固定内存大小的别名,是创建变量的模具,具体使用哪种模具(包括自定义&…...
oracle 11g写一个判断是否是身份证的函数,函数名称为:FUN_IS_IDENNO
下面是一个用于判断是否是身份证号码的Oracle 11g函数(FUN_IS_IDENNO)。身份证号码通常为18位(或者旧的15位),前17位为数字,第18位为数字或字母X,并且需要符合一定的规则,例如出生日…...
如何使用Spring Cloud Gateway搭建网关系统
使用Spring Cloud Gateway搭建网关系统是一个涉及多个步骤的过程,主要包括创建Spring Boot项目、添加 Spring Cloud Gateway依赖、配置路由规则以及运行和测试网关。以下是详细的步骤:一、创建Spring Boot项目 选择工具: 可以使用Spring Ini…...
油烟机制造5G智能工厂物联数字孪生平台,推进制造业数字化转型
油烟机制造5G智能工厂物联数字孪生平台,是智能制造与信息技术的深度融合产物。数字孪生工业互联平台通过部署在工厂各个环节的传感器和设备,实时采集、分析和处理生产过程中的海量数据,构建出高度逼真的数字孪生模型。这一模型不仅能够真实反…...
《拿下奇怪的前端报错》序章:报错输出个数值数组Buffer(475) [Uint8Array],我来教它说人话!
作为前端开发者,你可能会遇到过一些奇奇怪怪的报错(相信我你早晚会遇到),关键是它未给出具体错误的位置,或者是一些很奇怪的信息。 我以前都是还原代码,然后找到错误的位置。或者是瞎弄一通,测试…...
Docker 里面按照ifconfig
1. 进入Docker 容器内部 docker exec -it xxx bash2. 安装 net-tools iputils-ping apt-get update && apt-get install -y net-tools apt-get update && apt-get install -y iputils-ping 3. 执行ifconfig 执行ping...
2026年HR招聘偏好白皮书:这5项附加技能出现频率暴涨
2026 年的招聘市场,正在从“看你会什么岗位技能”,转向“看你能不能把岗位做得更智能”。HR筛简历时,越来越关注候选人的AI应用能力、数据化思维和业务落地能力。人社部近年发布的新职业中,已经出现生成式人工智能系统应用员、人工…...
Unity主题系统设计:状态驱动的主题抽象与自动注入方案
1. 这不是换个颜色那么简单:为什么Unity项目里“换肤”总在发布前夜崩盘?你有没有经历过这样的场景:美术同学凌晨两点发来一套新主题资源包,UI设计师说“这次配色更符合品牌调性”,产品说“上线前必须支持深色模式”&a…...
销售怎么通过各种方法获取电话号码
第一种就是那个用爬虫电话号码,然后再打电话给客户。第二种是在别人的挪车电话看车挪车电话,然后再打电话找客户。第三就是。扫楼一顿顿的扫,第四就是这个那种商店,一个个的去问陌拜地推一个个的问店子要不要贷款,去问…...
QMCDecode终极指南:3步解锁QQ音乐加密格式,实现跨平台音乐自由
QMCDecode终极指南:3步解锁QQ音乐加密格式,实现跨平台音乐自由 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目…...
金融合规审核为何人力堆积却仍漏洞百出?2026年RegTech演进与Agent全链路闭环解决方案
在2026年的金融监管环境下,合规审核已不再是简单的“查漏补缺”,而是演变为一场高强度的算力与逻辑博弈。尽管金融机构在合规成本上的投入逐年攀升,甚至不惜以“人海战术”填补流程断点,但监管罚单的数额与频率却并未显著下降。这…...
基于雷达与光敏传感器的低功耗智能窗防设备设计与实现
1. 项目概述:一个基于雷达与光敏的智能窗防设备几年前,我因为一次短暂的出差,家里空置了几天,回来后就一直琢磨着怎么给家里的窗户加点“动静”。市面上的智能安防摄像头固然好,但要么需要复杂的布线,要么云…...
GEO优化可以覆盖哪些搜索平台
这是一个非常现实的问题。企业投放资源做GEO,当然希望覆盖面越广越好。那么GEO优化到底能覆盖哪些平台?覆盖到什么程度?不同平台的GEO逻辑有什么差异?GEO平台覆盖的三个层级第一层级:通用大模型AI平台(核心…...
机器学习与深度学习在社交媒体心理健康检测中的权衡与选择
1. 项目概述:当AI遇见心灵,社交媒体心理健康检测的技术十字路口在社交媒体成为我们数字生活延伸的今天,海量的文本数据无意中记录着用户的情感波动与心理状态。作为一名长期混迹于数据科学和自然语言处理(NLP)一线的从…...
3步快速上手Whisper-WebUI:轻松实现语音转字幕的完整指南
3步快速上手Whisper-WebUI:轻松实现语音转字幕的完整指南 【免费下载链接】Whisper-WebUI A Web UI for easy subtitle using whisper model. 项目地址: https://gitcode.com/gh_mirrors/wh/Whisper-WebUI 还在为视频制作繁琐的字幕而烦恼吗?Whis…...
观察不同模型在统一 API 下的响应速度与输出风格差异
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 观察不同模型在统一 API 下的响应速度与输出风格差异 在为大语言模型应用选择模型时,开发者通常会关注两个核心维度&am…...
