首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GCC有什么正确的方法来使用不同版本的SSE本质?

GCC有什么正确的方法来使用不同版本的SSE本质?
EN

Stack Overflow用户
提问于 2013-03-23 08:54:04
回答 4查看 2.9K关注 0票数 15

我将举一个例子来问我的问题。现在我有了一个名为do_something()的函数。

它有三个版本:do_something()do_something_sse3()do_something_sse4()。当我的程序运行时,它将检测CPU特性(看看它是否支持SSE3或SSE4),并相应地调用这三个版本中的一个。

问题是:当我用GCC构建我的程序时,我必须将-msse4设置为do_something_sse4()来编译(例如,将头文件<smmintrin.h>包括在内)。

但是,如果我设置了-msse4,那么gcc可以使用SSE4指令,而do_something_sse3()中的一些本质元素也被翻译成了一些SSE4指令。因此,如果我的程序运行在只支持SSE3 (但不支持SSE4)的CPU上,则在调用do_something_sse3()时会导致“非法指令”。

也许我有一些不好的练习。你能给我一些建议吗?谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-03-23 09:16:20

我认为神秘的提示很好,但是如果您真的想在一个文件中这样做,可以使用适当的语用学,例如:

代码语言:javascript
复制
#pragma GCC target("sse4.1")

GCC 4.4是需要的。

票数 11
EN

Stack Overflow用户

发布于 2013-03-25 08:38:40

我认为您想要构建所谓的"CPU调度器“。我有一份工作(据我所知)为GCC工作,但还没有与Visual一起工作。

用于AVX和SSE的visual调度程序

我会查看Agner的向量类和文件dispatch_example.cpp http://www.agner.org/optimize/#vectorclass

代码语言:javascript
复制
g++ -O3 -msse2   -c dispatch_example.cpp -od2.o
g++ -O3 -msse4.1 -c dispatch_example.cpp -od5.o
g++ -O3 -mavx    -c dispatch_example.cpp -od8.o
g++ -O3 -msse2      instrset_detect.cpp d2.o d5.o d8.o
票数 2
EN

Stack Overflow用户

发布于 2013-03-25 05:04:37

下面是为每个优化设置编译一个单独的对象文件的示例:http://notabs.org/lfsr/software/index.htm

但是,当使用gcc链路时间优化(-flto)时,即使这种方法也失败了。那么,如何为不同的处理器构建一个完全优化的可执行文件呢?我能找到的唯一解决方案是使用include指令使C文件表现为一个编译单元,这样就不需要-flto了。下面是一个使用该方法的示例:http://notabs.org/blcutil/index.htm

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

https://stackoverflow.com/questions/15584983

复制
相关文章

相似问题

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