parallel_workers.c
text/plain
#include <stdio.h>
#include <limits.h>
#define MULTIPLIER 3
int old1(unsigned int heap_pages)
{
int heap_parallel_workers = 1;
int heap_parallel_threshold = 1024;
while (heap_pages >= (unsigned int) (heap_parallel_threshold * MULTIPLIER))
{
heap_parallel_workers++;
heap_parallel_threshold *= MULTIPLIER;
if (heap_parallel_threshold > INT_MAX / MULTIPLIER)
break; /* avoid overflow */
}
return heap_parallel_workers;
}
int new1(unsigned int heap_pages)
{
int heap_parallel_workers = 1;
int heap_parallel_threshold = 1024;
while (heap_pages >= (unsigned int) (heap_parallel_threshold*heap_parallel_workers*heap_parallel_workers))
{
heap_parallel_workers++;
if (heap_parallel_threshold *heap_parallel_workers*heap_parallel_workers> INT_MAX )
break; /* avoid overflow */
}
return heap_parallel_workers;
}
int main(void)
{
for (unsigned int pages = 128; pages != 0; pages <<= 1)
{
printf("Table Size = %llu MB old workers = %d, new workers = %d\n", ((unsigned long long) pages) * 8192 / 1024 / 1024, old1(pages), new1(pages));
}
return 0;
}