将 TBB 与 SSE2 内在函数混合

Posted

技术标签:

【中文标题】将 TBB 与 SSE2 内在函数混合【英文标题】:Mixing TBB with SSE2 intrinsics 【发布时间】:2011-02-06 08:40:36 【问题描述】:

在 parallel_for 中使用 SSE2 内在是个好主意吗?

由于SSE2寄存器数量有限,会不会在性能上造成损失?

每个 CPU 芯片都有自己的 SSE2 寄存器吗?

【问题讨论】:

【参考方案1】:

每个 CPU 内核 都有自己的 SSE 寄存器。线程和 SSE 几乎没有关系。随意使用两者。

【讨论】:

【参考方案2】:

在 parallel_for 中使用 SSE2 内在是个好主意吗? 那要看。这绝对不是一个坏主意。您应该分析您的代码,并在性能最重要的地方使用内部函数。

由于SSE2寄存器的数量有限,会不会造成性能上的损失? 如果您担心注册压力,那么您不必担心。当您使用内在函数时,编译器会为您分配寄存器(与编写汇编不同)。用内部函数手写的代码通常比从高级语言编译的代码更紧凑。您应该在每次更改后分析您的代码,以查看性能是否有所提高。

每个 CPU 芯片都有自己的 SSE2 寄存器吗? 每个逻辑 CPU 都有自己的 8 个(32 位模式)或 16 个(64 位模式)XMM 寄存器。在现代 CPU 中,每个内核都是一个逻辑 CPU,如果启用了超线程,甚至是两个逻辑 CPU。

【讨论】:

以上是关于将 TBB 与 SSE2 内在函数混合的主要内容,如果未能解决你的问题,请参考以下文章

在 Visual C++ 中删除 SSE2 内在函数

用于灰度到 ARGB 转换的 C++ SSE2 或 AVX2 内在函数

使用内在函数将双 SSE2/AVX/AVX512 存储为浮点数的最佳方法

C 内在函数、SSE2 点积和 gcc -O3 生成的程序集

Delphi中的SSE2优化?

SSE2 向量移位