Exemplo n.º 1
0
/**** Function: r250n Description: returns a random unsigned integer k
     uniformly distributed in the interval 0 <= k < n ****/
unsigned int r250n(unsigned n)
{
  /*---------------------------------------------------------------------------*/
  register int j;
  register unsigned int new_rand, limit;
  /*---------------------------------------------------------------------------*/
  limit = (65535U / n) * n;
  do
    {
      new_rand = r250();
      if (r250_index >= 147)
        j = r250_index - 147;      /* Wrap pointer around */
      else
        j = r250_index + 103;

      new_rand = r250_buffer[r250_index] ^= r250_buffer[j];

      if (r250_index >= 249)      /* Increment pointer for next time */
        r250_index = 0;
      else
        r250_index++;
    }
  while (new_rand >= limit);
  return new_rand % n;
}
Exemplo n.º 2
0
unsigned int r250n(unsigned n)
{
	 register int j;
	 register unsigned int new_rand,limit;

	 limit=(65535U/n)*n;
	 do
	  {
		 (void)r250();
		 if(r250_index>=147)
			j=r250_index-147;
		 else
			j=r250_index+103;

		 new_rand=r250_buffer[r250_index]^=r250_buffer[j];

	if(r250_index>=249)
	  r250_index=0;
	else
	  r250_index++;
	} while(new_rand>=limit);
	 return new_rand % n;
}
Exemplo n.º 3
0
int main(int argc, char** argv) {

	unsigned int* __restrict address;
	unsigned int* __restrict memory;

	unsigned int i, j;
	unsigned int t=0;
	unsigned int numberOfMemoryLocation;

	dictionary *programInput;
	double startTime;
	double elapsedTime = 0, totalElapsedTime = 0;
	double initializationTime, experimentTime;

	programInput = ParseInput(argc, argv);
	ValidateParameters();

	// Initialize memory manager
	MMMasterInitialize(0, 0, FALSE, NULL);

	numberOfMemoryLocation = MemorySize / sizeof(int);

	// Allocate memory
	address = MMUnitAllocate((NumberOfAccess + 8) * sizeof(unsigned int));
	memory = MMUnitAllocate((numberOfMemoryLocation + 32) * sizeof(unsigned int));

	// Set random seed
	r250_init(getRandomSeed());

	// Set start time
	startTime = setStartTime();

	printf("Initialize memory pointers with random values..");


	for (i=0; i<numberOfMemoryLocation + 32; i++) {
		memory[i] = r250();
	}
	// Initialize address and memory
	for (i=0; i<NumberOfAccess + 8; i++) {
		address[i] = (r250() % numberOfMemoryLocation) / 4 * 4;
	}

	printf("finished.\n");

	elapsedTime = getElapsedTime(startTime) - totalElapsedTime;
	totalElapsedTime += elapsedTime;
	initializationTime = elapsedTime;

	// Test memory speed for read
	if (ReadWrite[0] == 'R' || ReadWrite[0] == 'r') {
		for (i=0; i<NumberOfIteration; i++) {
			for (j=0; j<NumberOfAccess; j++) {


				t += memory[address[j]];

			}
		}
	}
	// Test memory speed for write
	if (ReadWrite[0] == 'W' || ReadWrite[0] == 'w') {
		for (i=0; i<NumberOfIteration; i++) {
			for (j=0; j<NumberOfAccess; j++) {
				memory[address[j]] += address[j];
			}
		}
	}

	elapsedTime = getElapsedTime(startTime) - totalElapsedTime;
	totalElapsedTime += elapsedTime;
	experimentTime = elapsedTime;

	// So that compiler does not remove code for variables t and r
	if (t==0) {
		printf("\n");
	}

	printf("Experiment completed.\n");

	printf("Initialization time   = ");
	printElapsedTime(stdout, FALSE, FALSE, TRUE, 2, initializationTime);
	printf("Experiment time       = ");
	printElapsedTime(stdout, FALSE, FALSE, TRUE, 2, experimentTime);
	
	MMUnitFree(address, (NumberOfAccess + 8) * sizeof(unsigned int));
	MMUnitFree(memory, (numberOfMemoryLocation + 32) * sizeof(unsigned int));

	iniparser_freedict(programInput);

	return 0;

}