知りたいこと
今日マルチスレッドについて触れたばかりです。
全体的に並列処理についての理解がありません。
OpenMPを使用してマルチスレッド化を試みているのですが、
並列計算をする際にCPUに記載されたコア数/スレッド数を超えたスレッド数を設定できます。
それによって計算速度も上昇します。
これが一体何を意味するのか、ということが知りたいです。
cpuはi7 9700F,8コア8スレッドです。
https://ark.intel.com/content/www/jp/ja/ark/products/193738/intel-core-i7-9700f-processor-12m-cache-up-to-4-70-ghz.html
実装内容
並列計算は以下のように書いていて
C++
1#include <omp.h> // OpenMP 2~~~~省略~~~~ 3int N = 1000000; 4#pragma omp parallel for num_threads(num) // numの値がスレッド数にあたる 5 for(int i = 0; i < N; i++)process(); // 100万の処理
process()は
C++
1 int num = 0; 2 for(int i = 0; i < 10000; ++i) // 内部で1万ループする 3 { 4 ++num; 5 }
process内1個の計算時間は0.02msくらい
計測結果
18スレッドまではCPUのコアが利用できるのでわかります。512までCPUコア数、スレッド数超えた状態で指定すると、指定スレッド数が倍々で上がるにつれ計算効率が最大3%くらい上昇しています。
16
なぜ上昇するのかもよくわかってないんですが、
一番知りたいのは、CPUに記載されてるスレッド数を越して設定して大丈夫なのか?という点です。
どなたかご教授いただけますと幸いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/11 16:59