変数の値をルックアップするのと比較して、omp_get_thread_num()を呼び出す際のパフォーマンスコストはいくらですか?simdでループのためにomp_get_thread_num()を並列に呼び出さないでください
simd openmpループで何度もomp_get_thread_num()を呼び出すことを回避するにはどうすればよいですか?
私は#pragma omp parallel
を使うことができますが、それはsimdループを作るでしょうか?
#include <vector>
#include <omp.h>
int main() {
std::vector<int> a(100);
auto a_size = a.size();
#pragma omp for simd
for (int i = 0; i < a_size; ++i) {
a[i] = omp_get_thread_num();
}
}
実際のコードでは、自動ベクトル化が役立つはずの部分は、ドメイン分解のためにopenmpのスレッドIDを使用します。 –