brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.1 KiB · 2c970d4 Raw
48 lines · c
1#include "timing.h"2#include <stdio.h>3 4#define INPUT_TYPE int64_t5#define INPUT_SIZE 5126#define FUNCTION_NAME __floatdidf7 8#ifndef LIBNAME9#define LIBNAME UNKNOWN10#endif11 12#define LIBSTRING		LIBSTRINGX(LIBNAME)13#define LIBSTRINGX(a)	LIBSTRINGXX(a)14#define LIBSTRINGXX(a)	#a15 16double FUNCTION_NAME(INPUT_TYPE x);17 18int main(int argc, char *argv[]) {19	INPUT_TYPE input[INPUT_SIZE];20	int i, j;21	22	srand(42);23	24	// Initialize the input array with data of various sizes.25	for (i=0; i<INPUT_SIZE; ++i)26		input[i] = (((uint64_t)rand() << 32) | (uint64_t)rand()) >> (rand() & 63);27	28	double bestTime = __builtin_inf();29	void *dummyp;30	for (j=0; j<1024; ++j) {31 32		uint64_t startTime = mach_absolute_time();33		for (i=0; i<INPUT_SIZE; ++i)34			FUNCTION_NAME(input[i]);35		uint64_t endTime = mach_absolute_time();36		37		double thisTime = intervalInCycles(startTime, endTime);38		bestTime = __builtin_fmin(thisTime, bestTime);39		40		// Move the stack alignment between trials to eliminate (mostly) aliasing effects41		dummyp = alloca(1);42	}43	44	printf("%16s: %f cycles.\n", LIBSTRING, bestTime / (double) INPUT_SIZE);45	46	return 0;47}48