最終回はマルチスレッド並列を行うためのOpenMPと、組み込み向けに消費電力の制御が追加されたOSCAR APIを紹介します
これまで組み込みマルチコア進化論について連載を行ってきましたが、今回が最終回になります。今回は、「マルチコアにおける標準化表記OpenMP」を紹介したいと思います。
OpenMPは、既存の逐次型C言語に数行記述を追加するだけで、並列化処理が実現できる魔法のような手法です。また、OpenMPの記述はディレクティブ記述であるため、OpenMPが有効ではない既存環境においては、コメントと同様に無視されます。そのため、並列環境と非並列環境で、ほぼ同一のソースコードを使用できるという利点があります。つまり、OpenMPは手軽に並列化が実現でき、かつ安心であるといえます。
OpenMPを使用して、第3回「繰り返し処理におけるデータの並列化手法」で紹介した繰り返し処理の並列化と、第4回「マルチコアの処理単位並列化手法」で紹介した処理単位並列化を行ってみましょう。また、最後には、組み込み向けに消費電力の制御、DMACの制御などが追加された「OSCAR API」についても紹介したいと思います。それでは、皆さん早速OpenMPを使ってみましょう。
OpenMPは、マルチスレッド並列を行うためのディレクティブです。1997年に発表され、非営利団体OpenMP Architecture Review Board(ARB)によって業界標準規格に規定されました。並列コンピューティング環境を利用することを目的として標準化され、主に共有メモリー型並列計算機で用いられています。そして、現在FORTRANとC/C++について標準化が行われています。
以下に、OpenMPの主な特長を記します。
OpenMPについて詳しく知りたい方は、OpenMPのホームページ(http://www.openmp.org/)をご覧ください。
OpenMPは、プラグマ・ディレクティブ(#pragma)と呼ばれるコンパイラへの命令文を用いて記述します。ディレクティブ記述であるため、OpenMPをサポートしていないコンパイラでは単にコメント行と見なされます。その特長を利用して、まずは「アルゴリズム」「ロジック」の確認をするために、OpenMPを無効にし、逐次処理により実行させます。
その後、OpenMPを有効にし、並列処理における問題、性能評価を確認します。開発中は、常にソースコードの変更を行っているため、不具合発生時に、そもそもアルゴリズムにおける不具合なのか、並列化を行った際に発生した不具合なのかを切り分ける必要がある際に、再度OpenMPオプションを無効にして、アルゴリズムやロジックの確認をするということも可能です。
OpenMPの動作は、fork/joinの関係になります。実行する際に、複数のスレッドが作成され並列に実行されます。そして、作成されたすべてのスレッドの処理が完了した後に、スレッド後の処理が実行されます。
また、同期する手法としては、資源を占有する際のロックと、その資源を開放する際のアンロックなど、ロック/アンロックがサポートされています。fork/joinと、ロック/アンロックの説明については、本連載第4回「マルチコアの処理単位並列化手法」を参照してください。
ここでは、OpenMPを使用するために環境構築を行います。OpenMPは現在、gcc、Visual C++、およびIntelコンパイラなど、主要なコンパイラに対応しています。今回は、「Microsoft Visual Studio 2005 Professional Edition」の環境構築を使用して説明します。
また、「Microsoft Visual Studio 2005」について、OpenMPをサポートしているパッケージは、「Professional Edition」「Team System」の2つになります。よって、「Express Edition」「Standard Edition」については、OpenMPをサポートしていませんのでご注意ください。
1. まず「プロジェクト」メニューの「(プロジェクト名)のプロパティ」を起動してください。
2. 次に、「構成プロパティ」―>「C/C++」―>「言語」を選択し、「OpenMPサポート」を「はい(/Openmp)」で選択してください。
設定は以上です。
また、今回OpenMPを動作させるパソコンの動作環境は、以下のとおりです。コアは、Intel Core2 Quad CPUになります。Quadコアのため、今回説明する環境のコアの数は4つになります。
Copyright © ITmedia, Inc. All Rights Reserved.