在C中并行编程,没有线程或高级库

时间:2014-04-22 11:40:27

标签: c parallel-processing

我在C中进行并行编程;因此,我在文章中看到的任何解决方案都是基于线程 OpenMP MPI 在Windows上选择或在* nix上选择 Fork ;我有以下问题:

  • 单个进程可以在单个线程上并行进行并且没有 Forking 本身吗?

  • 是否还有其他编写并行代码的方法,但是C语言中有非常基本的构建块?可以通过手动移动位来完成的事情,纯粹在C内置函数中 - 不使用利用操作系统功能的高级库?

此问题的目的还在于更好地理解并行编程在近似金属世界中的工作原理。我没有兴趣进行微观优化或重新发明图书馆。

更新

我基本上考虑编写 Callback 函数,并在 Event 发生时调用它们;但我不确定它是否会使它平行。

2 个答案:

答案 0 :(得分:2)

  1. 一个进程可以在单个线程上并行进行并且没有分叉吗? - 没有。
  2. 是否还有其他编写并行代码的方法,但是使用C语言中提供的非常基本的构建块? - Nope。
  3. 问题的目的是为了更好地理解并行编程如何在一个接近金属的世界中运行 - 接近金属的并行性需要汇编语言并且可能是裸机(没有OS)环境。
  4. 我基本上都在考虑编写Callback函数,让它们在事件发生时被调用;但是我不确定它是否会使它并行 - 这本身并不意味着并行性。

答案 1 :(得分:1)

  

一个进程可以在单个线程上并行进行并且没有分叉本身吗?

这取决于编译器。尽管大多数编译器不能在单线程程序中跨多个内核进行并行化,但编译器可以随心所欲地在序列点之间实现指令。

示例:矢量处理器(如Cray超级计算机)或GPU(图形卡)的编译器使用unrolling并行化循环。