相关疑难解决方法(0)

CPUID的内在函数如信息?

考虑到我用C++编写代码,如果可能的话,我想使用类似内在函数的解决方案来阅读有关硬件的有用信息,我的顾虑/注意事项是:

  • 我不太了解汇编,只是获得这种信息是一项相当大的投资(尽管它看起来像CPU只是翻转值和读取寄存器.)
  • asm(英特尔和AT&T)至少有两种流行的语法,所以它是碎片化的
  • 奇怪的是,Intrinsics比asm代码更受欢迎和支持
  • 并非现在雷达中的所有编译器都支持内联asm,MSVC 64位是一个; 我担心我会发现其他类似的缺陷,同时深入研究我必须使用的不同编译器的功能集.
  • 考虑到这个交易,我认为对我来说更有效率的是它可以打赌Intrinsics,它应该比任何asm代码更容易.

我要回答的最后一个问题是:如何用内在函数做类似的事情?因为我没有找到除CPUID操作码以外的任何东西来获取这种信息.

c++ intrinsics cpuid

15
推荐指数
5
解决办法
7205
查看次数

用于AVX和SSE的visual studio的cpu调度程序

我使用两台电脑.一个没有AVX支持,另一个没有AVX.让我的代码在运行时找到我的CPU支持的指令集并选择适当的代码路径会很方便.我遵循Agner Fog的建议来制作一个CPU调度员(http://www.agner.org/optimize/#vectorclass).但是,在我的机器上进行AVX编译并与visual studio链接时,启用AVX的代码会导致代码在运行时崩溃.

我的意思是例如我有两个源文件,其中一个SSE2指令集定义了一些SSE2指令,另一个源文件定义了AVX指令集和一些AVX指令.在我的主函数中,如果我只引用SSE2函数,代码仍会因启用了AVX和AVX指令的任何源代码而崩溃.我可以解决这个问题的任何线索?

编辑:好的,我想我已经解决了这个问题.我正在使用Agner Fog的矢量类,我已经定义了三个源文件:

//file sse2.cpp - compiled with /arch:SSE2
#include "vectorclass.h"
float func_sse2(const float* a) {
    Vec8f v1 = Vec8f().load(a);
    float sum = horizontal_add(v1);
    return sum;
}
//file avx.cpp - compiled with /arch:AVX
#include "vectorclass.h"
float func_avx(const float* a) {
    Vec8f v1 = Vec8f().load(a);
    float sum = horizontal_add(v1);
    return sum;
}
//file foo.cpp - compiled with /arch:SSE2
#include <stdio.h>
extern float func_sse2(const float* a);
extern float func_avx(const float* a);
int main() {
    float (*fp)(const float*a); …
Run Code Online (Sandbox Code Playgroud)

c++ sse avx visual-studio

8
推荐指数
2
解决办法
3301
查看次数

如何启用SSSE3内在函数但禁用它们在编译器优化中的使用

我有一个使用SSSE3内部命令的代码(注意三S)和运行时检查是否使用它,因此我假设应用程序应该在没有SSSE3支持的CPU上执行.但是,当使用-mssse3和-O1优化时,编译器还会插入我没有明确调用的SSSE3指令,因此程序崩溃.

有什么方法可以在我明确调用相关的内部函数时启用SSSE3代码,但是阻止编译器添加自己的SSSE3代码?

请注意,我无法禁用-O1优化.

c++ optimization gcc sse sse3

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

检查运行时是否支持SSE

我想检查运行时是否支持SSE4或AVX,以便我的程序可以利用特定于处理器的指令而无需为每个处理器创建二进制文件.

如果我可以在运行时确定它,我可以使用一个接口并在不同的指令集之间切换.

c c++ sse simd avx

4
推荐指数
1
解决办法
3749
查看次数

标签 统计

c++ ×4

sse ×3

avx ×2

c ×1

cpuid ×1

gcc ×1

intrinsics ×1

optimization ×1

simd ×1

sse3 ×1

visual-studio ×1