首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >现在在现代C++中使用内联汇编有什么好处吗?

现在在现代C++中使用内联汇编有什么好处吗?
EN

Stack Overflow用户
提问于 2013-03-03 07:40:34
回答 4查看 189关注 0票数 0

我很感兴趣,如果我现在在现代C++中使用内联汇编和像GCC 4.7和VS12这样的现代编译器,我会有什么好处吗?例如,用于矢量化和一些小的优化?或者它只是淘气,现代优化编译器在任何范围内使用它都不会给我带来任何好处?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-03-03 07:47:50

内联程序集的使用使您的代码特定于体系结构。即使对于像vectorization这样的东西,您现在也依赖于这样一个事实,即执行此代码的目标需要支持这些特殊/增强的指令集。

比方说,如果有人试图将你的代码从x86移植到ARM,他们将会遇到困难。

我建议有一种机制,通过它你可以检测目标是否支持像SSE2或SSE3这样的向量指令集,并执行你的优化代码,并在不支持增强指令集的目标上运行故障保护代码。

例如,Linux内核抽象了arch目录下所有特定于体系结构的代码,并且有针对不同体系结构的相同功能的实现。如果您知道您的代码可能会在多个不同的体系结构上执行,那么您可以通过提出自己的抽象来做类似的事情。

票数 3
EN

Stack Overflow用户

发布于 2013-03-03 07:49:05

与许多事情一样,这取决于。

对于你可能要写的大多数代码来说,内联汇编不太可能有帮助。现代编译器相当智能,通常生成的代码至少与您所能编写的代码一样好。(它们生成它的速度也比您编写和调试它的速度要快得多。)

例外情况是,正如您所猜测的那样,在编写某些向量代码时例外。虽然有些编译器会尝试向量化某些循环,但他们做得并不像熟练的人类那样出色。在某些应用中(例如,DSP、视频编码等)这会产生很大的不同。但是,这需要对您正在编码的处理器有详细的了解--写得不好的矢量代码通常比编译器提供的标量代码执行得更差!

底线:除非你有很好的理由相信你需要来编写内联程序集,否则就避免这样做。

票数 2
EN

Stack Overflow用户

发布于 2013-03-03 07:54:46

通常,您要查找的是内部函数,这些函数对特定的指令进行了精简包装。

这可以让你在不放弃C++的类型安全性的情况下访问向量指令,同时保留与内联汇编提供的类似程度的控制。本质上,使用内部函数时,您可以选择要使用的指令,但编译器会执行寄存器分配。

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

https://stackoverflow.com/questions/15180739

复制
相关文章

相似问题

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