40得票4回答
为什么将循环向量化到64位元素上,对于大缓冲区没有性能提升?

我正在研究向量化对程序性能的影响。为此,我编写了以下代码: #include <stdio.h> #include <sys/time.h> #include <stdlib.h> #define LEN 10000000 int main(){ ...

37得票5回答
如何检查编译后的代码是否使用了SSE和AVX指令?

我编写了一些代码来进行一堆数学计算,需要快速执行,所以我需要它使用 SSE 和 AVX 指令。我使用 g++ 编译并加上 -O3 和 -march=native 标志,因此我认为它正在使用 SSE 和 AVX 指令,但我不确定。我的大部分代码看起来像以下内容:for(int i = 0;i&l...

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得票2回答
__builtin_clz的实现

如何实现GCC(4.6+)中的__builtin_clz? 它是否对应于Intel x86_64 (AVX)的某些CPU指令?

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

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

31得票4回答
打印一个__m128i变量

我正在尝试使用指令集编写代码,以下是一个执行加法的示例代码 使用的编译器: icc#include<stdio.h> #include<emmintrin.h> int main() { __m128i a = _mm_set_epi32(1,2,3,...

31得票5回答
为什么ARM NEON不比普通的C++更快?

这里是一段C++代码: #define ARR_SIZE_TEST ( 8 * 1024 * 1024 ) void cpp_tst_add( unsigned* x, unsigned* y ) { for ( register int i = 0; i < ARR_SIZ...

31得票1回答
icc编译器崩溃:编译器能否在抽象机器中发明不存在的写操作?

考虑以下简单程序:#include <cstring> #include <cstdio> #include <cstdlib> void replace(char *str, size_t len) { for (size_t i = 0; i ...

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

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