sse2

    3热度

    2回答

    我需要广播一个__m128矢量的任意元素。 例如,第二元件: __m128 a = {a0, a1, a2, a3}; __m128 b = {a1, a1, a1, a1}; 我知道有内在_mm_set1_ps(浮点)和_mm_broadcast_ss(浮子*)。 但是这些内部函数可以从通用内存寄存器中加载值。 是否存在任何方式来从另一个向量寄存器设置标量值?

    3热度

    1回答

    #define Size 50000 void main() { unsigned char *arry1 = (unsigned char*)malloc(sizeof(unsigned char)* Size); unsigned char *arry2 = (unsigned char*)malloc(sizeof(unsigned char)* Size);

    1热度

    1回答

    今天的问题很短。考虑下面的玩具C程序shuffle.c在寄存器xmm0扭转了二紧缩双倍: #include <stdio.h> void main() { double x[2] = {0.0, 1.0}; asm volatile ( "movupd (%[x]), %%xmm0\n\t" "shufpd $1, %%xmm0, %%xmm0\n\t"

    1热度

    1回答

    我尝试了x86_64上的Visual Studio 2013的Auto-Vectorizer模式,我对以下内容感到有点惊讶。考虑天真代码: static void rescale(double * __restrict out, unsigned short * __restrict in, size_t n, const double intercept, const double slope)

    2热度

    2回答

    我尝试了x86_64上的Visual Studio 2013的Auto-Vectorizer模式,对于以下内容我感到有点惊讶。考虑天真代码: static void rescale(double * __restrict out, const int * __restrict in, long n, const double intercept, const double slope) {

    1热度

    2回答

    我有一个简单的程序,其中我有3个std :: vector并在for循环中使用它们。启用编译标志后,我测试这些循环是否优化。但视觉工作室显示,由于原因1200,循环未被矢量化。我的示例代码如下。 #include <iostream> #include <vector> #include <time.h> int main(char *argv[], int argc) { cl

    -1热度

    1回答

    我正在使用Eigen :: vectors的代码,我想确认Eigen是否为SSE优化了此代码。 我使用的是Visual Studio 2012 Express,其中我可以设置命令行选项“/ Qvec-report:2”,它给出了C++代码的优化细节。在visual studio或Eigen中有没有任何选项可以告诉我代码已被优化? 我的代码如下: #include <iostream> #incl

    2热度

    1回答

    给定xmm0中的打包字节,将每个字节的符号 (即最高位)位提取到xmm1的有效方法是什么?换句话说,我想 计算逻辑AND与0x80为每个打包字节。 例如: xmm0: 0xff 0xef 0x80 0x7f 0x01 ... xmm1: 0x80 0x80 0x80 0x00 0x00 ...

    -1热度

    1回答

    我有一些代码,一次对3个不对称整数值的3个对称集进行操作。有大量的条件代码和大量的常量。 这已经成为一个perf性能瓶颈,我正在寻找一些经验法则,以便在64位Intel/AMD CPU上的SIMD能够产生perf wins。代码很长,我以前从未使用过SSE2或AVX,因此在投入时间之前,如果perf wins可能或可能会有一些想法,那将是非常好的。 如果您愿意列出经验法则或指向现有的白皮书,我会很

    1热度

    1回答

    我将使用Intel SSE2内在函数编写的例程移植到Microsoft 32位平台。它在GCC,Clang和64位Windows下工作正常。原代码有效地执行以下操作: typedef unsigned __int64 word64; // input is aligned on 16-byte boundary void (const byte* input) { const w