parallel_workers.c

text/plain

Filename: parallel_workers.c
Type: text/plain
Part: 0
Message: Re: simple patch for discussion
#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;
}