小编Ale*_*der的帖子

在没有代码更改的情况下使用gcc的函数多版本是否可行?

根据大多数基准测试,英特尔的Clear Linux比其他发行版更快,主要得益于名为Function Multi-Versioning的gcc功能.现在他们使用的方法是编译代码,分析哪个函数包含向量化循环,然后使用FMV属性修补代码并再次编译.

gcc自动完成它有多可行?例如,通过传递-mmultiarch=sandybridge,skylake(或类似-m选项列出CPU扩展,如AVX和AVX2).

现在我对两种使用场景感兴趣:

  1. 将此选项用于我们的大型数学计算程序,以便向我们的客户提供发布.我不想污染具有非标准属性的代码,我不想修改我们使用的第三方库.
  2. 其他Linux发行版将能够轻松地完成此任务,而无需像英特尔那样修补代码.这应该为所有Linux用户带来巨大的性能提升.

c c++ linux gcc

9
推荐指数
1
解决办法
541
查看次数

Visual C++优化选项 - 如何改进代码输出?

是否有任何选项(/ O2除外)来改进Visual C++代码输出?在这方面,MSDN文档非常糟糕.请注意,我不是在询问项目范围的设置(链接时优化等).我只对这个特殊的例子感兴趣.

相当简单的C++ 11代码如下所示:

#include <vector>
int main() {
    std::vector<int> v = {1, 2, 3, 4};
    int sum = 0;
    for(int i = 0; i < v.size(); i++) {
        sum += v[i];
    }
    return sum;
}
Run Code Online (Sandbox Code Playgroud)

Clang的libc ++输出非常紧凑:

main: # @main
  mov eax, 10
  ret
Run Code Online (Sandbox Code Playgroud)

另一方面,Visual C++输出是一个多页面的混乱.我在这里遗漏了什么,还是VS真的很糟糕?

编译器资源管理器链接:https: //godbolt.org/g/GJYHjE

c++ visual-c++ c++11 cl

8
推荐指数
1
解决办法
1744
查看次数

CMake - 如何避免链接器命令行中的 CMAKE_CXX_FLAGS

我在使用 cmake/gcc/Linux 时遇到问题。

无论我尝试什么,我都无法摆脱链接器行上的 CMAKE_CXX_FLAGS。CMake 在链接模式下调用 g++ 时不断传递它们。

我的 CMAKE_CXX_FLAGS 中有 -fopenmp 并且它不能出现在链接线上,所以 g++ 不会链接到 gomp(我使用的是 Intel 的 iomp5)。

编辑:我在 CMakeLists.txt 的开头尝试了以下内容,但没有帮助:

set(CMAKE_CXX_LINK_EXECUTABLE
    "<CMAKE_CXX_COMPILER>  <FLAGS> <LINK_FLAGS> <OBJECTS>  -o <TARGET> <LINK_LIBRARIES>")
Run Code Online (Sandbox Code Playgroud)

谢谢

linux gcc g++ cmake linker-flags

6
推荐指数
1
解决办法
930
查看次数

标签 统计

c++ ×2

gcc ×2

linux ×2

c ×1

c++11 ×1

cl ×1

cmake ×1

g++ ×1

linker-flags ×1

visual-c++ ×1