10月第1週の振り返り

10月第1週(9/30-10/6)

フランス法文献講読

今週は初週であり学んだことはない。

債権総論

債権の効力には「債務者に対して給付を請求する権能(請求力)」・「給付を保持する―保持しても不当利得にならない―権能(給付保持力)」・「給付がない場合に訴訟を提起し給付を求める権能(訴求力)」・「判決後に強制執行を通して給付を受ける権能(強制力)」がある。付随的に損害賠償請求権追完請求権債権侵害からの保護もある。契約から生じた債権では解除権がある。

種類債権とは一定の種類に属するものを一定量引き渡すことを目的とする債権で、各々の個性を問題としないものである。ただし同種の品のうちで中等の品質であることとされている。種類債権は特定ののちは特定物債権と同等に扱われるとされるが、潮見説では567条を反対解釈して追完請求は妨げられず、引き渡し前に滅失した場合は再調達を要求できるとする。

金銭債権は、特定の種類の通貨の給付を目的としていない場合(1万円札で、あるいは日本円で、などの指定がない場合)金額債権と呼ばれ、通貨の種類選択は債務者の自由であるということは初めて知った。

徳義上の支払い、消滅時効となった債務、不法原因給付、破産により免責された債務などの自然債務は訴求力を欠く。

履行の強制方法としては直接強制(与える債務)、代替執行(為す債務)、間接強制(代替できない作為義務などに対し、履行しないことにペナルティを課すことで履行を促す)がある。

また履行の強制は履行が不能である場合には認められない。不能の類型には物理的に不可能である場合、履行が法令により禁止されている場合(法律的不能)、履行に要する費用が債権者の利益に比して過大なものである場合がある。

ただし禁制品の取引は法律的不能以前に90条の公序良俗違反により契約が無効となるために履行を拒絶できる。法律的不能が生じるのは契約締結後の価値観や情勢の変化(禁輸国指定など)の場合である。

選択債権では選択権者の過失で一方が滅失した場合には他方を選択できるし、双方とも引き渡しを拒むことはできない。例え選択権者でない当事者の過失によって滅失したとしても事情は変わらず、ただ滅失したものについての不法行為に基づく損害賠償請求が別件でできるだけである。選択権者の過失によらない理由で滅失した場合は、選択権者が債権者・債務者のどちらであっても滅失した方を選択して履行不能による解除とすることもできるし、そうでない方を選んで引き渡すこともできる。

債務不履行には本旨不履行(履行遅滞および不完全履行)と履行不能がある。債務不履行の要件は「債務の本旨不履行・履行不能」+「損害」+「因果関係」である。改正民法では帰責事由がないときは免責であり、帰責事由は不履行を構成する積極要件ではなくなった(実務上はさほど変わらないとされる)。

履行補助者(運送業者など)の過失を、債務者の過失と同視できる限度で帰責事由と認めるのが通説、債権者が履行代行者の使用を許容した場合は選任監督に過失がなければ免責とする学説も存在。三者の過失リスクをどちらが引き受けていたかを契約の解釈によって導出して判断するというのが近時の学説。

債務の内容として結果債務と手段債務があり、診療は手段債務である。すなわち任務に適した手段を用いることが給付内容であって結果の実現を保証していない。適切な手段が用いられていれば債務不履行とはならない。

債務の履行に代わる損害賠償請求(填補賠償請求)を行うためには、履行不能、確定的履行拒絶、契約解除権発生のいずれかが必要。契約を実際に解除する前にも損害賠償請求が認められるのは、履行を請求すると同時に、執行不能に備えた予備的代償請求を行うことができるから(民執法31条2項)。

並列プログラミング

並列parallelと並行concurrentは異なる。並列は同時に複数のものを実行するもので、並行は短時間のうちに処理内容を切り替えながら複数のものを一度に一つ、しかし進み具合は均等になるよう実行するもの。

Flynnの分類では並列計算機は命令とデータ流についてそれぞれ二分され4種類存在する。同時に複数のデータを処理してくれなければ意味がないので、SIMD/MIMDについて扱う。ベクトルプロセッサは一つの命令で複数のデータを操作するのでSIMDである。MIMDはスーパーコンピュータのノードがそれぞれ別の命令(分けられたOS)で複数のデータを操作する状態が該当する。

並列計算機はメモリの形式による分類も存在し、通信網を通して単一の共有メモリにアクセスする共有メモリ(Uniform Memory Access)型、各処理単位に分散して共有メモリを持たせ、足りない領域・手持ちにない情報は通信網を通してアクセスする非対称メモリ型(Non-UMA)、完全に各処理単位でメモリが独立している分散メモリ型(メッセージパッシング)に分けられる。

FX10の場合、ノード内はUMAだがノード間は独立している。Reedbush-Uではプロセッサに直結しているメモリと、IntelのQuickPath Interconnectを通じてアクセスできる他プロセッサのメモリが利用できるのでNUMAである。

並列プログラミングの手法としてはスレッド自体の挙動を制御するマルチスレッド(Pthreadsなど)、データ並列(OpenMP)、タスク並列、メッセージ通信(MPI)がある。複数ノードにわたる並列化はデータ並列とメッセージ通信が利用可能である。

データ並列は行列-行列積で左の行列の各行(データ)をそれぞれ別のプロセッサが保持して処理するといった例が挙げられる。タスク並列はプログラム内の処理の依存関係を把握して、依存関係ごとに分けた各段階で先に並列実行しておくもので、シチューを作るために野菜を切ることと水を沸騰させることのどちらも終わっていなければ煮込み始めることができないという依存関係において野菜のカットと鍋の加熱を同時にしておくといった例が挙げられる。

メモリを独立に持つのがプロセスであり、共有するのがスレッドである。OpenMPでマルチスレッド処理を行いつつ、ノード間をMPIでマルチプロセス処理をさせることも可能である。MPIは明示的に通信が必要な分散メモリ型計算機では必須である。MPIは共有メモリ上でもプロセス間通信ができる。

実際に発行される命令は各プロセスで異なるため複数種類になるが、人間が書くプログラムとしては単一なのでSIMD的な発想となる(Single Program Multiple Data)。

並列化効率に影響を及ぼす要因はいくつかあるが、多くの台数を用いた場合には各プロセッサのキャッシュに載りきるほどデータが小さく分割されることがある。この時は台数に対して線形的な性能向上を超えた(super linear)効率化が生じることがある。一方で全ての処理が並列化可能なわけではなく、並列化できる割合をαとしたとき十分に大きい台数で処理したとしても並列化できない部分は1台で処理するのと変わらないため全体の処理速度は1/(1-α)倍にしかならないというアムダールの法則が知られている。

Byte/FLOP値はプログラム中の1演算中にメモリアクセスが平均でどれほどあるか、またはメモリがプロセッサの一演算中にどれほどのデータを供給できるかを指し、メモリアクセスは演算よりはるかに遅いので後者は通常0.1以下となる。

データの分割は任意の次元で行える。例えば1次元分割では、上三角行列を処理する場合まとまりとして全行をk等分すると最初のプロセッサの処理すべきデータが多い一方で最後のプロセッサは極めて少ないという不均衡が生じるので、そのような場合にはサイクリック分割(ブロック幅w行ごとに分割して順繰りに割り当てるのを繰り返すラウンドロビン)のほうが効率化できる。

MPI_RecvとMPI_Sendはペアであり、RecvへのSendが完了するまでそのプロセスでは処理は一時停止する。

法医学

英米系と大陸系の死因究明制度は異なっており、英米系では解剖による究明を求める遺族がコロナー(coroner、法廷の役割を果たす)に訴え出て行政解剖を行うことができる。大陸系では検察が力を持っている。

法医学が発達しているとされる豪ヴィクトリア州では死亡に至った周辺環境も調査し、今後同様の死亡が避けられるよう勧告を行う。法曹たるコロナー自身が医学的知識を以て勧告に携わっている。

CTを死後に撮って脳内出血が見つかると日本では病死とみなしてしまいがちで、外傷や薬物によっても引き起こされるという法医学的知識の欠如による見逃しが起きる。

江戸時代では中国の洗冤録をもとに外見を観察するものであり、被害者に対する解剖は行われなかった。

その後日本に法医解剖が導入されるが、解剖能力に乏しいため犯罪が疑われる場合にのみ解剖が行われ、死因不明の遺体をすべて調査する原則が守られなかった。戦後になって日本でもアメリカに倣って医師自身をコロナーにする監察医制度が導入されるはずだったが、引き続き犯罪死かどうかを外観から警察が判断する仕組みが残ってしまい、大学は犯罪死体だけ、監察医は非犯罪(に見える)死体だけしか扱わず、かつ非犯罪死体の解剖は国費負担でないため簡易なもので済まされることがある。

その上司法解剖行政解剖で県警・県庁と管轄が分かれるうえ、国立大学法人化前は大学が文科省であり、他省庁に予算を付け替えることが許されていないために警察庁の予算を大学に交付することができず担当医師個人へのわずかな謝金が寄付という形で大学に回されているのみだった。

現在では死因・身元調査法で死因不明のものは警察判断で承諾なしに解剖ができるようになり、予算が多少割り当てられた。しかし全県で十分とはとても言えない。

風呂場での死亡が好例であるが、解剖による死因究明が行われないためある県ではほとんど溺死扱い、別の県ではほとんど心不全扱いとなり、しかもそれが正しいか分からないため風呂場での死亡対策に活かせない。ガス湯沸かし器事故も解剖が行われなかったため当初心不全とされた。

ネットワーク論

Ethernetデータリンク層(OSI L2)のプロトコル―どのように0と1の信号を送るのか。0と1のパターンによって意味を決めるのがEthernet。48bit/6byte/6Octetsの宛先・発信元MACアドレスや、SFD(開始フレームデリミタ)、データ長に関する情報、エラー検出シーケンスがデータ以外についてくる。最大で1.5kiBを一度に運べる。何に関するパケットを送っているのかという情報も送る(プロトコルタイプフィールド)。0800であればIPv4

10base-T(OSI L1 物理層)における符号化はマンチェスター符号である。100base-TXの4B/5Bとは4bitの後に必ず"1"であるビットを付加することで干渉対策をしている。

NICに対してEthernetはどのように制御を行うのか。NICは固有のMACアドレス(L2識別子、GUID)を有しており、複数のIPアドレスもついている(複数のL3プロトコル―IP以外も―を同一リンク上で利用するため)。

MACアドレスのそれぞれは256通りの値をとる=2^8=8bit=1byteで、6個6byteからなる。アドレスの前半はベンダーによって固有のため、不正な通信の発信元にいかなるNICが搭載されているかを確認するために使用できる。

IPv4と違って枯渇しないのは単に32bitと48bitの違いだけではない。IPv4は割り当てが非常に放漫で、256個あるところに10個しか使っていないことがよくあるが、NICは製造時に設定されるので緻密に割り当てられていることも理由である。

Carrier Sense Multiple Access / Collision Detectionが実装容易であることからEthernetの基本方式とされる。

接続形態は3種。

  • Point-to-Point(2ノードしかない):相手は一人なので全員(=相手1人)に送信すればよく、MACアドレスは必要ない。
  • Broadcast Multiple Access(バス型):全員が同一リンクに接続し、フレームをブロードキャストする。受け取る相手を指定するためにMACアドレスが必要。
  • Non-Broadcast Multiple Access(コネクション型):相手との論理的接続を確立して直接送る。現在あまり使われない。

このブロードキャストする範囲がコリジョンドメインであり、帯域幅と送信データを共有する。

半二重通信は同一チャネルでタイミングを切り替えて送受信を行う。

リピータは接続されているすべてのポートに信号を送信し、ブリッジはポートとMACアドレスの対応を記憶し、そこに合致するMACアドレス宛のフレームは当該ポートにだけ送信することで無駄を減らす。基本的にはある程度フレームを蓄積して後で送る(Store and Forward)が、来た瞬間から送る(Cut-through)こともできる。ただしパケットロスが発生しやすい。

ARPでは全員に対して該当IPアドレスかどうか問い合わせて、該当するならMACアドレスが返ってくる。ARPにおいて宛先アドレスはff:ff:ff:ff:ff:ffという特殊なMACアドレスにして送る。

Ethernetは閉路がない前提で構築され、ルータ(L3)で区切られる。ルータはIPアドレスによって送り先のL2スイッチを選んで送信し、その中ではARPによってIPアドレスMACアドレスの対応が行われ当該ポートへ届く。L2スイッチを閉路が存在するよう接続してしまうとフレームがループしてしまい、「ブロードキャストストーム」によって帯域が占有されてしまう。IPと異なりTTLが存在しないために起こる現象である。

これに対処するためにSpanning Tree Protocolがある。ストームが発生して閉路を検出したとき、木構造に含めないことで回避する。どのスイッチ間を優先し、どのスイッチ間を無視するのかは事前に設定されたPriorityと帯域幅によって自動的に計算されるコストによって決定する。障害発生時に無視されていたバックアップ回線を自動的に戻すことは想定されていない。