introduce theta chunking for MPI jobs
This commit is contained in:
parent
842b790b1f
commit
2353da0042
1 changed files with 69 additions and 45 deletions
|
@ -216,13 +216,36 @@ static void sharp_execute_job_mpi (sharp_job *job, MPI_Comm comm)
|
|||
|
||||
MPI_Barrier(comm);
|
||||
double timer=wallTime();
|
||||
int lmax = job->ainfo->lmax;
|
||||
|
||||
job->norm_l = sharp_Ylmgen_get_norm (lmax, job->spin);
|
||||
|
||||
job->opcnt=0;
|
||||
sharp_mpi_info minfo;
|
||||
sharp_make_mpi_info(comm, job, &minfo);
|
||||
|
||||
if (minfo.npairtotal>minfo.ntasks*300)
|
||||
{
|
||||
int nsub=(minfo.npairtotal+minfo.ntasks*200-1)/(minfo.ntasks*200);
|
||||
for (int isub=0; isub<nsub; ++isub)
|
||||
{
|
||||
sharp_job ljob=*job;
|
||||
if ((isub>0)&&(job->type==SHARP_MAP2ALM)) ljob.flags|=SHARP_ADD;
|
||||
sharp_geom_info lginfo;
|
||||
lginfo.pair=RALLOC(sharp_ringpair,(job->ginfo->npairs/nsub)+1);
|
||||
lginfo.npairs=0;
|
||||
while (lginfo.npairs*nsub+isub<job->ginfo->npairs)
|
||||
{
|
||||
lginfo.pair[lginfo.npairs]=job->ginfo->pair[lginfo.npairs*nsub+isub];
|
||||
++lginfo.npairs;
|
||||
}
|
||||
ljob.ginfo=&lginfo;
|
||||
sharp_execute_job_mpi (&ljob,comm);
|
||||
job->opcnt+=ljob.opcnt;
|
||||
DEALLOC(lginfo.pair);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
int lmax = job->ainfo->lmax;
|
||||
job->norm_l = sharp_Ylmgen_get_norm (lmax, job->spin);
|
||||
|
||||
/* clear output arrays if requested */
|
||||
init_output (job);
|
||||
|
||||
|
@ -282,6 +305,7 @@ static void sharp_execute_job_mpi (sharp_job *job, MPI_Comm comm)
|
|||
DEALLOC(sth);
|
||||
DEALLOC(job->norm_l);
|
||||
dealloc_phase (job);
|
||||
}
|
||||
sharp_destroy_mpi_info(&minfo);
|
||||
job->time=wallTime()-timer;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue