2. 1行の配列と行列の内積を計算するプログラムをopenMPで加速させる。
自分でいまこのようなプログラムを作成しOpenMPを導入しました。
#include<omp.h>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
int main(int argc,char **argv){
int n=1;
if(argc == 2)
sscanf(argv[1], "%d",&n);
int *xl_val,*xr_val,*a_val,*ax_val;
int x=25165824;
int i,j;
//omp_set_num_threads(n);
//行列用変数
xr_val = malloc(sizeof(int *) * x);
xl_val = (int *) malloc(sizeof(int) * x);
//計算配列
a_val = (int *)malloc(sizeof(int) * x);
//内積計算格納配列
ax_val = (int *)malloc(sizeof(int) * x);
for(i=0; i<x; i++){
ax_val[i] = 0;
a_val[i] = random()%10;
}
#pragma omp parallel for private(i) num_threads(n)
for(i=0; i<x; i++){
xl_val[i] = i;
xr_val[i] = xl_val[i] * i;
ax_val[i] += xr_val[i]*a_val[i];
}
free(xl_val);
free(xr_val);
free(a_val);
free(ax_val);
return 0;
}
4. 加速するために何が必要か、なにがだめなのかがわからなく、調べてもよくわからないためここに質問しにきました。
5. Cの一通りのメソッドや、基本的な部分は大半理解をしています。
OpenMpについては今回始めて触ったため、あまり理解ができてないですが、
スレッドの指定、forの並列化などの本当に基本構造あたりは理解しました。