2009-06-06[n年前へ]
■並列アプリケーションを作ってみよう
並列処理は、一般には実装が難しい、という印象があるようだ。確かにスレッドを駆使して処理を並列化する場合、スレッドの管理やスレッド毎の連携など、考慮しなければならないことが増え面倒ではある。しかし、プログラムを並列化するための言語規格「OpenMP」や、C++用の並列化ライブラリ「Threading Building Blocks」といった並列化支援技術を利用することで、プログラムの並列化へのハードルは大幅に低くなる。・・・本記事では、このような技術を利用した並列処理の実装方法を、簡単な画像処理アプリケーションを例に説明していこう。
2009-09-01[n年前へ]
■Microsoft C++ 2008 Expressで「OpenMP対応のOpenCV」と「”消しゴム版画風”画像作成ソフト」をビルトする
読めばワクワク楽しくなる「詳解 OpenCV」を読み、何だかOpenCVを使ったプログラミングをしたくなったので、無償で使うことができる開発環境Microsoft Visual C++ 2008 Express Editionで、先日、OpenCVの最新(trunk)版をビルドしてみました。
ちなみに、Windows SDK for Windows Server 2008 and .NET Framework 3.5をインストールすると、Microsoft Visual C++ 2008 Express Editionでも、OpenMP(並列計算ライブラリ)を使う設定でOpenCVをコンパイルすることができますので(上位バージョンなら必要ファイルが最初からインストールされています)、なるべく高速に計算させたいという人は、上記ライブラリをインストール後に、OpenCVライブラリをビルドし直しても良いかもしれません。
ちなみに、そういった作業をしてみると、上記必要なヘッダファイルや、デバッグ版・リリース版のライブラリが、CisualC++のディレクトリにインストールされ使うことができるようになり、それらファイルを読みに行くようしておくことで、Microsoft Visual C++ 2008 Express Editionで「OpenMP対応のOpenCV(trunk版)」をビルドすることができました。
・・・と、これだけではつまらないので、せっかくですからOpenCVを使って書かれている”消しゴム版画風”画像作成ソフト(「ナンシー"小"関 風 パッチもん版画」作成ソフト)を(ソースファイルを修正し)、ビルドしてみることにします。ソースファイル・バイナリはここに置いてありますので、そこから試しに nancyKOseki20060719.cpp をダウンロードします。そして、3行目の
#include "stdafx.h"をコメントアウトし、メイン関数の
int _tmain(int argc, _TCHAR* argv[])を
int main(int argc, char* argv[])とします。そして、OpenCV trunk版をビルドすることで作成される各種ライブラリ
highgui111.lib cxts111.lib cv111.lib cxcore111.lib ml111.lib cvaux111.lib cvhaartraining.libを「追加の依存ファイル」に追加したプロジェクトを作成し(ここで作成したプロジェクトファイルを使いまわすと、設定が面倒でなくて良いかもしれません)、そこに上記で修正した nancyKOseki20060719.cpp を加え・ビルドすると、Miscrosoft C++ 2008 ExpressでOpenMP使用のOpenCV trunk版を用いてコンパイルした「”消しゴム版画風”画像作成ソフト」ができあがる、というわけです。
今回は、OpenMPを使って書きなおしたわけでなく、単にMiscrosoft C++ 2008 Expressで(OpenMP使用の)OpenCV trunk版を使って、コンパイルを通るようにしてみただけですが、ソースファイルから実行できるアプリケーションを作成したり・自分なりのカスタマイズをしたりし始めると、少しワクワクしてくるかもしれません。
そして、クロス・プラットフォームの便利さを活用し、たとえば、iPhone版、mixiアプリ版、WEBアプリ版・・・といったものと同じように、さまざまな環境下で動くように改造したりしてみるのも面白いかもしれません。
2009-10-17[n年前へ]
■並列化テンプレートクラスライブラリ「Intel Threading Building Blocks」入門
「オープンソース化された並列化テンプレートクラスライブラリ「Intel Threading Building Blocks」入門」
C/C++で並列アプリケーションを実装する手法として、並列化したい処理をOSのAPIを用いてマルチスレッド化する、もしくは並列プログラミングの規格である「OpenMP」を利用する、といったものが知られている。これらについては以前の記事でも紹介しているが、マルチスレッドを利用した実装は柔軟性がある一方で手間が掛かり、OpenMPは比較的手軽だが柔軟性に欠けるなど、それぞれに長所と短所がある。
これらの問題を解決し、C++での見通しの良い並列処理実装を可能にするのが本記事で紹介する「Intel Threading Building Blocks」(以下、TBB)である。
2010-04-09[n年前へ]
■OpenCV2.1の入手から設定方法まで
OpenCV2.1の入手、ダウンロード、インストール、環境設定
OpenCV2.0ではCMakeを使わないといけなくて、少し難しかったのですが、OpenCV2.1ではコンパイル済みのファイルが公開されているので、ずいぶんOpenCVのインストールが簡単になりました。 ということで、OpenCV2.1のインストール方法などは以下の通りです。
今回のバージョンアップではマルチスレッド処理対応がVer2.0ではOpenMPだったのに対し、Ver2.1ではTBB(Threading Building Blocks)へ変更となりました。