Blame src/validation_tests/papi_br_ucn.c

Packit Service a1973e
/* This file attempts to test the unconditional branch instruction	*/
Packit Service a1973e
/* performance counter PAPI_BR_UCN					*/
Packit Service a1973e
Packit Service a1973e
/* by Vince Weaver, <vincent.weaver@maine.edu>				*/
Packit Service a1973e
Packit Service a1973e
#include <stdlib.h>
Packit Service a1973e
#include <stdio.h>
Packit Service a1973e
#include <unistd.h>
Packit Service a1973e
#include <string.h>
Packit Service a1973e
Packit Service a1973e
#include "papi.h"
Packit Service a1973e
#include "papi_test.h"
Packit Service a1973e
Packit Service a1973e
#include "display_error.h"
Packit Service a1973e
#include "testcode.h"
Packit Service a1973e
Packit Service a1973e
Packit Service a1973e
int main(int argc, char **argv) {
Packit Service a1973e
Packit Service a1973e
	int num_runs=100,i;
Packit Service a1973e
	long long high=0,low=0,average=0,expected=500000;
Packit Service a1973e
	double error;
Packit Service a1973e
Packit Service a1973e
	long long count,total=0;
Packit Service a1973e
	int quiet=0,retval,ins_result;
Packit Service a1973e
	int eventset=PAPI_NULL;
Packit Service a1973e
Packit Service a1973e
	quiet=tests_quiet(argc,argv);
Packit Service a1973e
Packit Service a1973e
	if (!quiet) {
Packit Service a1973e
		printf("\nTesting the PAPI_BR_UCN event.\n");
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	/* Init the PAPI library */
Packit Service a1973e
	retval = PAPI_library_init( PAPI_VER_CURRENT );
Packit Service a1973e
	if ( retval != PAPI_VER_CURRENT ) {
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_library_init", retval );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	retval=PAPI_create_eventset(&eventset);
Packit Service a1973e
	if (retval!=PAPI_OK) {
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_create_eventset", retval );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	retval=PAPI_add_named_event(eventset,"PAPI_BR_UCN");
Packit Service a1973e
	if (retval!=PAPI_OK) {
Packit Service a1973e
		test_skip( __FILE__, __LINE__, "adding PAPI_BR_UCN", retval );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	if (!quiet) {
Packit Service a1973e
		printf("Testing a loop with %lld unconditional branches (%d times):\n",
Packit Service a1973e
			expected,num_runs);
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	for(i=0;i
Packit Service a1973e
		PAPI_reset(eventset);
Packit Service a1973e
		PAPI_start(eventset);
Packit Service a1973e
Packit Service a1973e
		ins_result=branches_testcode();
Packit Service a1973e
Packit Service a1973e
		retval=PAPI_stop(eventset,&count);
Packit Service a1973e
Packit Service a1973e
		if (ins_result==CODE_UNIMPLEMENTED) {
Packit Service a1973e
			fprintf(stderr,"\tCode unimplemented\n");
Packit Service a1973e
			test_skip( __FILE__, __LINE__, "unimplemented", 0);
Packit Service a1973e
		}
Packit Service a1973e
Packit Service a1973e
		if (retval!=PAPI_OK) {
Packit Service a1973e
			test_fail( __FILE__, __LINE__,
Packit Service a1973e
				"reading PAPI_TOT_INS", retval );
Packit Service a1973e
		}
Packit Service a1973e
Packit Service a1973e
		if (count>high) high=count;
Packit Service a1973e
		if ((low==0) || (count
Packit Service a1973e
		total+=count;
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	average=(total/num_runs);
Packit Service a1973e
Packit Service a1973e
	error=display_error(average,high,low,expected,quiet);
Packit Service a1973e
Packit Service a1973e
	if ((error > 1.0) || (error<-1.0)) {
Packit Service a1973e
		if (!quiet) printf("Instruction count off by more than 1%%\n");
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "Error too high", 1 );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	if (!quiet) printf("\n");
Packit Service a1973e
Packit Service a1973e
	test_pass( __FILE__ );
Packit Service a1973e
Packit Service a1973e
	PAPI_shutdown();
Packit Service a1973e
Packit Service a1973e
	return 0;
Packit Service a1973e
}