相关疑难解决方法(0)

如何从GCC /铿锵声组件输出中消除"噪音"?

我想检查boost::variant在我的代码中应用的程序集输出,以便查看哪些中间调用被优化掉了.

当我编译以下示例(使用GCC 5.3 g++ -O3 -std=c++14 -S)时,似乎编译器优化了所有内容并直接返回100:

(...)
main:
.LFB9320:
    .cfi_startproc
    movl    $100, %eax
    ret
    .cfi_endproc
(...)
Run Code Online (Sandbox Code Playgroud)
#include <boost/variant.hpp>

struct Foo
{
    int get() { return 100; }
};

struct Bar
{
    int get() { return 999; }
};

using Variant = boost::variant<Foo, Bar>;


int run(Variant v)
{
    return boost::apply_visitor([](auto& x){return x.get();}, v);
}
int main()
{
    Foo f;
    return run(f);
}
Run Code Online (Sandbox Code Playgroud)

但是,完整的程序集输出包含的内容远远超过上面的摘录,对我而言,它看起来永远不会被调用.有没有办法告诉GCC/clang删除所有"噪音"并输出程序运行时实际调用的内容?


完整装配输出:

    .file   "main1.cpp"
    .section    .rodata.str1.8,"aMS",@progbits,1
    .align 8
.LC0:
    .string "/opt/boost/include/boost/variant/detail/forced_return.hpp"
    .section    .rodata.str1.1,"aMS",@progbits,1
.LC1: …
Run Code Online (Sandbox Code Playgroud)

c++ assembly gcc clang

56
推荐指数
3
解决办法
1万
查看次数

SIMD和打包和标量双精度之间的区别

我正在阅读英特尔的内在指南,同时实现SIMD支持.我有一些困惑,我的问题如下.

  1. __m128 _mm_cmpeq_ps (__m128 a, __m128 b)文档说它用于比较打包的单精度浮点数."打包"是什么意思?在使用它们之前,我是否需要以某种方式打包我的浮动值?

  2. 对于双精度,有内在函数,比如_mm_cmpeq_sd"比较"双精度浮点元素.低和高双精度elemtns是什么意思?我可以使用它们来比较C++ double类型元素的向量吗?或者在比较之前我是否需要以某种方式处理它们?

c++ x86 sse simd intrinsics

17
推荐指数
2
解决办法
8718
查看次数

如何检查我的已安装的numpy是否使用SSE/SSE2指令集编译?

如何检查我的已安装版本的numpy是否使用SSE/SSE2指令集编译?我知道numpy的某些部分正在使用BLAS,如何检查BLAS呢?

python sse numpy

10
推荐指数
2
解决办法
4689
查看次数

检查 DLL 是否使用 SSE 指令

我正在 Windows 7(目标平台 = Windows XP Embedded)上使用 Visual Studio 2012 Express 交叉编译 C++ 应用程序。目标 CPU 不支持 SSE 或 SSE2 指令。因此,我希望能够仔细检查我构建的 DLL 和 EXE 是否不使用任何 SSE 或 SSE2 指令。我怎样才能做到这一点?

dll x86 assembly sse visual-c++

5
推荐指数
1
解决办法
1450
查看次数

如何判断库是否使用某些GCC版本进行编译

我正在Unix机器上编译OpenSSL.默认编译器是GCC-4.4.7.我把另一个编译器GCC-5.2.0放在另一个文件夹中.我通常会在备用编译器的前面添加路径,$PATH以便gcc始终使用备用路径中的路径.

但现在我不确定我编译的库,有没有办法告诉哪个gcc用于编译我的库?还.o可以了解文件的解决方法.

linux gcc

2
推荐指数
1
解决办法
1806
查看次数

标签 统计

sse ×3

assembly ×2

c++ ×2

gcc ×2

x86 ×2

clang ×1

dll ×1

intrinsics ×1

linux ×1

numpy ×1

python ×1

simd ×1

visual-c++ ×1