48得票2回答
如何在SSE/AVX中使用Fused Multiply-Add(FMA)指令

我了解到一些Intel/AMD CPU可以使用SSE/AVX进行并行乘加操作:Sandy Bridge和Haswell SSE2/AVX/AVX2每个周期的FLOPS。 我想知道如何在代码中最好地实现这个操作,并想了解CPU内部是如何实现的,也就是使用超标量架构。比如说我想在SSE中执行以下...

45得票4回答
使用AVX内置函数而不是SSE并不能提高速度--为什么?

我已经使用英特尔的SSE内置函数相当长一段时间,获得了良好的性能提升。因此,我期望AVX内置函数可以进一步加速我的程序。不幸的是,直到现在为止并非如此。可能我犯了一个愚蠢的错误,所以如果有人能帮我解决问题,我将不胜感激。 我使用Ubuntu 11.10和g++ 4.6.1。我使用以下命令编译...

42得票4回答
Intel SSE and AVX Examples and Tutorials

有没有一些好的C/C++教程或示例,可以学习英特尔SSE和AVX指令? 我在微软MSDN和英特尔网站上找到了一些,但最好能够从基础开始理解。

41得票2回答
不同的MMX、SSE和AVX版本是互相补充还是超集?

我在考虑应该熟悉x86 SIMD扩展。但是在我开始之前就遇到了麻烦。我找不到一个好的概述,告诉我哪些扩展仍然相关。 x86架构在几十年中积累了许多数学/多媒体扩展: MMX 3DNow! SSE SSE2 SSE3 SSSE3 SSE4 AVX AVX2 AVX512 我忘了什么吗? ...

34得票4回答
这个memcpy实现有什么缺失/亚优化之处?

我对编写 memcpy() 函数作为教育练习产生了兴趣。我不会写一篇关于我所思考和不思考的全部论文,但是这里有一个某人的实现:__forceinline // Since Size is usually known, // most useless code...

32得票3回答
英特尔 AVX:双精度浮点变量的256位点积版本

英特尔高级矢量扩展(AVX)在256位版本(YMM寄存器)中不提供双精度浮点变量的点积。关于“为什么”问题已经在另一个论坛(here)和Stack Overflow(here)中简要讨论过。但我面临的问题是如何以高效的方式用其他AVX指令替换这个缺失的指令? 256位版本中的点积对于单精度浮...

32得票1回答
生成矢量常数的最佳指令序列是什么?

"Best"的意思是指最少的指令(或者最少的微操作,如果某些指令解码为多个微操作)。如果指令数量相等,则以机器代码大小为决胜者。 常量生成本质上是一个全新的依赖链的开始,因此延迟通常并不重要。在循环内部生成常量也很少见,因此吞吐量和执行端口需求也大多不相关。 生成常量而不是加载它们需要更多...

31得票3回答
是否有一个未编译AVX指令的TensorFlow版本?

我正在尝试在我的Chromebook上安装TensorFlow,虽然这不是最好的选择,但我只是想感受一下它。我在Python开发环境中没有做过太多工作,也没有在任何开发环境中工作过,所以请耐心等待。 在弄清楚pip之后,我安装了TensorFlow并尝试导入它,但收到了这个错误: Pytho...

30得票3回答
如何编写可移植的SIMD代码以进行复杂乘法约简

我想要编写快速的SIMD代码来计算复数数组的乘积约减。在标准的C语言中,这样写:#include <complex.h> complex float f(complex float x[], int n ) { complex float p = 1.0; for (i...

30得票3回答
为什么gcc在条件乘法的std::vector<float>向量化方面比clang差得多?

考虑以下浮点循环,使用 -O3 -mavx2 -mfma 编译 for (auto i = 0; i &lt; a.size(); ++i) { a[i] = (b[i] &gt; c[i]) ? (b[i] * c[i]) : 0; } Clang在向量化方面做得非常出色。它使...