320得票7回答
为什么在将乘法转换为循环内加法后,这段代码的执行速度变慢了?

我正在阅读Agner Fog的优化手册,然后看到了这个例子: double data[LEN]; void compute() { const double A = 1.1, B = 2.2, C = 3.3; int i; for(i=0; i<LEN; ...

318得票9回答
什么是“向量化”?

我在Matlab、Fortran或其他一些编程语言中多次遇到了“向量化”这个术语,但我从未找到过它的解释以及它的作用。因此,我在这里问一下,“向量化”是什么意思?例如,“循环被向量化”是什么意思?

318得票12回答
如何使用SSE4.2和AVX指令编译Tensorflow?

这是运行检查Tensorflow是否工作的脚本后收到的消息: I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcublas.so.8.0 locally I tensorf...

173得票5回答
x86 SIMD指令的头文件

哪些头文件提供了不同的x86 SIMD指令集扩展(MMX,SSE,AVX等)的内置函数?似乎很难在线上找到这样的列表。如果我错了,请纠正我。

111得票3回答
为什么向量化通常比循环更快?

为什么在最低层的硬件执行操作和通用底层操作(即:所有编程语言实际运行代码时通用的事物)中,矢量化通常比循环快得多? 在循环时,计算机做了什么,而在使用矢量化时它不做什么(我指的是计算机执行的实际计算,而不是程序员编写的内容),或者它做了哪些不同的事情? 我一直无法说服自己为什么差异应该如此...

83得票5回答
最快的水平SSE向量求和(或其他缩减)方法

给定一个包含三个(或四个)浮点数的向量,最快的求和方法是什么? SSE(movaps、shuffle、add、movd)是否总是比x87更快?SSE3中的水平加法指令是否值得使用? 从FPU移动到faddp、faddp的成本是多少?最快的特定指令序列是什么? “尝试安排事物,以便您可以同...

80得票8回答
在没有硬件SIMD的情况下,通过SWAR并行将64位整数中打包的8位整数减1。

如果我有一个64位整数,我把它解释为一个包含8个元素的紧密打包的8位整数数组。我需要从每个打包的整数中减去常量1,同时处理溢出,而不是让一个元素的结果影响另一个元素的结果。 目前我有这个代码,它可以工作,但我需要一种并行地执行每个打包的8位整数减法且不进行内存访问的解决方案。在x86上,我可...

76得票1回答
C#和SIMD:高速和低速提升。发生了什么?

问题介绍 我正在尝试加速我正在编写的(2d)光线追踪器的交点代码。我正在使用C#和System.Numerics库来提高SIMD指令的速度。 问题是,我得到了奇怪的结果,有些速度飙升,而有些则相对较低。我的问题是,为什么一个速度飙升,而另一个速度相对较低? 背景: RayPack结构...

68得票3回答
并行for循环 vs omp simd:何时使用每种方法?

OpenMP 4.0 引入了一个名为“omp simd”的新构造。相比旧的“parallel for”,使用此构造的好处是什么?在哪些情况下各自都更好地选择使用? 编辑: 这里有一份与SIMD指令相关的 论文。

59得票2回答
如何选择AVX比较谓词变体

在高级矢量扩展(AVX)中,比较指令(例如_m256_cmp_ps)的最后一个参数是比较谓词。我对谓词的选择感到不知所措。它们似乎是类型、排序、信号的三元组。例如,_CMP_LE_OS表示“小于等于、有序、信号”。 首先,选择信号或非信号是否有性能原因?同样,有序还是无序比另一个更快? 那...