Freesurfer并行处理数据parallel

通常我们用freesurfer处理一个数据所用时间需要6个多小时,但实际上电脑的CPU并没有被充分的利用,freesurfer处理一个数据一般只需要一个逻辑内核,所以如果您有10个逻辑内核,可以同时并行处理10个数据,让电脑的利用率达到最大,同样的时间内之前6个小时只处理一个数据,理论上现在可以在6个小时处理10个数据,但其实我实验之后发现,可能需要18个小时来处理10个数据,但也是大大提升了处理效率。

mac查看电脑的物理CPU和逻辑CPU:

sysctl hw.physicalcpu hw.logicalcpu

您应该得到类似这样的结果:

hw.physicalcpu: 4
hw.logicalcpu: 8

本文电脑的逻辑CPU为8个,freesurfer可以同时处理8个数据

一、方法:

您可能需要安装一个Xcode,然后需要一个Homebrew,目的就是拥有一个parallel。Homebrew安装parallel:

brew install parallel

有了parallel我们就可以让逻辑cpu并行处理数据了。

Linux系统安装parallel:

wget https://ftp.gnu.org/gnu/parallel/parallel-20210822.tar.bz2

tar jxvf parallel-20210822.tar.bz2

cd parallel-20210822

./configure --prefix=指定安装路径

make -j 4

make install

二、命令

需要使用bash来运行parallel,查询当前使用的shell可以用:echo $0

如果当前不是bash,想要切换成bash,只需要在命令行上输入:bash

如果你想用当前目录作为工作目录:export SUBJECTS_DIR=`pwd`

之后就是把数据弄成.nii格式放到一个文件夹(SUBJECTS_DIR),运行下面的语句就可以啦:

ls *.nii | parallel --jobs 8 recon-all -s {.} -i {} -all -qcache

recon-all -s subj01 -i subj01.nii -all -qcache

subj01.nii.gz

recon-all -s subj01 -i subj01.nii.gz -all -qcache

ls *.nii | parallel --jobs 8 recon-all -s {..} -i {} -all -qcache

解释一下上面的语句:

ls列出当前工作目录的所有.nii格式的文件;

ls把得到的列表给paralle,--jobs 8使得电脑用不同的内核来并行处理8个数据;

-s {.} 表示每个数据(例如subj001.nii)得到的结果放到一个文件夹中,文件夹命名为subj001;

-i 选项指示使用ls命令的输出作为并行命令的输入。

现在来处理一下你的数据吧:

ls .. | grep ^sub- > subjList.txt

for sub in `cat subjList.txt`; do
cp ../${sub}/ses-BL/anat/*.gz .
done

gunzip *.gz

SUBJECTS_DIR=`pwd`

ls *.nii | parallel --jobs 8 recon-all -s {.} -i {} -all -qcache

rm *.nii

for sub in `cat subjList.txt`; do
mv ${sub}_ses-BL_T1w.nii ${sub}
done

学术引用:应用GNU Parallel处理数据,发表文章时需要引用文献:

  Tange, O. (2020, November 22). GNU Parallel 20201122 ('Biden').

  Zenodo. https://doi.org/10.5281/zenodo.4284075

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值