c - openMP 线程和迭代

标签 c multithreading loops parallel-processing openmp

所以我有这部分代码。

#pragma omp parallel for num_threads(4)
for (it = 0; it < itime; it++){
  for (i = 0; i < N; i++){
   do something1..
   for (j = 0; j < N; j++){
   do something2..
   }
  }
  do something3..
 }

带有 it 计数器的 for 循环迭代 20 次 (0-19)。 N 的值此时并不重要。 发生的情况是迭代“分布”在 4 个线程上。

thread #0 gets [0,1,2,3,4]
thread #1 gets [5,6,7,8,9]
thread #2 gets [10,11,12,13,14]
thread #3 gets [15,16,17,18,19]

我想做的就是按照我自己的顺序传播迭代,例如: 线程 #0 [0,4,8,10,16] 等...

有什么方法可以使用 openmp 实现此目的吗?

最佳答案

这是一个简单的解决方案。

int numbers[] = { 0,4,8,10,16,1,2,3,5,6,7,9,11,12,13,14,15,17,18,19 };//define as u wish
#pragma omp parallel for num_threads(4)
for (int it = 0; it < 20; it++) {
        //cout <<"Thread "<< omp_get_thread_num() << " gets :" << numbers[it] << endl;
        int num = numbers[it];//use this instead of "it"
}

这可能不是最好的解决方案。

关于c - openMP 线程和迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50306944/

相关文章:

c - 哪个系统调用号的头文件是正确的?

c - C 中正常 block 后检测到堆损坏

java - java中从服务器向多个客户端发送消息

c++ - "thread-safe"函数并行化框架是否依赖?

java - Ehcache 2.10 线程被阻塞

c - 打印空星号三角形 c

php - 在单个包装器 div 中使用类包装多个 div?

javascript - 如何连接(变量+对象键名)以点表示法获取对象值

c - Miller-Rabin 实现中的错误

c - 如何区分两位数(65)和字符 ('a' )?