c - 请解释以下并行代码模板

标签 c multithreading parallel-processing

您好,我是并行编程的新手,在阅读相关内容时,我遇到了一个 C 代码模板,您能逐行解释一下这行代码的含义吗???

#include <omp.h>

main ()  {

int var1, var2, var3;

Serial code 
      .
      .
      .

Beginning of parallel section. Fork a team of threads.
Specify variable scoping 

 #pragma omp parallel private(var1, var2) shared(var3)
  {

  Parallel section executed by all threads 
        .
        .
        .

  All threads join master thread and disband 

  }  

Resume serial code 
      .
      .
      .

}

最佳答案

首先,我想说这是一个提出问题的不好的地方,因为您显然没有自己对此事进行任何研究(特别是因为这个模板非常不言自明)。

不过,我会简要地向您解释一下:

#include <omp.h>

允许访问 openmp 库,以便您可以使用其所有功能。

main () {

请告诉我你理解这句话吗?在这里不返回 int 是非常糟糕的做法,但是,您确实应该有一个 int main

int var1, var2, var3;

定义 3 个整数。 在编写串行代码的地方,您可以在这里读取所有在一个线程/处理器上执行的普通代码。

#pragma omp parallel private(var1, var2) shared(var3)

这一行也许是最重要的。它基本上表示下一组 { } 中的代码可以并行执行。 private(var1, var2) 意味着每个线程都将获得自己的这些变量的副本(即线程 1 的 var1 与线程 2 的 var1 不同) code>) 和 shared(var3) 意味着 var3 在所有线程上都是相同的(如果它在线程 1 上发生变化,它也会在线程 2 上发生变化)

代码并行执行,直到达到 },此时如果您希望在一个线程上运行,代码将返回正常操作模式。

您确实应该阅读一些基本的 OMP 教程,您可以通过简单的 google 在互联网上的任何地方找到这些教程。

我希望这能让你开始。

关于c - 请解释以下并行代码模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32946762/

相关文章:

parallel-processing - MPI 缓冲发送/接收顺序

linux - GNU 并行组合,多次使用参数列表

C++ 并行化 : Fast way to "reinitialize" array

c - 在 Assembly 中使用 ATOI 将字符串转换为整数时出现问题

c - 如何分配动态静态多维数组

c - 为什么在使用 printf 时在地址上使用表达式会表现得很奇怪

c、大端系统中的十六进制表示

multithreading - 生产者-消费者使用赋值

PHP pthreads : Thread dosen't executes methods from other objects async

java - while 循环中的一个线程是否会将 CPU 时间提供给另一个相同类型的线程?