今まではデスクトップPCではマルチプロセッサ(マルチコア)構成というのは一般的でなく、
ソフトウェア開発者はそれを意識することがなかったわけですが、いよいよそれを考えて
ソフトウェアを開発する必要がでてきました。
そこでソフトウェアの並列化に関する勉強をしたいと思っているのですが、何かいい本が
あれば教えていただけないでしょうか?
自分のイメージしている本というのは、そこら辺に転がっているスレッドの起こし方やセ
マフォの使い方といったマルチスレッドのプログラミングの方法に関する解説本ではなく、
並列処理の定石やアルゴリズム、概念といったことが書かれている本です。ちょっと固め
のものを希望しています。(今一わかりにくいかもしれませんが)
よろしく願いします。
このページの下のほうにある「参考文献」の幾つかが参考になると思います。
一般的な「並列処理」と、パソコンのマルチコアで実現できるマルチスレッドでは、意味が多少異なると思いますが…
Communicating Sequential Processes (CSP), by C. A. R. Hoare (Electronic Version)
古典ですが,CSP などいかがでしょう?
非常に固めです (笑).
上記サイトで 昨年 25 周年を迎えた原書の PDF が公開されています.
翻訳は書籍で入手化.
「ホーアCSPモデルの理論 (isbn:4621036831)」
http://www-06.ibm.com/jp/developerworks/java/050722/j_j-csp1.htm...
Error 404: ご指定のページは見つかりませんでした。
IBM developerWorks の CSP 解説記事です.
記事中の第2回・3回へのリンクは英語になっていますが,いずれも翻訳されています.
ここで紹介されている JCSP を使うと Java で CSP を楽しめます.
http://ja.wikipedia.org/wiki/Occam
Occam - Wikipedia
言語レベルで CSP をサポートしている OCCAM の簡単な紹介.
上の回答で紹介されている上田先生は第五世代プロジェクトで並行論理型プログラミング言語 GHC を作られた方ですが,その基本となっているのも CSP です (述語がプロセス,変数がチャネル).
その GHC を紹介したプレゼン資料.固めです (笑).
GHC の解説書としては以下があります.
「並列論理型言語GHCとその応用 (isbn:4320022661)」
KLIC Association
第五世代プロジェクトでは GHC をベースに KL1 という言語を作成しましたが,その処理系である KLIC のサイト.
http://www.klic.org/software/klic/lang/lang.html
KLIC 講習会テキスト KL1 言語編
上記サイトにある KL1 言語の講習用資料 (?)
この中の「1.4 プロセスとストリーム通信」~「1.5 プロセス・ネットワーク」あたりが GHC / KL1 における並行処理の基本を解説しています.
KL1 を紹介したプレゼン資料.
P34~ が CSP チックです.
CSP の並行処理はシンプルなのですが,アプリケーションプログラマが意識するには低水準すぎて扱いにくいように思います.
また,今時のプロセッサ程度の並行度 (8 コア×4 スレッドで 32 スレッド程度) で扱うには粒度が小さすぎる気もします.
HPC とも全然違うので,お望みのものとは違うかもしれませんね.
本当に硬い内容の回答ありがとうございます。
ホーアCSPのホーアさんってホーア理論の人ですよね。ときどきホーアCSPって聞くんです
が、並列処理の理論だったんですか。初めて知りました。
dWの記事は例によって、プログラマ向けに数学的バックグラウンドに関しては殆ど書かれ
てませんが、ホーア理論(こっちは一応知っている)と同じようなノリなんじゃないかと思
いますがどうでしょう。
個人的な好みをいえばこの手のアプローチは嫌いじゃないので本を買って勉強する価値が
ありそうですね。日本語の本もあることだし、理論は難しいかもしれませんが、がんばっ
て理解しようと思います。
GHCとかKL1とかは名前だけ聞いたことがあります。さすがに論理型言語には詳しいですね。
論理型言語は並列化に向いているという話は聞いたことがあります。個人的には論理型言
語はマニアックすぎてさっぱりわけわからんのですが、考え方だけでも理解しようと思い
ます。なんか勉強しないといけないことが多そうですね。
http://www.amazon.com/gp/product/1558603433
Amazon.com: Parallel Computer Architecture: A Hardware/Software Approach (The Morgan Kaufmann Series in Computer Architecture and Design): Books: David Culler,J.P. Singh,Anoop Gupta
定石本かどうかはわかりませんが、大学の教科書で使っていましたのでちょっと固めの基礎本です。
回答ありがとうございます。この質問ねばってかなり長い間、再質問を繰り返しているん
ですが、そんなに沢山回答もらえないんですよね。
件の本ですが、Amazonの”SEARCH INSIDE”で目次のページだけ読みました。内容的には実装、
実践向けの内容ですね。具体的なハードウェアのアーキテクチャとソフトウェアの並列化
の実例がのっているようです。かつ硬い感じです。目次を読む限りでは確かに大学の教科
書でつかわれるぐらいの良書である印象を持ちました。上の回答でkoichi_kさんに紹介さ
れたホーアCSPが純粋理論(というか数学)に対して、実装向きという感じですが、自分とし
ては両方求めていたものです。
正直、英語が苦手で質問に書くのを忘れていましたが、できれば、日本語の情報がよかった
のですが、とりあえず、この本は買ってみようと思います。
(こちらの落ち度で情報の条件が不足していたんですが)この情報は有用であったので、回答
に対する英語だから...という理由で減らすことはないので安心してください。
本当に情報ありがとうございました。
回答ありがとうございます。
学会誌や論文ですか。読めるかどうか調べてみます。
書籍の「並列処理技術」はまだAmazonで購入できますね。
上記リンクで述べているいわゆる「並列処理」と単なる
マルチスレッドプログラミングは違うますよね。質問が
両方の意味がごっちゃになっていてすみません。