(untitled)

最終更新日時:2008-04-09 23:44

初版公開日時:2008-04-09 23:44

タグ: diary

今日はVAIO on WinXPからです。Windowsはやはり使いやすいのでクライアントマシンとしてはやはり使い勝手がいいです。

さて、コンピュータの話題を。 最近のパソコンはマルチコアというCPUが主流で、CPUが2個とか4個とか認識します。そのマルチコアなCPUを有効利用するためにプログラム側の対応が必要であるといわれています。自身が知っていた範囲では、プログラムをマルチスレッド対応すれば速くなるといわれています。

とはいえ、プログラムは必ずしもマルチスレッド化することで速くなるとは限らず、マルチスレッド特有の排他制御が必要になる分、逆に遅くなる場合や、考慮していなかったデータ破壊のバグを仕込んでしまうこともあります。そこで、マルチコアな時代のプログラミング方法はどの様に記述すればいいのか少し調べてみました。

マルチコアに対応すべき方法はいまのところ4つあるようです。 ・開発者が低レベルスレッド(Windowsスレッド、POSIXスレッド)でうまく動作するよう記述する  (開発者次第で速さが決まる) ・OpenMPライブラリを使用する。

並列計算用ライブラリ。既存のコードで並列化できそうな部分に#pragmaを仕込んだ形でコンパイルを行うことで並列処理を可能とする。そのためコンパイラの性能の依存度が高い模様。言語は現在Fortran、C言語、C++に対応している。オープンソースのライブラリなので、Windows、Linux、Solaris等いろいろなOSで使用可能。 Windows環境では、Visual C++ 2005、2008のProfessional Editionにライブラリが付属する。 Linux環境では、GCC 4.2から正式対応となっている。

・MPI

今のところ、よくわかっていません。

・インテル・スレッディング・ビルディング・ブロック(TBB)

Intel(インテル)社が販売及びオープンソースとして公開しているマルチコア用プログラミングの支援ライブラリ。STL形式のためC++専用。そのため、C言語では使用できない。

どれで開発するにも癖があるので、これが一番いいとはいえませんが、Windows Visutal Studio 2005環境でOpenMPは使ってみた感じではあっさり効果がでる模様。しかし、記述方法を間違うとあっさり計算結果が違うのでマルチスレッドでないコードで試して結果があっているか、記述方法があっているか確認する必要がありそうです。

マルチコアな時代のプログラミングは一筋縄ではいかないみたいです。


auther: dictoss

地元の北海道から流れて大阪へ行き、現在は東京でお仕事中。 仕事ではCentOS、家ではDebianとFreeBSDを使い何かしようと画策中。

github.com

© 2005-2025 dictoss.

counter: 686959