相关疑难解决方法(0)

CPUID的内在函数如信息?

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

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

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

c++ intrinsics cpuid

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

gcc的__builtin_cpu_supports检查OS支持吗?

GCC编译器提供了一组内置函数来测试某些处理器功能,例如某些指令集的可用性.但是,根据这个线程,我们也可能知道操作系统可能无法启用某些cpu功能.所以问题是:__builtin_cpu_supports内在函数还检查操作系统是否启用了某些处理器功能?

c gcc simd instruction-set intrinsics

7
推荐指数
1
解决办法
687
查看次数

使用 SSE / AVX Intrinisics 时架构的影响

我想知道编译器如何处理内部函数。

如果使用 SSE2 Intrinsics (Using #include <emmintrin.h>) 并使用-mavx标志进行编译。编译器会生成什么?它会生成 AVX 或 SSE 代码吗?

如果使用 AVX2 Intrinsics (Using #include <immintrin.h>) 并使用-msse2标志进行编译。编译器会生成什么?它会生成 SSE Only 或 AVX 代码吗?

编译器如何处理内部函数?
如果使用 Intrinsics,它是否可以帮助编译器理解循环中的依赖关系以实现更好的矢量化?

例如,这里发生了什么 - https://godbolt.org/z/Y4J5OA(或https://godbolt.org/z/LZOJ2K)?
查看全部 3 个窗格。

上下文

我正在尝试构建具有不同 CPU 功能(SSE4 和 AVX2)的相同功能的各种版本。
我正在使用 SSE Intrinsics 编写相同的版本,并且使用 AVX Intrinsics 编写一次。
假设他们的名字MyFunSSE()是 和MyFunAVX()。两者都在同一个文件中。

如何让编译器(相同的方法适用于 MSVC、GCC 和 ICC)仅使用各自的函数来构建它们?

gcc sse icc intrinsics avx

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

标签 统计

intrinsics ×3

gcc ×2

avx ×1

c ×1

c++ ×1

cpuid ×1

icc ×1

instruction-set ×1

simd ×1

sse ×1