FSL(FMRIB Software Library)には、fsl_subというプログラムがあります。これは並列処理をするためのプログラムですが、基本、クラスターコンピューティングを想定しており、CPUによる並列処理に対応していません。
Chris Rorden先生が、CPUでの並列処理に対応したfsl_subを公開されています。CPUでの高速化の手順を研究室の黒下君がまとめてくれましたので、公開します。
- fsl_subをCPU並列処理対応版に入れ替え
- CPUによる並列処理の有効化
- 測定スクリプトの解凍
- 測定スクリプト(CPU用)での動作確認
Terminalを立ち上げ、ネットワークに繋がった状態で、次のコマンドを実行します。
ここでは、並列処理対応版を入手し、FSLのオリジナルのfsl_subをfsl_sub_origとファイル名を変更したうえで、FSLのディレクトリにCPUでの並列処理対応版のfsl_subをコピーします。
1 2 3 4 | cd ~ /git git clone https: //github .com /neurolabusc/fsl_sub .git sudo mv $FSLDIR /bin/fsl_sub $FSLDIR /bin/fsl_sub_orig sudo cp ~ /git/fsl_sub/fsl_sub $FSLDIR /bin/ . |
Terminalで次のコマンドを実行します。FSLPARALLELは1と設定すると、並列処理に使うCPUのコア数を自動で決めます。もし、使いたいコア数を特定したい場合には、その数字を指定します。
1 | export FSLPARALLEL=1 |
ただしそのままだとPC再起動で無効に戻ります。常に有効にするには、~/.bashrc に上記のコマンドを追記しておけばよいです。
Terminalで次のコマンドを実行します。
1 2 | cd ~ /git/fsl_sub unzip bedpostTest.zip |
Terminalで次のコマンドを実行します。数十分かかります。
まず並列処理無効で測定が行われ、次に並列処理有効で測定が行われます。並列処理有効の方が早いことが確認されます。
1 2 | cd ~ /git/fsl_sub/ . /runme_quick .sh |
上に示した例では、最初はBedpostx Monitorの下に
real 26m3.158s
と出ていますので、26分かかったことがわかります。
次にBedpostx Monitorと出てくるすぐ下に
fsl_sub running 4 cores to process 6 tasks
とあります。
検証に使ったPCは非力で4コアしかないものなので、これが4となっています。
それでも、その下に出てくる処理時間は
real 10m50.174s
となっていますので、処理時間が半分になったことがわかります。