问题标签 [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.
x86 - C中的Inline-Assembler-Code,将值从Array复制到xmm
我有两个数组,我想得到点积。如何将 vek 和 vec 的值输入 xmm0 和 xmm1?以及如何获得 xmm1 中的值(??),以便我可以将它用于“printf”?
x86 - SSE 乘法 16 x uint8_t
我想用 SSE4 乘以一个__m128i
具有 16 个无符号 8 位整数的对象,但我只能找到一个用于乘以 16 位整数的内在函数。有没有类似的东西_mm_mult_epi8
?
opencv - 如何在 Visual C++ 中启用 SSE4.2 指令集?
我在 Visual C++ 2010 中使用 OpenCV 中的简要描述符来匹配两个图像中的点。
在关于简要描述符的论文中写道,可以加快速度:
“BRIEF 描述符使用汉明距离,这可以在现代 CPU 上以极快的速度完成,这些 CPU 通常提供特定指令来执行 XOR 或位计数操作,就像最新的 SSE 指令集一样。”
启用 SSE4.2 后应该会加快速度。我的问题只是我如何在 Visual C++ 中做到这一点?
另一种方法是选择另一个支持 SSE4 的编译器。例如英特尔的 ICC。这真的有必要吗?
string - 如何通过 char 与 SSE 4.2 比较表来获取两个字符串?
如何通过char比较表与C中的SSE 4.2内在函数来获取两个字符串char?
_mm_cmpistrm 返回重要位的掩码,即通过char 比较表处理结果对char 进行聚合函数。
如何在不调用任何聚合函数的情况下按字符比较表提取字符?(也许 _SIDD_UNIT_MASK...)
例子:
这张表我其实需要。
_mm_cmpistrm(在某些模式 Equal_each 上)的结果是掩码:
c++ - 通过 SSE4 包装器比较字符串
我需要快速比较机器上支持 SSE4 的两个字符串。在不编写汇编程序插入的情况下如何做到这一点?
一些包装器就像long long bitmask = strcmp(char* a, char* b)
是完美的。
.net - .NET Framework 4.5 是否提供 SSE4/AVX 支持?
我想,我听说过,但不知道在哪里。
upd:我讲过JiT
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 的数组下标。我对此很陌生,不知道如何进行。
请帮助我确定处理此代码的正确方法。
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 位,因此会变得混乱。
保存高位,将它们设置为零,打包,然后恢复它们。看起来很乱。
有没有其他(希望更有效)的方法可以做到这一点?
assembly - 在 64 位处理器上安装 SSE 4.2 是否合理?
SSE 4.2 一次对两个16 字节的操作数进行比较。但也可以用普通处理器指令一次比较两个 8 字节的操作数。
差别不是那么大,才有这种比较的特殊硬件实现。SSE 4.2 如此无关紧要,还是我错过了什么?
x86 - __popcnt() 和 _mm_popcnt_u32() 有什么区别?
MS Visual C++ 在 SSE4.2 的 CPU 上支持 2 种 popcnt 指令:
我发现的唯一区别是文档__popcnt()
被标记为“Microsoft 特定”,并且_mm_popcnt_u32()
似乎是一个内在命令名称(非 MS 特定)。
这是唯一的区别,MS__popcnt()
只调用 HW_mm_popcnt_u32()
吗?