2023-06-25

"天才の精神病理 - 科学的創造の秘密" 飯田真 & 中井久夫 著

精神病理学の応用領域に、「病跡学(Pathographie)」というのがあるそうな。
"Pathographie" という語は、精神医学者メビウスによって編み出され、天才人の精神医学的伝記という意味が込められているとか。
当初、芸術家や思想家が研究対象とされ、科学者はあまり注目されなかったらしい。芸術家や思想家の天才ぶりは独特な個性によるもので、それは極めて主観的であり、精神性の研究にもってこい。
対して科学者はというと、客観的な法則を探究する連中で、一見、精神性に乏しそうに見える。しかしながら、法則や理論に至る過程では強烈な個性が発揮され、科学者のドラマティックぶりも負けちゃいない。
ただ、精神性の探究が精神病へ導くことと紙一重であることに違いはなく、芸術家や思想家同様、自ら命を絶つ者も少なからずいる。いつ何時、ぼんやりとした不安に襲われることやら...

アリストテレスは、こんな言葉を遺した... 狂気の要素のない偉大な天才は、未だかつて存在したことがない... と。天才とは、ある種の精神異常者を言うのであろうか。中には、自ら異常性を認め、あるいは、精神の避難所をうまく見つけ、発病の危機を免れる者もいる。ある者は小説を書くことに、ある者は音楽を奏でることに、ある者は絵を描くことに... それは、人間社会の煩わしさから逃れるためか。そして、科学に取り憑かれる者も...

科学者たちは、数学に没頭し、論理にのめり込む。論理には不意打ちがない。数学の定理にしても、容易く反証できるものではなく、実に安定している。そして、論理と数学で構築された科学の体系は、ある種の宇宙を築き上げる。不安定の渦巻く人間社会への恐怖心が、安定した宇宙法則を欲するのであろうか。
人間にとって想定外はすこぶる恐ろしいと見え、巷では怒号の嵐が吹き荒れる。なるほど、科学の体系は居心地が良さそうだ。孤高な研究室こそが我が聖域!こうして、人間嫌いを加速させていくのか...

科学法則の多くは、数学によって記述される。客観性において、数学は飛びっ切りの学問だ。自己の主観が手に負えないから、客観に逃れるのか...
数には、不思議な力がある。精神病患者や知的障害者は心が落ち着かないと、数を数え始める。ある種の儀式となって。サヴァン症候群のような突飛な能力の持ち主ともなると、数字が風景に見えるらしい。おいらも、デスクトップ上のスキャンカウンタをなんとなく見入ったりする。数には、なにやら心を落ち着かせるものがあるらしい。数は自己治療の処方箋か。万物は数なり!とは、よく言ったものだ...

さて本書は、六人の科学者の気質から「分裂病圏、躁うつ病圏、神経症圏」に分類し、自己形成の過程、独特な学問のやり方、内面から湧き出る創造性といったものを紹介してくれる。
六人とは、アイザック・ニュートン、チャールズ・ダーウィン、ジグムント・フロイト、ルートヴィヒ・ウィトゲンシュタイン、ニールス・ボーア、ノーバート・ウィーナー。
フロイトとウィトゲンシュタインを科学者とするのに、ちと違和感があるものの、フロイトが自然科学者として出発し、科学的な観点から精神分析学を創設したこと、ウィトゲンシュタインもまた数学者ラッセルに惹かれて論理学に傾倒し、論理哲学論考を書したことを鑑みれば、収まりもいい。
尚、著者は「てんかん圏」の科学者を加えることができなかったことを口惜しむ...

そして、それぞれの気質から研究姿勢の特徴を挙げている。
分裂病圏の学者は、直観的、体系的、世界超脱的、革命的といった特徴があり、ニュートンとヴィトゲンシュタインがこのグループに属すと。アインシュタインも、ニュートン力学同様、相対性理論という宇宙体系を構築したことで、このグループに分類している。
躁うつ病圏の学者は、経験的、感覚的、伝統志向的、斬新的といった特徴があり、ダーウィンとボーアがこのグループに属すと。
神経症圏の学者は、境界領域の探究、離れた領域の結合といった特徴があり、フロイトとウィーナーがこのグループに属すと。

分裂病圏の人は、精神的危機を局所化する能力が乏しいという。危機を局所化できなければ、全体に及ぶ。ゆえに、世界全体を創り変えなければ気が済まず、物理法則に体系化を求める才に富むということか。理想郷のようなモデルを夢想したり、誇大妄想や被害妄想に憑かれたりするのも、ある種の現実逃避やもしれん...
躁うつ病圏の人は、分裂病圏のような独自性や飛躍性はないが、まだ現実を見失わず、現実世界に庇護の場を求めて安住を図ろうとするという。勤勉、几帳面、徹底的といった執着気質も覗かせる...
神経症圏の人は、ちと異質で、社会的状況や歴史的背景をもって関連性を模索する傾向にあるという。あらゆる事象に関連性を求めるということは、孤立を極端に恐れているということか。不安神経症、強迫症、恐怖症、ヒステリー、心気症などの複雑な様相は、他との関係から生じる性質で、依存性に執着しているとも言えそうか...

「科学のあゆみを病蹟学の立場から眺めてみると、まず分裂病圏の科学者によって一つの学問の体系が一挙に創始され、躁うつ病圏の科学者はそれを肉づけ、現実化し、発展させたりする。また躁うつ病圏の科学者は科学的伝統の担い手となり、それを次代に継承する役割を果たしたり、ときには先行する学説や事実を統一して総合的な学説を編み出す場合もある。神経症圏の科学者のある者は、かけ離れた事実、異なった学問領域を架橋し、相互の連関をさぐる働きをするという印象がある。このように、科学の発展段階とさまざまの気質的特徴との出会いが人を科学へとみちびき、科学の歴史的発展を担う大きな要因の一つとなっているのではなかろうか。この仮説を跡づけることは、なお今後の研究に待ちたい。」

2023-06-18

"精神科治療の覚書" 中井久夫 著

精神病棟をイメージさせるものに、鉄格子の窓や施錠された扉といったものがある。正気と狂気の境界として。それは、異常者を隔離するためのものか。それとも、純真な心の持ち主を保護するためのものか。そして、自分はどちらの側にいるのか...


精神病とは、どんな病を言うのであろう。一般的には、心の病と認知されている。心とは、なんであろう。漱石の「こころ」を読めば、それが傷つきやすいものということは分かる。しかし、心ってやつは気まぐれだ。はずんだり、沈んだり、いろいろしやがるし、こいつを正気に保つことは難しい。

身体の持ち主が、一度も身体を病まずに生涯を終えるとは考えにくい。ならば、精神の持ち主が、一度も精神を病まずにいることの方が異常やもしれん...


しかしながら、自分自身の精神が異常だと認めることは難しい。自己の存在否定にもつながる。日本の村社会では世間体も気になるところ。精神科にかかる人は、藁をも掴む思いであろう。

お座なりの精神安定剤を処方して、とっとと追っ払われるに違いないと思いつつも、あなたは何でもない!と追い返されることの少ない科ではある。分かるよ!分かるよ!なんて安易な慰めは、分かってたまるか!と却って意固地にさせる。

患者が口にしていないことまで言い当ててしまう医者もいる。しかしそれでは、すべてお見通しよ!と威圧感まで植え付けてしまう。

あらゆる病気で言えることだろうが、患者が主役でなければ、病に立ち向かうことも難しい。難病では尚更。死にたいと言っている患者の看病は辛い。死を目前にしてホッとすることすらある。

どんなに優秀な医者でも、患者の協力なしでは仕事はできまい。人間の精神を相手取るのにプロもアマもあるまい。精神科医とは、精神から距離を置くことのできる人を言うのであろうか。となれば、人間離れした職業と言えそうだ。精神にのめり込んだベテラン患者の方が当てになるやもしれん。そして、ニーチェやカフカの狂気にこそ救われる...


「病人でいることの方がまだしも幸せで、病気が治ればもっと過酷な運命が待っている人はたくさんいる。そういう人が積極的に治ろうという気を起こさないからといって責めることはできない。いわゆる『二次的疾病利得』と真っ向から戦って勝ち味はない。それは、人間の本性そのものと戦うことであろう。病気は不幸だが、世の中には病気以上の不幸も多いことを医者は忘れがちである。だから、『安心して病気が治れる』条件をつくるように、本人と話し合い、周囲に働きかけ、理解を求めることは、身体病の治癒を早めることが少なくない。」


本書は、患者と家族と医師の呼吸が合うか合わぬかを問題視している。治療は契約ではなく、合意に始まるという。そして、治療のテンポとリズムは、「律速過程」に注視せよ!と。

律速過程とは、いくつかの過程からなる複合的な過程がある場合、その進行速度は最も遅い素過程で決まるというもの。たいていの家族は焦り気味で、医師もそれに釣られる傾向があり、置いてけぼりを喰らうのは、いつも患者本人。分裂病ともなれば自己主張は極めて困難であり、周りの誰か一人が自己主張を強めれば悪循環となる。

問い掛けが、人を追い詰める。論理が人を追い詰める。論理思考の自己管理は意外と繊細で、強要すれば、さらに追い詰める。そして、患者も、医師も、家族も、弁証法的になっていく。つまりは、あらゆる矛盾とどう向き合っていくかってこと。

古くから、医者は哲学者であるべき!という考えもあるが、一理ある。とはいえ、人生の在り方なんそを問えば、回復過程が目的論に、因果論に、運命論に... 侵されていき、人生にうんざりする。

会話では、良き聞き手になれ!との助言をよく耳にするが、「聴く」と「聞く」では態度に違いがあるという...


「『聴く』ということは、聞くことと少し違う。病的な体験を聞き出すことに私は積極的ではない。聞き方次第では、医者と共同で妄想をつくりあげ、精密化してゆくことになりかねない。『聴く』ということは、その訴えに関しては中立的な、というか『開かれた』態度を維持することである。」


注目したいのは、患者と接する態度に「沈黙」を重要視している点である。人間の最も説得力のある態度は、沈黙やもしれん。それは二千年前、ゴルゴダの丘で沈黙のままに十字架刑を受け入れた行動に見て取れる。

だが、この態度が最も難しいことは、三千年紀を迎えた今日の有識者たちの態度を見れば分かる。沈黙とは、孤独においてのみ機能するものなのか。いや、それはそれで独り言がうるさくてかなわん...


「おそらく、患者をことばで正気を証明せねばならないような状況に置くことは、患者の孤独を深め、絶望を生む。孤独な人に対して、それをことばでいやすことはできない。そばにそっといること、それが唯一の正解であろう。患者のそばに黙って三十分を過ごすことのほうが、患者の『妄想』をどんどん『なぜ』『それから』『それとこれとの関係は?』ときいてゆくよりずっと難しいことであるが...

なぜ、患者のそばに沈黙して坐ることがむつかしいのだろう。むつかしいことは、やってみればすぐ判る。奇妙に、しなければならない用事、待っている仕事、などなど思い出される。要するにその場を立ち去る正当な理由が無限に出てくるのである。このいたたまれなさを体験することは、精神科医となってゆくうえで欠かせない体験として人にすすめている。」


何事にもリスクはつきものだが、精神科医でいることにもリスクがあるという。それは、患者に対するリスクと自分に対するリスクであると。

すべての治療行為が試行錯誤のうちに施され、患者に対して負荷テストの意味を持つことは避けられない。患者がいかに好ましいと思っていても、その意味は変わらない。精神とは、それほど得体の知れないものだ。

対して医者はというと、カリスマ症候群に罹るケースも珍しくないらしい。そして、患者とカリスマ者は鏡像関係にあるという...


「患者は思考が吹き込まれる。カリスマ者は自分の思考を人に押し込む...

患者は自分の思考を抜き取られる。カリスマ者は他者の思考を奪う...

患者は自分をとがめる声を聞く。カリスマ者は他人をとがめる声を放つ...

患者は外部から自分が操られる。カリスマ者は自分が他者を操る...

患者は幻影を抱く。カリスマ者は他人に幻影を抱かせる...

患者は被影響体験をもつ。カリスマ者は他人に影響を与える快適な体験を自覚する...」 

2023-06-11

"分裂病と人類" 中井久夫 著

どんよりした薄曇りの中、いつもの古本屋をぶらり。すると、冒頭の一文に目が留まる。「分裂病...」の部分を薄っすら曇らせると、あらゆる場面で教訓となりそうな...

「これは分裂病問題へのきわめて間接的なアプローチにすぎない。しかしこのような巨視的観点から眺め直してみることも時には必要ではあるまいか...」

本書は、人間が本質的に抱えてきた分裂病を、歴史事象に照らして物語ってくれる。それは、思考や言語、知覚や感情などの歪によって特徴づけられる精神病の一つで、現在では「総合失調症」と呼ばれる。
歴史は告げる。文化を融合させてきた地域が、常に先進的であったことを。融合とは、改善、工夫を重ねること。
イスラム文化とギリシア・ローマ文化を引き継いだヨーロッパは、医学を進化させてきた。その背景で図書館が焼かれ、人も焼かれてきたが、この二元性こそ人類の分裂症たる所以。産業革命から疎外が生まれ、生産社会が異常者の許容性を狭め、フランス革命が恐怖政治を呼び込めば、フーコー風の狂気を覚醒させる。人類史に、分裂病の記念碑を見る思い...

「ゲーテの『ファウスト』が今日までヨーロッパの知識人にくり返し読まれているのは、いわばこの書がゲーテ自身の精神の遍歴であると同時に、近代への転機におけるヨーロッパ知識人の集団的自叙伝とでもいうべき含みがあるからではなかろうか...」

人類が地上に出現して以来、地理学的に大きく地球を変貌させた現象には、少なくとも三つあるという。第一に、最初の農民である焼畑工作民の出現で、地上の一次林を漸減し、絶滅へ向かわせたこと。第二に、遊牧民による過放牧で、多くの森林や草原を砂漠に変えたこと。そして第三に、資本主義であると...
人類は獣に狩られる立場から、獣を狩る立場へと鞍替えし、やがて農耕や牧畜を営み、定住するようになった。狩猟、採集の経済から生産経済への転換である。人類が育んできた集団性という性癖は、この過程で増幅させてきたと思われる。
そこで、「農耕社会の強迫的親和性」という用語が持ち出される。慣習の力は恐ろしい。集団性が絡むと、さらに恐ろしい。集団社会で育まれた慣習は、義務に昇華され、強迫観念にまで押し上げられ、村八分社会の誕生を見る。精神病の始まりがいつかは知らんが、集団社会の歩みとともにあったことは確かであろう。
精神の源泉とは何か。心の源泉とは何か。人が真に孤独なら、そもそも精神なんて機能を必要としないのやもしれん。精神を獲得しなければ、精神病を患わせることもなかろうに...

動物は、なんらかの病を抱えて生きている。肉体を獲得すれば、身体に付随する病を患う。一過性の病から慢性的な難病まで。完全な五体満足の持ち主なんて、そうはいない。精神を獲得すれば、精神に付随する病を患う。五体満足でも精神が病めば、そちらの方が深刻である。身体的な病は外面に表れ自覚もしやすいが、精神的な病は内面に籠もり自覚することも難しい。そればかりか、精神を病んでいるのはお前の方だ!と罵る始末。そうでなければ同情こそすれ、どうして腹を立てよう。
分裂病を患えば、そこに狂気が認められ治療が施される。だが、その治療法にも、非人間的に拘束するやり方と人間的に温和なやり方とが現れる。治療を施す医師も、分裂状態ってか...
そこで、精神病の治療には、医師ではなく哲学者があたるべき、という考えが古くからある。というより、医師は哲学する者でなければ、心理学者も、社会学者も、経済学者も、政治学者も... そして、数学は哲学である。さらに、哲学を伴わない科学技術は危険である、とまで付け加えておこうか...

集団社会もまた、あらゆる矛盾が渦巻き、まさに分裂状態!
超エリート経済学者が練りに練った経済政策は、ことごとく外れ、使命感に燃える政治家が案出した政策は、ことごとく裏目。科学の最先端を突っ走る物理学は不確定性に道を阻まれ、厳密性を重んじる数学ですら不完全性に見舞われる。学問全体が、いや、人間社会こそが分裂病を患っているのでは。ならば、個人が分裂病を患うのは、むしろ正気ということは。狂ったこの世で狂うなら気は確かだ!

本書は、分裂病の要因として「執着気質」に注目している。
ドイツではメランコリー型が注目され、怠惰が主な要因とされるらしいが、逆に、日本では勤勉さが要因とされるケースが多い。
人は誰もが、何らかのこだわりをもって生きている。信仰へのこだわり、儀式へのこだわり、ブランドへのこだわり... そして、人の目を気にする自意識へのこだわり、と。こだわりへの許容度が人格の度量となり、そのまま万病のもとに...

「執着気質の人が『頼まれたら断れない』という裏には世俗化された社会から自らを疎んぜられることの恐怖がある。職人根性の人は、むしろ安易な依頼をかたくなに断る。執着気質の人は、自己の作品の是認の基準を究極には周囲の人々に依存する。職人根性の人は、自らあきたらなければ、自己の辛苦の産物をためらうことなく破棄する。」

2023-06-04

"並行コンピューティング技法" Clay Breshears 著

原題 "The Art of Concurrency"
プロセッサの進化は、ムーアの法則に従って勢いづいてきたが、ここへ来て、クロック周波数は発熱と電力の物理学に屈服しつつある。現在ではエネルギー問題とも相まって省電力化を求める傾向があり、ちょいとダウンクロックさせてでも別の道を探ろうとする。
その一つの方向性に、並行コンピューティング技法がある。いまや、マルチコアやマルチスレッドは当たり前。一人の仕事を大勢に割り振れば、すぐに終わる... と行きたいところだが、うまく分担できなければ、むしろ混乱を招く。オーバヘッドってやつは、仕事を割り振る作業や仕事を集約する作業だけでなく、人間関係の衝突からも生じる。人海戦術で、人の海に溺れることはよくあることだ。マルチスレッド戦術を用いたところで同じこと...
本書で注目したいのは、スレッド化の正当性と、その性能評価である。全般的に、まず逐次ソースコードが提示され、これを並行化するというやり方で、それぞれの実装に対して「実行効率、簡潔性、可搬性、スケーラビリティ」の四つの観点から評価するというストーリー立て...
尚、千住治郎訳版(オライリー・ジャパン)を手に取る。

古くから、プロセッサの性能を最大限に引き出すためのコード手法が工夫されてきた。それも芸術の域に達するような...
リソースが思いっきりショボい時代には、アセンブラ言語に勢いがあり、コンパイラ効率もイマイチで、機械語でガチガチに書いたこともあったっけ。C 言語はというと、高級言語の地位にあって、まるで王子様気取り。リアルタイムシステムでは、使えねぇヤツだと囁かれた。それが今では、低級言語に格下げ!
本書のコード事例でも、最小公倍数的な存在として C 言語が採用され、低級な抽象観念しかイメージできないネアンデルタール人には、むしろ馴染み深い。
リソースが贅沢になれば、それをフル活用するための手法が生まれ、マルチコアが目の前にぶら下がっていれば、これに適合したコードが編み出される。そこで、OS がアプリケーション単位で割り振ったり、プロセス毎に切り替えたり、あるいは、ライブラリが暗黙にスレッド分割してくれれば、ありがたい。
但し、OS に任せるにしても、ライブラリに頼るにしても、根本的な仕掛けを知ると知らないでは大違い。
マルチスレッドプログラミングで最も目につく問題といえば、メモリアクセスの衝突であろうか。スレッド群を公平にスケジューリングすれば、各々がどんな処理をしようが知ったこっちゃない。スケジューラが中身を知らなければ、問題の特定も難しくなる。

本書は、信頼性を重視する立場から、実績のあるライブラリの導入を推奨し、汎用的なライブラリとして OpenMP や Intel TBB(Threading Building Blocks)を用いた事例が多く紹介される。なるべくなら、スクラッチでスレッドを作成することは避けたい。手っ取り早くテンプレートを真似るのが無難か。
スレッド単位で扱えば、それなりに危険を伴うであろう。メモリ領域の衝突やデータの競合も生じ、分割の粒度を細かくすれば、オーバーヘッドも増える。ノイマン型アーキテクチャであるからには、どんな処理であれ、どんなソースコードであれ、スレッド分割することは可能であろうが、あらゆるスレッドが並行化できるわけでもあるまい。逐次処理の多くは何らかの形で依存性を持ち、独立した関数コールや実行順序を問わないループが見つかれば儲けもの。スレッドが単独で起動/終了が可能か?スリープ/再開が可能か?スレッド間の依存性はどうか?などと頭を悩ますぐらいなら、最初から OS に委ねた方が賢明やもしれん。

一つの教訓として、並行性はより上位層で実装すべし!というのがあり、本書でも八つのルールの中で二番目に提示される。アプリケーション単独で性能向上を目指すなら、スレッド単位で検討するべきであろうが、ちょいと捻くれた目で、もっと大雑把にアプリケーション単位やプロセス単位でやるのもあり。そして、OS の性能が悪い!と愚痴るのさ。大昔、コンパイラの性能が悪い!と愚痴ったように...
経験則は告げる、いずれリソースが解決してくれる...と。そして、リソース設計者は、いつも下働きを強いられる運命にあるのさ!これも愚痴かぁ。ムーアの法則にも喰ってかかる... このぉ、人間の欲望に見透かされた法則め!

1. 並行アルゴリズムの正当性と性質
M. Ben-Ari というコンピュータ科学の教授が、並行アルゴリズムの正当性と性質を一般化したそうな。それを四つにまとめると、こんな感じ...

  • プログラムとは連続したアトミックな実行文である。
  • 並行プログラムは複数のスレッド内のアトミックなインタリーブである。
  • アトミックな実行文のすべての組み合わせは、ここで検証する並行アルゴリズムのすべての性質を満たさなければならない。
  • どのインタリーブでもスレッドの実行文が不公平に除外されることはない。

しかしながら、スレッドすべての組み合わせにおいて、結果が同じになるようにインタリーブするには、かなりの戦略がいる。それぞれのアプリケーション分野における経験値や勘所も必要である。現実には、処理順が規定されるような前後依存を持つスレッドも多く、どんなに頑張っても隅々まで並行化することはできまい。実は、最も扱いの厄介なものが、「公平性」ってやつかもしれん。人間社会と同様に...

2. タスク分解とデータ分解
ソースコードのスレッド化には、大まかに二つのモデルがあるという。「タスク分解」と「データ分解」である。おいらの場合、並列化というと、タスク分解に目がいってしまうが、データ構造とセットで考える必要がありそうだ。
更新処理が独立していれば、並列化できることはすぐにイメージできるし、既にデータ構造をそのようにしている。オブジェクト指向のカプセル化も突き詰めれば、これに通ずるものがある。画像情報のような連続性を保つ大規模なデータ配列を分割することも、効率性を考慮して既にやっている。フィルタのアルゴリズムでは、チャンク(データ分割)の概念も必要である。ただ、スレッド化という視点が抜けていた。

3. 逐次ソースコードの並行化と、そのストーリー立て...
まず、数値演算が並列化に向いていることを匂わせてくれる。いきなりπを近似する数値積分や帰納変数が飛び出し、ループのネスト構造が線形代数の行列式と重なって見えたり、そのまま DFT, FFT, FIR, IIR などの実装がイメージできたり。個人的には、数値演算ライブラリの BLAS や LAPACK を似たような感覚で利用している。

次に、並列和やプリフィックスキャンで軽く流す。この二つのアルゴリズムは、その単純さゆえに並列化の指標になっているという。

そして、MapReduce 構造に並行化を見る。Map と Reduce の二つの組み合わせは、LISP などの関数型言語、あるいは、Ruby や Python でも見かける手法である。
Map 処理は、入力データを何らかの値と組み合わせて、キーと値のペアを生成する。ペアの生成処理を完全に独立させれば、並行化が見えてくる。
Reduce 処理は、Map 処理の結果を集約して、目的に応じた結果を出力する。この二段階の処理構造によってデータがアルゴリズムから分離され、タスクの独立性が高まることを見て取れる。

さらに、ソートとサーチに主眼を置く。一昔前、CPU 時間の 80% 以上はソートに費やされると言われた。昨今、画像処理系の規模が大きくなったとはいえ、現在でもソートやサーチが重要であることに変わりはあるまい。データベースにアクセスすれば、 クエリの結果が表示され、検索エンジンにキーワードをかければ、URL 一覧が表示され、いつもソートとサーチが暗躍している。
どちらもプログラム入門で題材とされるアルゴリズムだが、スレッド化となると侮れない。ソートとサーチに限ったことではないが、いつもバックグラウンドで動作していて欲しい処理があり、そうしたすべてが並列化の対象となろう...

最後に、データの関連性を視覚化するグラフアルゴリズムに並行化を見る。二次元空間に配置されるノードとエッジからなる有限集合を想定し、これらをツリー構造で図示し、各ノードの関係を隣接行列で記述する。ノードは要素、エッジは二つのノードを連結する枝。
そして、エッジの重みの合計を最小とするアルゴリズムを並行化する。そう、グラフ理論でよく見かける最小スパニングツリー(MST: Minimum Spanning Tree)ってやつだ。MST の有名なアルゴリズムに、Kruskal 法と Prim 法がある。本書では両方の逐次コードが紹介されるが、並行化では、Prim のアルゴリズムが採用されている。どちらも重み行列と連結成分で構成されるが、Kruskal のアルゴリズムはスレッドセーフなヒープの実装が必要など、ちと面倒なようである。

4. スレッド設計の八つのルール
本書は、スレッド設計モデルに適用すべき八つの単純なルールを提示している。単純なだけに、すべてを守るのも難しそうだ。ルールは破るためにある... とは、誰の言葉かは知らんが...

ルール1: 真に独立した処理を特定する。
ルール2: 並行性はより上位で実装する。
ルール3: コア数増加に備えスケーラビリティ対応を早期に計画する。
ルール4: スレッドセーフなライブラリを使用する。
ルール5: 適切なスレッドモデルを採用する。
ルール6: 実行順序を前提としない。
ルール7: ローカル変数を使用する、できなければロックで保護する。
ルール8: 並行性向上のためのアルゴリズム変更を恐れない。

5. 性能指標
本書は、性能指標に高速化率と実行効率を挙げている。高速化率は、逐次実行と並列実行の実行時間の比率である。
実行効率は、リソースの消費効率を示し、高速化率をコア数で割って算出される。
高速化率では、 Amdahl の法則と Gustafson-Barsis の法則が紹介される。前者が、逐次ソースコードを並列化することで達成できる高速化率を予測するのに対して、後者は、既存の並列ソースコードからダイレクトに算出する。

[Amdahl の法則]

  高速化率 ≤   1
 (1 - pctPar) + pctPar/p 

  (pctPar: 並行実行時間の割合, p: コア数)

逐次実行時間を 1 とした時、並列化前の実行時間 1 - pctPar と並列化後の実行時間 pctPar/p の合計を分母に配置して、その割合で高速化率の限界を予測する。

[Gustafson-Barsis の法則]

  高速化率 ≤   p + (1 - P)s

  (p: コア数, s: 並列化できない部分の逐次実行時間の割合)

コア数の増加に伴い、データ量も増加することを考慮している。コア数が増えれば、処理したいプログラムの規模が大きくなり、データ量も増えることは予測できる。

現在では、コア数とスレッド数の関係も微妙だ。当然ながら、コア数をはるかに超えるスレッド数の要求もあれば、Intel の THyper-Threading のように、1つのコアで複数のスレッドに対応する仕掛けもある。高速化率と実行効率は、コア数に対してどのくらいの量のスレッド数を起動するのが割りに合うか、という指標にはなる。
しかし、いくらタフな計算を要求されるによせ、システムが完全に乗っ取られるのは、どうであろう。内部からのイベント要求もあれば、外部からの割り込みも発生する。昔から、CPU 資源は周辺機器との取り合いの中にある。
スレッドの公平性は、あらゆるスレッドを受け付ける方向で調整するように仕組まれる。だが実は、総合的な観点から不公平性にこそシステムの合理性があるのやもしれん。いずれにせよ、システムリソースの使用率は、常に余裕を持っておきたい。人間と同様に...