From 0dd6e2a858275f9632927fddf969349add6e0143 Mon Sep 17 00:00:00 2001 From: Martin Reinecke Date: Fri, 11 Jan 2013 13:38:15 +0100 Subject: [PATCH] improve chunk size calculation --- libsharp/sharp.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/libsharp/sharp.c b/libsharp/sharp.c index 1daeb7a..d35a49f 100644 --- a/libsharp/sharp.c +++ b/libsharp/sharp.c @@ -50,9 +50,19 @@ static int chunksize_min=500, nchunks_max=10; static void get_chunk_info (int ndata, int nmult, int *nchunks, int *chunksize) { - *chunksize = IMAX(chunksize_min,(ndata+nchunks_max-1)/nchunks_max); - *chunksize = ((*chunksize+nmult-1)/nmult)*nmult; - *nchunks = (ndata+*chunksize-1) / *chunksize; + *chunksize = (ndata+nchunks_max-1)/nchunks_max; + if (*chunksize>=chunksize_min) // use max number of chunks + { + *chunksize = ((*chunksize+nmult-1)/nmult)*nmult; + *nchunks = nchunks_max; + } + else // need to adjust chunksize and nchunks + { + *nchunks = (ndata+chunksize_min-1)/chunksize_min; + *chunksize = (ndata+(*nchunks)-1)/(*nchunks); + if (*nchunks>1) + *chunksize = ((*chunksize+nmult-1)/nmult)*nmult; + } } static int sharp_get_mlim (int lmax, int spin, double sth, double cth,