GCC最高指令集,兼容多种架构

2024-04-01

我正在由具有不同架构的机器组成的集群上运行作业:gcc -march=native -Q --help=target | grep -- '-march=' | cut -f3给了我其中之一:broadwell, haswell, ivybridge, sandybridge or skylake.

可执行文件需要相同,所以我不能使用-march=native但同时这些架构有一些共同点(我认为它们都支持 AVX?)。

我知道gcc(与英特尔相反icc)不允许在单个可执行文件中使用多个体系结构。我想知道是否有办法询问gcc与上面列出的所有架构兼容的最高指令集。

海湾合作委员会版本:8.1.1


英特尔从未在同一 CPU 的未来版本中删除指令集。即,在旧 Intel CPU 上运行的二进制文件始终可以在较新的 Intel CPU 上运行。

(第一代 Xeon Phi 是一个例外:Knight's Corner 使用了 AVX512 的不兼容变体,称为 KNI,但后来的 Xeon Phi 加速卡/计算机使用 AVX512。)


如果必须在所有 CPU 上使用相同的二进制文件,use gcc -march=sandybridge -mtune=haswell,并确保重要数组按 32 字节对齐。

也许值得进行基准测试gcc -march=sandybridge(即使用tune=sandybridge),看看哪个更适合您的代码。-mprefer-avx128 or -mprefer-vector-width=256尝试一下可能很有趣:当 gcc 使用 256 位向量自动向量化时,一些循环会变得混乱。


SnB/IvB 的 AVX 加载/存储未对齐,效率低下,因此调整=sandybridge 集-mavx256-split-unaligned-load,如果你的数据很糟糕is在运行时对齐,但编译器不知道这一点。额外的指令和随机播放对 Haswell 没有帮助,所以-mtune=haswell包括-mno-avx256-split-unaligned-load.

不幸的是,gcc 没有“tune=avx2”选项来调整所有具有 AVX2 的 CPU,也没有选项来调整支持您启用的指令集的普通 CPU。https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80568 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80568。您唯一的选择是针对特定 CPU 进行调整,或者针对通用基准进行调整,或者使用特定的调整选项。


Gcc 确实对运行时调度有一些支持ifunc

您必须在源中激活它才能实现特定功能。看https://lwn.net/Articles/691932/ https://lwn.net/Articles/691932/有关函数多版本控制的更多信息。


最佳选择:为 SnB / Haswell 构建单独的二进制文件,并使用脚本或$PATH setting

在每个集群节点上创建一个/etc/host-type或其他什么,其中有sandybridge or haswell管他呢。任何每个节点的文件系统都可以,或者在运行时重新检测它gcc或者更便宜的东西。在您的作业脚本中:

#!/bin/sh

bin_dir="./bin-$(</etc/node-type)"
exec "$bin_dir/my_prog"  "$@"

根据需要创建符号链接bin-skylake and bin-broadwell使用 Haswell 二进制文件。

Haswell推出了AVX2和FMA,以及BMI1/2。如果您需要处理数字,那么您确实需要 FMA。 BDW/SKL 没有引入任何重要的 ISA 扩展,编译器可以使用这些扩展来使代码运行得更快。 BDW/SKL 的调整也没有什么不同。

如果您有 Skylake-avx512 CPU,那就不同了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GCC最高指令集,兼容多种架构 的相关文章

  • JSON.Net 反序列化返回“null”

    我正在使用 JSON Net 反序列化 JSON 字符串 JSON 字符串是 string testJson Fruits Apple color red size round Orange Pro
  • 如何使用 ASP.NET MVC 编辑多选列表?

    我想编辑一个如下所示的对象 我希望用 UsersGrossList 中的一个或多个用户填充 UsersSelectedList 使用 mvc 中的标准编辑视图 我只得到映射的字符串和布尔值 下面未显示 我在 google 上找到的许多示例都
  • 锁定 ASP.NET 应用程序变量

    我在 ASP NET 应用程序中使用第三方 Web 服务 对第 3 方 Web 服务的调用必须同步 但 ASP NET 显然是多线程的 并且可能会发出多个页面请求 从而导致对第 3 方 Web 服务的同时调用 对 Web 服务的调用封装在自
  • 在 ASP.NET MVC 中将模型从视图传递到控制器

    我正在 ASP NET MVC 中开发我的第一个应用程序 但遇到了一个我无法解决的问题 即使在阅读了整个互联网之后也是如此 因此 我有几个使用视图模型创建的视图 它们是报告 这些视图模型是根据用户选择标准填充的 我正在尝试构建一种接受模型并
  • C# 处理标准输入

    我目前正在尝试通过命令行断开与网络文件夹的连接 并使用以下代码 System Diagnostics Process process2 new System Diagnostics Process System Diagnostics Pr
  • 将下拉列表与字典绑定

    我将字典绑定到下拉列表 举例来说 我的字典中有以下项目 Test1 123 Test2 321 我希望下拉文本采用以下格式 Test1 Count 123 Test2 Count 321 我沿着以下路径走 但没有运气 MyDropDown
  • 为什么需要数字后缀?

    C 语言 我确信还有其他语言 需要在数字文字末尾添加后缀 这些后缀指示文字的类型 例如 5m是一个小数 5f是一个浮点数 我的问题是 这些后缀真的有必要吗 或者是否可以从上下文中推断出文字的类型 例如 代码decimal d 5 0应该推断
  • 静态类与类的实例

    我有一个静态类 用于访问我的公共属性 整个应用程序的全局属性 和我在应用程序运行期间使用的方法 例如 我在静态类中设置了一些属性 并且在应用程序运行时我可以从属性中获取值 但我可以使用单例模式创建非静态类并以相同的方式使用它 问题 对于我的
  • 在 C++11 中移出 stdpriority_queue 的元素

    最小的工作示例 include
  • 如何使用 Roslyn 通过扩展方法、静态类中的方法以及带有 ref/out 参数的方法来访问调用

    我正在致力于创建一个开源项目 用于创建 NET UML 序列图 该项目利用名为 js sequence diagrams 的 javascript 库 我不确定 Roslyn 是适合这项工作的工具 但我想我应该尝试一下 所以我整理了一些概念
  • 如何在win32中使用GetSaveFileName保存文件?

    我编写此代码是为了获取 fileName 来保存我的文件 include stdafx h include
  • 通过 C# Mailkit / Mimekit 发送电子邮件,但出现服务器证书错误

    Visual Studio 2015 中的 0 代码 1 我正在使用 Mailkit 最新版本 1 18 1 1 从我自己的电子邮件服务器发送电子邮件 2 电子邮件服务器具有不受信任的自签名证书 3 我在代码中添加了以下两行 以忽略服务器证
  • 时间:2019-03-17 标签:c++fstream并发访问

    如果从不同的进程 线程同时访问文件会发生什么 据我所知 没有锁定文件的标准方法 只有操作系统特定的功能 就我而言 文件将被经常读取而很少写入 现在如果A打开一个文件进行读取 ifstream 并开始读取块 和B打开相同的文件进行写入 ofs
  • 从 NumPy 数组到 Mat 的 C++ 转换 (OpenCV)

    我正在围绕 ArUco 增强现实库 基于 OpenCV 编写一个薄包装器 我试图构建的界面非常简单 Python 将图像传递给 C 代码 C 代码检测标记并将其位置和其他信息作为字典元组返回给 Python 但是 我不知道如何在 Pytho
  • 在哪里可以下载没有 Visual Studio 2010 的 C# 4.0 编译器?

    我知道 CTP VS 2010 映像 但我可以只下载 NET Framework 4 0 和 C 编译器吗 AFAIK VS 2010 CTP 仅作为 VM 映像提供 我不相信 Microsoft 发布了 VS 的安装程序 其中一个绝对不适
  • Linq.Select() 中的嵌套表达式方法调用

    I use Select i gt new T 每次手动点击数据库后将我的实体对象转换为 DTO 对象 以下是一些示例实体和 DTOS 用户实体 public partial class User public int Id get set
  • 无法识别解决方案文件夹中的 Visual Studio 2017 Nuget.config

    我在使用 Visual Studio 2017 时遇到问题 新的解决方案不断引用 C Users yopa AppData Roaming NuGet Nuget config 中意外位置的 Nuget config 文件 我已将 nuge
  • 如何在 GCC C++ 中编写多行内联汇编代码?

    这看起来不太友好 asm command 1 command 2 command 3 我真的必须在每一行加上双引号吗 另外 由于多行字符串文字在 GCC 中不起作用 我也无法欺骗它 我总是在互联网上找到一些例子 该人手动插入制表符和换行符而
  • C++ Boost ASIO 简单的周期性定时器?

    我想要一个非常简单的周期性计时器每 50 毫秒调用我的代码 我可以创建一个始终休眠 50 毫秒的线程 但这很痛苦 我可以开始研究用于制作计时器的 Linux API 但它不可移植 I d like使用升压 我只是不确定这是否可能 boost
  • 嵌入式二进制资源 - 如何枚举嵌入的图像文件?

    我按照中的说明进行操作这本书 http www apress com book view 9781430225492 关于资源等的章节 我不太明白的是 如何替换它 images Add new BitmapImage new Uri Ima

随机推荐