Example: Autonomic Parallel Matrix Multiplication
flops3.c
/******************************************************** The following two lines are example statements that will be dynamically added to complete the program. The program will then be used as an agent code to compose a mobile agent that will be sent to a corresponding agency. char s_n[]="performance_agent1"; char s_a[]="http://bird2.engr.ucdavis.edu:5050/acc"; ********************************************************/ #include <stdio.h> #include <math.h> #include <sys/time.h> #include <sys/resource.h> #include <fipa_acl.h> double nulltime, TimeArray[2], TLimit, T[3]; double sa, sa_2, one, scale; struct rusage rusage; int dtime(double p[]) { double q; q = p[1]; getrusage(RUSAGE_SELF, &rusage); p[1] = (double)(rusage.ru_utime.tv_sec); p[1] = p[1] + (double)(rusage.ru_utime.tv_usec) * 1.0e-06; p[0] = p[1] - q; return 0; } int main() { register double s, u, v, w, x; register long i, m, n; long loops, NLimit; double performance_index; char performance_index_str[50]; char aclreceiver_name[] = "regulating_agent4"; char aclreceiver_address[] = "http://shrimp.engr.ucdavis.edu:5050/acc"; fipa_acl_message_p acl; loops = 15625; T[0] = 1.0E+06/(double)loops; TLimit = 1.5; NLimit = 51200000; one = 1.0; scale = one; dtime(TimeArray); dtime(TimeArray); n = loops; sa = 0.0; while (sa < TLimit) { n = 2 * n; s = 0.0; w = one; sa_2 = 102.3321513995275; v = sa_2 / (double)n; dtime(TimeArray); for(i=1; i<=(n-1); i++) { x = (double)i * v; u = x * x; s = s - w / (x + w) - x / (u + w) - u / (x * u + w); } dtime(TimeArray); sa = TimeArray[0]; if(n == NLimit) { break; } } scale = 1.0E+06 / (double)n; T[0] = scale; dtime(TimeArray); for(i=1; i<=(n-1); i++) { } dtime(TimeArray); nulltime = T[0] * TimeArray[0]; if(nulltime < 0.0) { nulltime = 0.0; } T[1] = T[0] * sa - nulltime; T[2] = T[1] / 12.0; performance_index = one / T[2]; printf("\nPerformance Index obtained by '%s' : '%f'\n", s_n, performance_index); sprintf(performance_index_str, "%f", performance_index); acl = mc_AclNew(); mc_AclSetPerformative( acl, FIPA_INFORM); mc_AclSetSender( acl, s_n, s_a); mc_AclAddReceiver( acl, aclreceiver_name, aclreceiver_address); mc_AclSetContent( acl, performance_index_str); mc_AclSend(acl); return 0; } |
Integration Engineering Laboratory | UCD MTU Sandia |