-1
2次元ベクトルを並列に変更する単純な小さなコードがあります。私はそれをそれぞれ1と4のスレッドを使ってテストしました。しかし、私はちょうど2倍以下の速度を得る。それが拡大しない理由は何も考えられません。誰も私にヒントを与えることができますか?ありがとう!C++プログラムは縮尺変更されていません
#include<iostream>
#include<omp.h>
#include<vector>
#include<chrono>
#include<stdio.h>
using namespace std;
typedef std::chrono::milliseconds ms;
struct Dummy{
char dummy[70];
Dummy(){
for(int i=0;i<70;i++){
dummy[i]='a';
}
}
};
int main(){
int num = 5000000;
vector<vector<Dummy> >myvec(4, vector<Dummy>(num));
auto start = std::chrono::high_resolution_clock::now();
#pragma omp parallel for schedule(static)
for(int i=0;i<4;i++){ //modifies myvec in parallel
int tid = omp_get_thread_num();
printf("Thread %d is going to work\n",tid);
for(int j=0;j<num;j++){
myvec[i][j].dummy[0]='b';
}
}
auto end = std::chrono::high_resolution_clock::now();
cout<<"Time used: "<< std::chrono::duration_cast<ms>(end - start).count()<<"ms"<<endl;
return 0;
}
並列部分ではほとんどやっていません。メモリ性能(すべてのコア間で共有)は大きな制限要因になります。 – drescherjm