13得票1回答
为什么在AMD64架构上,对mmap内存的未对齐访问有时会导致段错误?

我有一段代码,在AMD64兼容CPU上运行Ubuntu 14.04时会导致分段错误: #include <inttypes.h> #include <stdlib.h> #include <sys/mman.h> int main() { uint...

11得票1回答
GNU中的-ftree-vectorize选项

使用GCC编译器,-ftree-vectorize选项可开启自动向量化功能,当使用-O3时,此标志会自动设置。它的向量化程度是什么?例如,我是否会得到SSE2、SSE4.2、AVX或AVX2指令?我知道存在mavx、mavx2等标志,但我想知道编译器在没有这些特定标志强制执行特定类型的向量化时...

10得票1回答
std::min和三目运算符在使用#pragma GCC optimize ("O3")进行自动向量化时的区别

Great, I'm happy to assist you with text translations. What language do you need me to translate from and to? #pragma GCC target ("avx2") #pragma ...

10得票3回答
为什么gcc自动向量化不能处理大于3x3的卷积矩阵?

我已经实现了以下卷积矩阵程序。#include <stdio.h> #include <time.h> #define NUM_LOOP 1000 #define N 128 //input or output dimention 1 #define M N ...

9得票2回答
GCC在向量化和循环大小方面的行为令人困惑

最初调查#pragma omp simd指令的影响时,我遇到了一个与简单for循环向量化相关的我无法解释的行为。以下代码示例可以在这个惊人的编译器探测器上进行测试,只需应用-O3指令并且我们在x86架构上。 有人能解释一下以下观察背后的逻辑吗? #include <stdint.h&...

9得票3回答
重叠数组求和、自动向量化和 restrict

Arstechnia最近发表了一篇文章《为什么有些编程语言比其他编程语言更快》,比较了Fortran和C,并提到了数组求和。在Fortran中,假定数组不重叠,因此可以进一步优化。在C/C++中,类型相同的指针可能会重叠,因此通常无法使用此优化。但是,在C/C++中,可以使用restrict或...

9得票1回答
理解gcc 4.9.2自动向量化输出

我正在尝试学习gcc自动向量化模块。在阅读这里的文档之后。 这是我尝试过的(debian jessie amd64): $ cat ex1.c int a[256], b[256], c[256]; foo () { int i; for (i=0; i<256; i++)...

9得票1回答
为什么GCC不能对这个函数和循环进行向量化?

我正在尝试使一个函数启用SIMD并通过函数调用向量化循环。 #include <cmath> #pragma omp declare simd double BlackBoxFunction(const double x) { return 1.0/sqrt(x); }...

8得票1回答
展开循环并使用向量化进行独立求和

对于以下循环,只有在使用关联数学(例如使用-Ofast)时,GCC才会对其进行向量化处理。 float sumf(float *x) { x = (float*)__builtin_assume_aligned(x, 64); float sum = 0; for(int i=0...

8得票2回答
GCC自动向量化即使在理论上是“有利可图”的时候,对运行时间也没有影响。

我最近花了几天时间学习gcc 4.7的自动向量化。我按照网上看到的一些例子设置好环境,但是当我实际运行代码并在开启或关闭向量化后进行比较时,发现运行时间没有明显的差异。 以下是我使用的代码: #include <string.h> #include <stdlib.h&g...