问题标签 [sse2]
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.
assembly - 使用内在函数的 SSE2 程序集溢出
我是 SSE 和 SSE2 的新手,我写了一个小的 C 样本(分配两个计数器,一个增加另一个减少而不是增加两个),它按预期工作。我使用了内在函数和 Microsoft Visual Studio 10 C++ Express。作为第二步,我想了解引擎盖下发生了什么,但我现在很困惑。例如 for 循环中的赋值操作编译为:
我知道前两行获取 a_aligned 地址的组成部分,第三行将其复制到 xmm0 寄存器。但我不明白为什么它被复制回内存,而不是再次复制到 xmm0(而不是 a_ptr)。我认为 _mm_load_si128 内在函数应该将 a_aligned[i] 的 128 位复制到 xmm0,仅此而已。为什么会这样?我理论上错了吗?如果不是,我应该如何提示编译器?我的示例代码是否正确(从某种意义上说它没有不必要的东西)?这是我的完整示例代码:
kinect - 将 SSE2 迁移到 Arm NEON intrinsincs
我在 SSE2 intrinsincs 中有以下代码。它处理来自 Kinect 的输入。
这基本上将 11 uint8_t (r0-r10) 解压缩到 SSE 寄存器中的 8 uint16_t(mmask 是常量并且之前创建的)。然后它从两个用作边界的数组中加载另外两个带有相应元素的寄存器。它检查它们并创建一个寄存器,其中不符合标准的元素被清零。然后它存储它们并进一步处理每个元素。当没有元素通过时,移动掩码可以作为一个很好的优化,在这种情况下可以跳过处理。
这很好用,现在我也想将它移植到 NEON。除了两部分外,大部分内容都很简单。查看 SSE2 代码中的汇编器输出(gcc),我发现它不是在 _mm_setr_epi16 中进行 8 次 uint16_t 移动,而是将它们转换为 uint32_t 并最终进行 4 次移动。这似乎很有效,因为编译器会处理它,所以我没有更改代码。我应该在 NEON 案例中手动应用它吗?而不是 8 个 vsetq_lane_u16 进行移位并执行 4 个 vsetq_lane_u32?我会遇到字节顺序问题吗?这是否值得?
最后一部分是移动蒙版,因为我找不到等价物。任何人都可以提出一些建议吗?
c++ - SSE2代码优化
我正在使用 SSE2 内在函数来优化我的应用程序的瓶颈,并且有以下问题:
在 Microsoft C++ 编译器上,这不会编译,因为类型__m128i
和unsigned int
(传递给_mm_sll_epi32
指令)不可互换。
为什么会这样,我应该如何将任意unsigned int
值传递给_mm_sll_epi32
?
_m128i
是:
optimization - SSE2 使用 GCC 进行双重计算
如何在 GCC 中使用 SSE2?我想使用双值。
我搜索…… 像这样: http: //vrm-vrm.blogspot.com/2009/10/gcc-intrinsics.html 仅适用于双精度值。
x86-64 - Xcode4:无法通过 nasm 为 x86_64 架构编译 sse2 assemble
目前我正在将 Xcode4 中的编解码器项目从 32 位架构切换到 64 位架构,*cpp 部分文件编译良好,但 .asm(所有 sse2 汇编)文件似乎根本无法通过 nasm 编译成目标文件(在 32 位架构中没问题)。clang 链接器在链接 sse2 函数体时显示错误(找不到 sse2 实现),并且我在 obj 输出文件夹中找不到任何对象文件输出,对此有何建议?我的 nasm 版本是 2.10,支持 64 位。
visual-c++ - 将 GCC 内联 asm (SSE2, SSSE3) 转换为 MSVC 内部函数
我从 VLC 借用一些代码到我的视频播放器中,用 MSVC++ 2010 编写,但找不到与其内联汇编等效的代码,与将解码的视频帧从 GPU 内存提取到常规内存有关。特别是,我不知道如何翻译这条指令:
这可以SplitUV
在文件中的函数中看到vlc/modules/codec/avcodec/copy.c
。
根据 MSDN,内在函数movq
是_mm_move_epi64
,_mm_loadl_epi64
和_mm_storel_epi64
. 但是,它们需要__m128i
参数,如果我在指向 的指针上加 1 __m128i
,我将得到 16 个字节的偏移量,而我需要 8 个字节。
整个汇编代码如下:
我已经开始逐行翻译,现在有以下代码(不完整):
下一条指令是
而且我不知道如何指定 8 个字节的偏移量。另外,我怀疑我是否正确翻译了 PSHUFB。
非常感谢您的意见和建议。
谢谢。
c++ - md5 矢量化 sse* && avx
我正在寻找有关使用矢量化实现 md5 算法的信息。我对 SSE* 和 AVX 指令的详细信息感兴趣。是否有任何现成的库支持矢量化?
c++ - SSE 指令集未启用
我遇到了这个错误:“SSE 指令集未启用”。我怎么能弄清楚这个?
我有ACER i7,Ubuntu 11.10,请问有人可以帮助我吗?
任何帮助将不胜感激!
也在运行:
给出:
实际上我试图安装gazebo-1.0.0-RC2-x86_64,并得到这个错误。
我的 cmakefile 中已经有了这个选项
java - Valgrind 和 Java
我想使用 Valgrind 3.7.0 来查找我的 Java 本机代码中的内存泄漏。我正在使用 jdk1.6.0._29。
为此,我必须设置 --trace-children=yes 标志。设置该标志后,我不再可以在任何 Java 应用程序上运行 valgrind,即使是这样的命令:
将收到错误消息:
我看过这个链接:https ://bugs.kde.org/show_bug.cgi?id=249943 ,但它没有用。
在没有 Valgrind 或没有 --trace-children 标志的情况下运行程序很好。
有人知道我能做什么吗?
assembly - 如何加载 16 个 8 位数据并将它们连接到 4 个无符号整数?
有没有什么优雅的方法可以加载 16 个 8 位数据并将它们连接到 4 个 unsigned int ?
如下:
通过 _mm_load_si128() 将以下数组(16 Epi8)加载到 __m128i
0x00、0x11、0x22、0x33、0x44、0x55、0x66、0x77、0x88、0x99、0xaa、0xbb、0xcc、0xdd、0xee、0xff
然后进行一些操作,使寄存器(__m128i)变为 4 Epi32,
0x33221100, 0x77665544, 0xbbaa8899, 0xffeeddcc
谢谢!