CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

並列実行

トランスピュータでの並列実行とは一体どんなものなのか・・セーター屋さんの例ではどうしようもないのでコンパイルが通る最小限のコードを書いてみました

左側が通常の順次処理、右側が一部にPARステートメントを使った並列処理を含みます

ともに変数xに3を代入、変数yに4を代入した後その和をzに代入してLEDとコンソールに値を返しているだけです。ここでxへの代入とyへの代入は互いに依存していない、つまり他方の結果を利用しないので、時間的に同時に実行できるわけでPARステートメントで並列して表記できるということになります(zは当然x,yの結果を必要とするので並列できずPARブロックの外に置かなければならい)

このソースをコンパイル、バイナリをボード上で実行するとどちらの場合でもLEDは"00000111"で点灯、コンソールには7を表示してしれっと正常終了します

ただ順次実行はいいとしても並列実行はどうなってるのでしょうか。このプログラムは1枚のボード上で動いているのでCPU、つまりアキュームレータは1個しかなく同時に2つのことができるはずがありません。そこでこのバイナリも逆アセンブルしてみました

左の順次処理は想定通りですが、右の並列処理ではxへの代入とyへの代入をそれぞれSTARTP~ENDPで挟み込むことでプロセス化しているということになります。これらがどう起動され、同時並行は無理としてもどう順次プロセスを処理するのかはもう少しマニュアルを読まなければなりません