Show page source of 並列アプリケーションを作ってみよう_p1 #49218

[[PageNavi(NavigationList)]]

== 並列アプリケーションを作ってみよう ==


 インテルのCoreシリーズCPUが登場して以来、マルチコアCPUは爆発的に普及している。現在では比較的低価格なCPUでも複数のコアを搭載するようになり、現在販売されているPCのほとんどはマルチコアに対応しているといっても過言ではない。しかし、まだマルチコアCPUの性能を生かす、並列処理を行っているアプリケーションは多くない。

'''[//sourceforge.jp/magazine/09/05/25/1031209 【特集】マルチスレッド/並列プログラミングの必携ツール「インテル Parallel Studio」徹底活用]'''[http://sourceforge.jp/magazine/09/05/15/0930226 第1回:ソフトウェア高速化の鍵は「並列化」:いま注目される並列化技術を知る][http://sourceforge.jp/magazine/09/05/15/0938220 第2回:マルチコア時代の新開発ツール「インテル Parallel Studio」][http://sourceforge.jp/magazine/09/05/18/1135239 第3回:サンプルコードで知るParallel Studioの並列化機能]''''''[http://sourceforge.jp/magazine/09/05/22/0358216 第4回:並列アプリケーションを作ってみよう][//sourceforge.jp/magazine/09/05/25/0921234 第5回:インテル Parallel Studioを活用したソフトウェアの並列化:AACエンコーダを高速化する] 並列処理は、一般には実装が難しい、という印象があるようだ。確かにスレッドを駆使して処理を並列化する場合、スレッドの管理やスレッド毎の連携など、考慮しなければならないことが増え面倒ではある。しかし、プログラムを並列化するための言語規格「OpenMP」や、C++用の並列化ライブラリ「Threading Building Blocks」といった並列化支援技術を利用することで、プログラムの並列化へのハードルは大幅に低くなる。また、インテルの開発製品「Parallel Studio」に含まれる「Parallel Composer」には、独自の並列化支援機能を備えたC/C++コンパイラーが含まれている。このような技術や製品を利用すれば、手軽に並列処理を実装することが可能だ。

 本記事では、このような技術を利用した並列処理の実装方法を、簡単な画像処理アプリケーションを例に説明していこう。

==== スレッドを利用した並列化 ====
 今回サンプルに使用するアプリケーションは、画像に対して「メディアンフィルタ」と呼ばれるフィルタ処理を行うものだ(ソースコード全文は記事末に'''リスト1'''として掲載)。メディアンフィルタとは、ノイズ除去等を目的に利用される画像処理フィルタで、あるピクセルに対し、そのピクセルの周辺にあるピクセルの値の中央値をそのピクセルの値とするものである('''図1''')。これにより、'''図2'''のように単発的に発生するノイズ(ごましおノイズとも呼ばれる)を軽減する効果がある。

[[Thumb(99c6bc4ddcc61dd889b0f8306325ede7.png, caption=図1 メディアンフィルタの概要)]]

[[Thumb(dbaf38f4d8eac3a47459aff7b7e0d7c2.png, caption=図2 メディアンフィルタの適用例)]]

 今回作成したアプリケーションでは、指定したカラーJPEG画像に対してメディアンフィルタを適用し、JPEG形式で保存するコマンドラインアプリケーションだ。対象画像ファイルおよびフィルタを適用後の画像ファイルはコマンドライン引数で指定する。処理の流れは'''図3'''のようになる(ソースコード全文は記事末に'''リスト1'''として掲載)。

[[Thumb(6c39d84e982b511fb5d9e7f8e0cd7537.png, caption=図3 今回作成するアプリケーションの処理の流れ)]]



[[PageNavi(NavigationList)]]