首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >-xhost标志到底是什么?

-xhost标志到底是什么?
EN

Stack Overflow用户
提问于 2022-03-15 21:49:10
回答 2查看 512关注 0票数 0

我很难理解与-xhost一起使用的icc标志的用途。

英特尔网站上,它声明:

xHost,QxHost 告诉编译器为编译主机处理器上可用的最高指令集生成指令。

我不知道“最高指令集”是什么意思。

同时,我也看到了一些关于SIMD 这里的东西。如果-xhost可以加速您的代码,为什么会有人选择不使用此标志?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-15 23:45:15

-xhost标志根据当前CPU的功能(即您正在进行编译的计算机中的代码)生成最优的代码。

所谓“最高指令集”,意味着编译器将自动打开与CPU支持的最高指令集对应的代码生成标志。因此,如果您的CPU只支持SSE2,那么就只能打开它了。如果它支持AVX2,那么该选项将被打开。无论CPU支持哪个最高的指令集扩展,编译器都会生成针对该指令集扩展的代码。

此选项通常用于生成代码以在生成代码的同一台计算机上运行。例如,在构建在同一台计算机上运行的科学算法时,或者在编译自己的Linux内核时。

从技术上讲,生成的二进制文件将在支持至少与构建计算机相同的指令集扩展的任何计算机上运行,这就是为什么文档讨论“编译主机处理器上可用的最高指令集”的原因。

正如彼得·科德斯( Peter )在评论中已经指出的那样,国际商会的-xhost旗帜实质上等同于GCC和Clang的-march=native旗帜。这两种方法都告诉编译器自动打开与主机CPU能力相匹配的所有选项,为主机CPU生成最优的二进制文件,但只要它们具有相同或更高的能力,它们就会在其他CPU上运行。

通过查找计算机的CPU规范并向编译器命令行添加相应的代码-gen选项,您可以做与-xhost完全相同的事情。-xhost只是为你做这件事,查找你的主机CPU支持什么,并自动启用这些标志,而不需要你做后腿工作。因此,这是一个方便的特性;没有更多,也没有更少。

实际上,-xhost标志可以利用某些指令集扩展来加快代码速度,但是它还可能导致一个根本无法工作的二进制文件。 (在另一台不支持与构建计算机相同的指令集扩展的计算机上)。也许这对您来说不是问题;在这种情况下,您肯定会打开-host标志。但是,在许多情况下,我们软件开发人员正在为其他人构建可运行的二进制文件,在这种情况下,我们必须更加小心地确定我们想要排除哪些CPU。

还值得注意的是,Intel的编译器实际上可以生成一个具有动态调度支持的单个可执行文件,它允许您支持两种不同的体系结构。有关详细信息,请参见谢尔盖L.的回答中的相关问题。

票数 3
EN

Stack Overflow用户

发布于 2022-03-16 00:06:58

要添加@Cody的答案:有时您不想使用-xhost标志。在超级计算机集群中,您通常在“登录节点”上进行编译,代码在“计算节点”上执行。这两种架构可能略有(或有时:非常不同)。因此,您告诉登录节点要编译什么样的体系结构,但是不使用xhost标志,这可能会使它在计算节点上不可执行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71489412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档