【发布时间】:2017-06-27 06:08:48
【问题描述】:
我们正在运行一个计算密集型的项目,现在我们让编译器进行 SSE 优化。但是,我们不确定我们是否获得了代码的最佳性能。
我的问题是,我理解,很宽泛,但我没有找到很多关于此的建议:编写手动 SIMD 代码负担得起,或者换句话说,值得付出努力吗?
在这里,可负担性是指对成本收益的粗略估计,例如speedup / development_time,或在项目开发环境中合理的任何其他衡量标准。
缩小范围:
- 我们分析了代码,我们知道计算是最繁重的部分
- 我们有一个可以轻松使用 Boost.SIMD 和类似库的 C++ 代码
- 负担能力不应影响代码可读性,我们假设我们对 SSE/AVX 充满信心
- 代码当前是多线程的 (OpenMP)
- 我们的编译器是英特尔的
icc
【问题讨论】:
-
“我的问题是,我理解,广泛的......” 那么你为什么要问你是否已经知道它是题外话?
-
您是否考虑过并行化(例如线程)?也许只是手动优化代码的部分?在您实际尝试某事并将结果与某个基线进行比较之前,这对任何人来说都很难,所以请说出具体的内容。
-
您可能应该指定您的编译器。我知道英特尔认为矢量化是 ICC 的主要优势。另一方面,当我尝试 GCC 时,它得到的支持很少,而且相当过时。一般来说,我认为编译器在应用 SIMD 的能力方面比在非平凡场景中的经验丰富的程序员更有限。不知道这是否适用于您的情况。
-
“负担能力”一词本身也很宽泛。你的意思是在工时?感知的或实际的加速?还有什么?或者可能是一个组合?
-
我尽可能多地澄清了您的疑虑。 @Someprogrammerdude 除了我们现在拥有的代码之外,我们没有可比较的基线。由于这是一个设计决策,我们必须进行一些我们不熟悉的成本/收益分析(例如,了解实际进行此 SIMD 移植的其他项目)。
标签: c++ performance x86 compiler-optimization simd