FSLをCPUによる並列処理で高速化する

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/.
    

  • CPUによる並列処理の有効化
  • Terminalで次のコマンドを実行します。FSLPARALLELは1と設定すると、並列処理に使うCPUのコア数を自動で決めます。もし、使いたいコア数を特定したい場合には、その数字を指定します。

    export FSLPARALLEL=1
    

    ただしそのままだとPC再起動で無効に戻ります。常に有効にするには、~/.bashrc に上記のコマンドを追記しておけばよいです。

  • 測定スクリプトの解凍
  • Terminalで次のコマンドを実行します。

    cd ~/git/fsl_sub
    unzip bedpostTest.zip
    
  • 測定スクリプト(CPU用)での動作確認
  • 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

    となっていますので、処理時間が半分になったことがわかります。

Print Friendly, PDF & Email

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください