diff --git a/src/engine.c b/src/engine.c index 53109fe3f30b7beb31458e9ffdc88c492167389c..97f5ea60b2f7cf25fb0e8fd334e56a6126aa3258 100644 --- a/src/engine.c +++ b/src/engine.c @@ -2011,11 +2011,17 @@ void engine_init ( struct engine *e , struct space *s , float dt , int nr_thread cpuid[k] = k; } else { + /* Get next highest power of 2. */ + int maxint = 1; + while ( maxint < nr_cores ) + maxint *= 2; + cpuid[0] = 0; k = 1; - for ( i = 1 ; i < nr_cores ; i *= 2 ) - for ( j = nr_cores / i / 2 ; j < nr_cores ; j += nr_cores / i ) - cpuid[k++] = j; + for ( i = 1 ; i < maxint ; i *= 2 ) + for ( j = maxint / i / 2 ; j < maxint ; j += maxint / i ) + if ( j < nr_cores && j != 0 ) + cpuid[k++] = j; #ifdef WITHMPI printf( "engine_init: cpu map is [ " ); #else diff --git a/src/proxy.c b/src/proxy.c index 6c8f4e40476a755d186dda43461c0dc93b156fd0..d96f59b8eca0860c38a09bce6e4c94f7337cd4e6 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -285,7 +285,7 @@ void proxy_parts_load ( struct proxy *p , struct part *parts , struct xpart *xpa ( txp = (struct xpart *)malloc( sizeof(struct xpart) * p->size_parts_out ) ) == NULL ) error( "Failed to re-allocate parts_out buffers." ); memcpy( tp , p->parts_out , sizeof(struct part) * p->nr_parts_out ); - memcpy( txp , p->xparts_out , sizeof(struct part) * p->nr_parts_out ); + memcpy( txp , p->xparts_out , sizeof(struct xpart) * p->nr_parts_out ); free( p->parts_out ); free( p->xparts_out ); p->parts_out = tp; p->xparts_out = txp; }