问题标签 [sse4]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
545 浏览

x86 - C中的Inline-Assembler-Code,将值从Array复制到xmm

我有两个数组,我想得到点积。如何将 vek 和 vec 的值输入 xmm0 和 xmm1?以及如何获得 xmm1 中的值(??),以便我可以将它用于“printf”?

0 投票
3 回答
9069 浏览

x86 - SSE 乘法 16 x uint8_t

我想用 SSE4 乘以一个__m128i具有 16 个无符号 8 位整数的对象,但我只能找到一个用于乘以 16 位整数的内在函数。有没有类似的东西_mm_mult_epi8

0 投票
2 回答
4478 浏览

opencv - 如何在 Visual C++ 中启用 SSE4.2 指令集?

我在 Visual C++ 2010 中使用 OpenCV 中的简要描述符来匹配两个图像中的点。

在关于简要描述符的论文中写道,可以加快速度:

“BRIEF 描述符使用汉明距离,这可以在现代 CPU 上以极快的速度完成,这些 CPU 通常提供特定指令来执行 XOR 或位计数操作,就像最新的 SSE 指令集一样。”

启用 SSE4.2 后应该会加快速度。我的问题只是我如何在 Visual C++ 中做到这一点?

另一种方法是选择另一个支持 SSE4 的编译器。例如英特尔的 ICC。这真的有必要吗?

0 投票
1 回答
320 浏览

string - 如何通过 char 与 SSE 4.2 比较表来获取两个字符串?

如何通过char比较表与C中的SSE 4.2内在函数来获取两个字符串char?

_mm_cmpistrm 返回重要位的掩码,即通过char 比较表处理结果对char 进行聚合函数。

如何在不调用任何聚合函数的情况下按字符比较表提取字符?(也许 _SIDD_UNIT_MASK...)

例子:

这张表我其实需要

_mm_cmpistrm(在某些模式 Equal_each 上)的结果是掩码:

0 投票
3 回答
2067 浏览

c++ - 通过 SSE4 包装器比较字符串

我需要快速比较机器上支持 SSE4 的两个字符串。在不编写汇编程序插入的情况下如何做到这一点?

一些包装器就像long long bitmask = strcmp(char* a, char* b)是完美的。

0 投票
3 回答
2831 浏览

.net - .NET Framework 4.5 是否提供 SSE4/AVX 支持?

我想,我听说过,但不知道在哪里。

upd:我讲过JiT

0 投票
2 回答
6546 浏览

c - 使用英特尔 SSE 内在函数优化代码以进行矢量化

这是我第一次使用 SSE 内在函数。我正在尝试使用英特尔 SSE 内在函数(最高 SSE4.2)将一段简单的代码转换为更快的版本。我似乎遇到了一些错误。

代码的标量版本是:(简单的矩阵乘法)

这是我的版本:我已包含#include <ia32intrin.h>

我哪里错了?我收到几个这样的错误:

mm_vec.c(84):错误:“int”类型的值不能分配给“__m128d”类型的实体 a_i = __mm_load_ps(&A[n*i+k]);

这就是我的编译方式: icc -O2 mm_vec.c -o vec

有人可以帮我准确转换此代码。谢谢!

更新:

根据您的建议,我做了以下更改:

但现在我似乎遇到了分段错误。我知道这可能是因为我没有正确访问数组 A、B、C 的数组下标。我对此很陌生,不知道如何进行。

请帮助我确定处理此代码的正确方法。

0 投票
1 回答
1212 浏览

x86 - 使用 SSE2 模拟 packusdw 功能

我正在根据Intel [pdf]描述的算法在pixman中实现快速 x888 -> 565 像素转换功能。他们的代码转换 x888 -> 555 而我想转换为 565。不幸的是,转换为 565 意味着设置了高位,这意味着我不能使用有符号饱和包指令。无符号打包指令直到 SSE4.1 才添加。我想用 SSE2 实现它的功能或找到另一种方法。packusdw

此函数采用两个 XMM 寄存器,每个寄存器包含 4 个 32 位像素,并输出一个包含 8 个转换后的 RGB565 像素的 XMM 寄存器。

我想到的想法:

  • 减去 0x8000, _mm_packs_epi32,将 0x8000 重新添加到每个 565 像素。我已经尝试过了,但我无法做到这一点。

  • 随机播放数据而不是打包数据。适用于 MMX,但由于 SSE 16 位随机播放仅适用于高 64 位或低 64 位,因此会变得混乱。

  • 保存高位,将它们设置为零,打包,然后恢复它们。看起来很乱。

有没有其他(希望更有效)的方法可以做到这一点?

0 投票
4 回答
2238 浏览

assembly - 在 64 位处理器上安装 SSE 4.2 是否合理?

SSE 4.2 一次对两个16 字节的操作数进行比较。但也可以用普通处理器指令一次比较两个 8 字节的操作数。

差别不是那么大,才有这种比较的特殊硬件实现。SSE 4.2 如此无关紧要,还是我错过了什么?

0 投票
1 回答
6511 浏览

x86 - __popcnt() 和 _mm_popcnt_u32() 有什么区别?

MS Visual C++ 在 SSE4.2 的 CPU 上支持 2 种 popcnt 指令:

  1. __popcnt()
  2. _mm_popcnt_u32()

我发现的唯一区别是文档__popcnt()被标记为“Microsoft 特定”,并且_mm_popcnt_u32() 似乎是一个内在命令名称(非 MS 特定)。

这是唯一的区别,MS__popcnt()只调用 HW_mm_popcnt_u32()吗?