并行计算的强大

mac2022-06-30  87

最近在处理一批数据,10的8次方,处理完毕大概要一个月,并且这个程序占用的CPU只有一个(我从来没有注意到这个问题啊啊啊)。

突然师兄提醒我可以把10的8次方条数据拆成10个10的7次方,作为10条任务并行处理,我艹,三天就跑完了啊,坑爹呢这是我之前怎么没想到呢混蛋!!

 

以后单任务的程序一定要注意下CPU的使用情况。

 

并行处理也有个简单的方法,就是把原始文件给切割后提交,让队列调度程序给你并行调度就ok了。大家不要拍砖啊,这个玩意儿还是挺有用处的。

下面这个破脚本,哦,是perl脚本,用来切割文件的。我这里讲某个文件切割成,每4000条数据一个文件,每1000个文件一个文件夹,闲话少说,上酸菜:

Perl代码   #!/usr/bin/perl -w  # Program name: filter_pro.pl  # Author      : bbsunchen  # Contact     : bbsunchen at gm*il.com  # Date        : 11/10/2011  # Last Update : 11/10/2011  # Reference   : Please cite our following papers when you are using this script.    # Description :     #===============================================================================================================  use warnings;  use strict;  use Getopt::Long;  use Cwd qw(abs_path);  use File::Basename qw(dirname);    my %opts;  GetOptions(\%opts,"dir:s");  my $usage= <<"USAGE";      Program: $0      INPUT:          -dir        full path of file        OUTPUT:  USAGE  die $usage unless ($opts{dir} && -e $opts{dir});    my $cwd;  if ($opts{dir} =~ m{^/})  {    $cwd = dirname($opts{dir});  }  else  {    $cwd = dirname(abs_path($opts{dir}));  }  open DIR, $opts{dir};  my $seq_num = 0;  my $title = "";  my $data = "";  while(<DIR>)  {      $seq_num++;      if($seq_num % 2 != 0)      {          $title = $_;          next;      }else      {          $data = $_;       }      my $decide_path = 0;      if($seq_num % 2 == 0)      {          $decide_path = $seq_num / 2;       }else      {          $decide_path = int($seq_num / 2) + 1;      }            my $file_name = int($decide_path / 4000);      my $path_name = int($file_name / 1000);      my $temp_path = "$cwd/$path_name";      mkdir $temp_path,0775 unless (-e "$temp_path");      die $! unless ($opts{dir} && -e $opts{dir});      open OUT, ">> $temp_path/$file_name.fa";      print OUT $title;      print OUT $data;      close OUT;  }  close DIR; 

转载于:https://www.cnblogs.com/J2EEPLUS/archive/2012/05/06/2488014.html

最新回复(0)