sse

    13热度

    2回答

    我正在写一些代码,并尝试使用SIMD内在函数SSE2/3加速它。我的代码具有这样的性质,我需要将一些数据加载到XMM寄存器中并多次执行。当我查看生成的汇编代码时,GCC似乎不断清理数据回到内存,以重新加载XMM0和XMM1中的其他内容。我正在编译x86-64,所以我有15个寄存器。为什么GCC只使用两个,我能做些什么来让它使用更多?有什么方法可以在寄存器中“固定”一些值吗?我在我的变量定义中添加了

    1热度

    2回答

    我看到gcc的一些资源,但不能用于Visual Studio。 任何人都有宝贵的参考资料,例子和窍门?

    38热度

    3回答

    我想了解更多有关使用SSE的信息。 除了明显的阅读Intel® 64 and IA-32 Architectures Software Developer's Manuals之外,还有什么方法可以学习? 主要我有兴趣与GCC X86 Built-in Functions一起工作。

    0热度

    2回答

    调用构造函数如果我有这样一个类: typedef union { __m128 quad; float numbers[4]; } Data class foo { public: foo() : m_Data() {} Data m_Data; }; 和一类这样的:让酒吧的实例时 class bar { public: bar() : m_Da

    2热度

    6回答

    目前,我有以下代码: float a[4] = { 10, 20, 30, 40 }; float b[4] = { 0.1, 0.1, 0.1, 0.1 }; asm volatile("movups (%0), %%xmm0\n\t" "mulps (%1), %%xmm0\n\t" "movups %%xmm0, (%1)" :: "

    4热度

    3回答

    Intel将发布一个名为AVX的新指令集,其中包括将SSE扩展为256位操作。也就是说,可以是4个双精度元素或8个单精度元素。 考虑到现在还没有支持它的硬件,那么如何开发AVX代码?更一般地说,开发人员如何编写不存在的硬件代码,例如,如果他们希望在支持CPU发布时准备好软件,

    7热度

    3回答

    我正在编写一个需要做一些快速数学计算的C程序。我正在使用内联SSE汇编指令来获取一些SIMD操作(使用打包的双精度浮点数)。我正在Linux上使用GCC进行编译。 我处于需要循环一些数据的情况,并且在我的计算中使用了一个常数因子。我希望在循环过程中将这个因子保存在一个安全的寄存器中,所以我不必每次都重新加载它。 要使用一些代码澄清: struct vect2 { fltpt x;

    3热度

    2回答

    我需要使用POPCNT指令正在使用编制了项目可视STDIO 2005 内在__popcnt()只适用于VS2008,编译器似乎并不甚至识别指令,当我在一个__asm {}块写。 有没有办法做到这一点?

    9热度

    2回答

    我感兴趣的掌握这样的预取相关的功能 _mm_prefetch(...) 所以当我执行该操作在阵列上循环,内存带宽得到充分利用。什么是最好的资源来了解这个? 我在C linux上使用GCC 4系列在intel linux平台上做这项工作。

    19热度

    5回答

    我一直在阅读x86指令集扩展,它们在一些非常特殊的情况下似乎很有用(例如SSE3中的HADDPD - (Horizo​​ntal-Add-Packed-Double))。这些需要一个特定的寄存器布局,需要有意设置,或者从之前的一系列指令出现。像gcc这样的通用编译器实际上使用这些指令(或其子集)的频率如何?还是主要用于手工编码的汇编程序?编译器如何检测使用SIMD指令的适当位置?