OpenMP 并行发送哪个元素?
which element are sent by OpenMP parallel for?
我是 OpenMP 的新程序员。我想并行处理我的数据,我使用 OpenMP。当我将它与 OpenMP parallel for 一起使用时,如何获取在 for 循环中处理的元素?例如:
#pragma omp parallel for
for(int i = 0; i < 10; i++){
myFunc(i);
}
我不想同时发送 1、3、6 或 2 4 7。我可以管理哪些号码一起发送吗?
您应该阅读有关块大小的信息,因为它可能对您有所帮助 Scheduling examples
例如,如果您擅长使用 1,2、3,4 和 5,6 等等,您可以通过以下代码简单地完成此操作:
#pragma omp parallel for schedule(static, 2)
for(int i = 0; i < 10; i++){
myFunc(i);
}
这schedule(static, 2)
意味着每个线程将采用 2 个连续数字,如下所示:
- 线程 1:1,2
- 线程 2:3,4
- 线程 3:5,6
以此类推,直到没有更多数据。如果您想要不同的调度,请查看 post 开头的 link。但请注意,其中一些可能会带来一些额外的开销。
我是 OpenMP 的新程序员。我想并行处理我的数据,我使用 OpenMP。当我将它与 OpenMP parallel for 一起使用时,如何获取在 for 循环中处理的元素?例如:
#pragma omp parallel for
for(int i = 0; i < 10; i++){
myFunc(i);
}
我不想同时发送 1、3、6 或 2 4 7。我可以管理哪些号码一起发送吗?
您应该阅读有关块大小的信息,因为它可能对您有所帮助 Scheduling examples
例如,如果您擅长使用 1,2、3,4 和 5,6 等等,您可以通过以下代码简单地完成此操作:
#pragma omp parallel for schedule(static, 2)
for(int i = 0; i < 10; i++){
myFunc(i);
}
这schedule(static, 2)
意味着每个线程将采用 2 个连续数字,如下所示:
- 线程 1:1,2
- 线程 2:3,4
- 线程 3:5,6
以此类推,直到没有更多数据。如果您想要不同的调度,请查看 post 开头的 link。但请注意,其中一些可能会带来一些额外的开销。