在过去的几天里,我一直在阅读gcc 4.7的自动向量化.我按照我在网上看到的一些例子,设置似乎是正确的.但是当我实际运行代码并在矢量化开启或关闭之间进行比较时,运行时没有明显的差异.
这是我一直在使用的代码:
#include <string.h>
#include <stdlib.h>
#include <emmintrin.h>
#include <stdio.h>
#include <math.h>
int main(int argc, char** argv) {
long b = strtol(argv[2], NULL, 0);
unsigned long long int i;
unsigned long long int n = (int)pow(2,29);
float total = 0;
float *__restrict__ x1;
float *__restrict__ y1;
posix_memalign((void *)&x1, 16, sizeof(float)*n);
posix_memalign((void *)&y1, 16, sizeof(float)*n);
float *__restrict__ x = __builtin_assume_aligned(x1,16);
float *__restrict__ y = __builtin_assume_aligned(y1,16);
for (i=0;i<n;i++) {
x[i] = i;
y[i] = i;
}
for (i=0; i<n; i++) { …Run Code Online (Sandbox Code Playgroud) 具体来说,如果我想定义一个对象,比如z,那么
x = 1z
Run Code Online (Sandbox Code Playgroud)
工作但是
x = 1*z
Run Code Online (Sandbox Code Playgroud)
失败了,我怎么定义这样的对象?
我不认为它涉及到重载乘法运算符.