OpenMP 线程化(Threading)基础(1)--并行计算简介

  或许你手头上有一些现成的代码,你想把它们线程化以便能都更好地运行在多核的系统(Multicore System)上。再开始动手操作之前你需要知道些什么呢?

  这篇文章将会告诉你如何通过使用openMP对你的代码进行线程化,并帮助你决定哪些地方进行线程化,还会向你展示如何测试更改后的代码。同时还会对一些典型的Win32 线程进行比较。  

  今天你已经可以开到内核数不断增长的多核处理器(Mulitcore Processors)。其结果就是,程序员们需要将线程的概念加入他们的代码中以便可以利用多核的优点,并且将性能敏感(Performance-Sensitive)的代码分离出来。然而,你的代码一定要测试好,因为相同的代码可能运行在单核(single-core),双核(dual-core),四核(quad-core)甚至更多核的机器上。这一章里,将更多的着眼于通用线程化技术,并使用OpenMP 线程化库,而且测试它们的性能。这些将会给你一些性能基线(Performance Baselines)做参考,你将学会如何线程化和测试你的代码。

  OpenMP是一个用来编写简单线程代码的函数库。常常用来在原有的单线程代码中加入线程代码。我假设你熟悉线程基本概念,但是不要求你使用过openMP或者有编写多线程代码的经验。

让我们先来看一些简单的代码,使用OpenMP 对其进行线程化,再看看代码在一台双核系统上的表现。这些将会让你对OpenMP是如何执行的有更好的理解,同时你也会学到如何修改你的代码和测试代码。为了做比较,Win32线程化也会有所展示。

  所有的代码都是用C++编写的,使用Intel C++ 9.0 编译器编译。在Windows XP SP2操作系统上进行测试。阅读附录有关测试平台配置的章节可以获得更详细的信息。
 

   这里所列出的示例代码,如果强行执行在单线程上会有较小的性能降低。OpenMP 也拥有与Win32线程相似的开销。然而,循环启动的开销对于OpenMP和Win32线程来说都是比较高的。

   这就是说,这种机制实现的线程化对于循环较少或是性能敏感度较高的程序来说并不准确。这些情况需要运用其他机制实现线程化,比如线程池(Thread Pools)。
      
   未完待续......

 

posted @ 2006-12-14 21:33  梦里花落知多少  阅读(1189)  评论(2编辑  收藏  举报