FSL(FMRIB Software Library)には、fsl_subというプログラムがあります。これは並列処理をするためのプログラムですが、基本、クラスターコンピューティングを想定しており、CPUによる並列処理に対応していません。
Chris Rorden先生が、CPUでの並列処理に対応したfsl_subを公開されています。CPUでの高速化の手順を研究室の黒下君がまとめてくれましたので、公開します。
- fsl_subをCPU並列処理対応版に入れ替え
Terminalを立ち上げ、ネットワークに繋がった状態で、次のコマンドを実行します。
ここでは、並列処理対応版を入手し、FSLのオリジナルのfsl_subをfsl_sub_origとファイル名を変更したうえで、FSLのディレクトリにCPUでの並列処理対応版のfsl_subをコピーします。
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のコア数を自動で決めます。もし、使いたいコア数を特定したい場合には、その数字を指定します。
export FSLPARALLEL=1
ただしそのままだとPC再起動で無効に戻ります。常に有効にするには、~/.bashrc に上記のコマンドを追記しておけばよいです。
Terminalで次のコマンドを実行します。
cd ~/git/fsl_sub unzip bedpostTest.zip
Terminalで次のコマンドを実行します。数十分かかります。
まず並列処理無効で測定が行われ、次に並列処理有効で測定が行われます。並列処理有効の方が早いことが確認されます。
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
となっていますので、処理時間が半分になったことがわかります。