Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(71)

Side by Side Diff: nacl/bench-framework.c

Issue 7821018: Add Richards and DeltaBlue benchmarks (Closed) Base URL: https://code.google.com/p/web-shootout/@master
Patch Set: Created 9 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « nacl/bench-framework.h ('k') | nacl/build.scons » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #include <assert.h> 1 #include <assert.h>
2 #include <math.h> 2 #include <math.h>
3 #include <stdio.h> 3 #include <stdio.h>
4 #include <stdlib.h> 4 #include <stdlib.h>
5 #include <string.h> 5 #include <string.h>
6 #include <sys/time.h> 6 #include <sys/time.h>
7 #include "bench-framework.h" 7 #include "bench-framework.h"
8 #include "benchstringio.h" 8 #include "benchstringio.h"
9 9
10 /* Minimum benchmark runtime in us */ 10 /* Minimum benchmark runtime in us */
11 static const int kMinBenchRuntime = 1000000; 11 static const int kMinBenchRuntime = 1000000;
12 static int benchmark_count = 0; 12 static int benchmark_count = 0;
13 static int started = 0; 13 static int started = 0;
14 static bench_info bench_info_list[MAX_BENCHMARKS]; 14 static bench_info bench_info_list[MAX_BENCHMARKS];
15 static run_data bench_run_data[MAX_BENCHMARKS]; 15 static run_data bench_run_data[MAX_BENCHMARKS];
16 16
17 enum run_model_t { kRunModelRepeated, kRunModelOnce }; 17 enum run_model_t { kRunModelRepeated, kRunModelOnce };
18 static enum run_model_t run_model; 18 static enum run_model_t run_model;
19 19
20 void RegisterBenchmark(char *name, bench_function entry, int param, int time_ref ) { 20 void RegisterBenchmark(char *name, bench_function entry, int param, int time_ref ) {
21 if (benchmark_count == MAX_BENCHMARKS) {
22 ReportStatus("Too many benchmarks. Increase MAX_BENCHMARKS in framework\n");
23 exit(1);
24 }
21 bench_info_list[benchmark_count].name = name; 25 bench_info_list[benchmark_count].name = name;
22 bench_info_list[benchmark_count].run = entry; 26 bench_info_list[benchmark_count].run = entry;
23 bench_info_list[benchmark_count].time_ref = time_ref; 27 bench_info_list[benchmark_count].time_ref = time_ref;
24 bench_info_list[benchmark_count].param = param; 28 bench_info_list[benchmark_count].param = param;
25 benchmark_count++; 29 benchmark_count++;
26 } 30 }
27 31
28 void ClearBenchmarks() { 32 void ClearBenchmarks() {
29 for (int i = 0; i < benchmark_count; i++) free(bench_info_list[i].name); 33 for (int i = 0; i < benchmark_count; i++) free(bench_info_list[i].name);
30 benchmark_count = 0; 34 benchmark_count = 0;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 for (i = 0; i < benchmark_count; i++) { 68 for (i = 0; i < benchmark_count; i++) {
65 run_data *rd = &bench_run_data[i]; 69 run_data *rd = &bench_run_data[i];
66 bench_info *bi = &bench_info_list[i]; 70 bench_info *bi = &bench_info_list[i];
67 double usec_per_run; 71 double usec_per_run;
68 printf("Running %s\n", bi->name); 72 printf("Running %s\n", bi->name);
69 ++started; 73 ++started;
70 ReportStatus("Running %s (%d/%d)\n", bi->name, started, benchmark_count); 74 ReportStatus("Running %s (%d/%d)\n", bi->name, started, benchmark_count);
71 RunOne(bi, rd); 75 RunOne(bi, rd);
72 usec_per_run = (double)rd->elapsed / (double)rd->runs; 76 usec_per_run = (double)rd->elapsed / (double)rd->runs;
73 rd->score = 100.0 * bi->time_ref / usec_per_run; 77 rd->score = 100.0 * bi->time_ref / usec_per_run;
78 printf("usec_per_run %f\n", usec_per_run);
74 ReportStatus("%s: %d", bi->name, (int)rd->score); 79 ReportStatus("%s: %d", bi->name, (int)rd->score);
75 } 80 }
76 started = 0; 81 started = 0;
77 } 82 }
78 83
79 static void PrintScores() { 84 static void PrintScores() {
80 int i; 85 int i;
81 for (i = 0; i < benchmark_count; i++) { 86 for (i = 0; i < benchmark_count; i++) {
82 printf("Benchmark %s: usec %d, iters %d, usec/run %d score %.2f\n", 87 printf("Benchmark %s: usec %d, iters %d, usec/run %d score %.2f\n",
83 bench_info_list[i].name, 88 bench_info_list[i].name,
84 bench_run_data[i].elapsed, 89 bench_run_data[i].elapsed,
85 bench_run_data[i].runs, 90 bench_run_data[i].runs,
86 bench_run_data[i].elapsed / bench_run_data[i].runs, 91 bench_run_data[i].elapsed / bench_run_data[i].runs,
87 bench_run_data[i].score); 92 bench_run_data[i].score);
88 } 93 }
89 } 94 }
90 95
91 static double GeometricMean() { 96 static double GeometricMean() {
92 int i; 97 int i;
93 double log_total = 0.0; 98 double log_total = 0.0;
94 for (i = 0; i < benchmark_count; i++) { 99 for (i = 0; i < benchmark_count; i++) {
95 log_total += log(bench_run_data[i].score); 100 log_total += log(bench_run_data[i].score);
96 } 101 }
97 return pow(M_E, log_total / benchmark_count); 102 return pow(M_E, log_total / benchmark_count);
98 } 103 }
99 104
100 void SetupSmallBenchmarks() { 105 void SetupSmallBenchmarks() {
106 RegisterBenchmark(strdup("Richards"), run_richards, 10000, 35302);
107 RegisterBenchmark(strdup("Deltablue"), run_deltablue, 100, 66118);
101 RegisterBenchmark(strdup("Fannkuchredux"), run_fannkuch, 10, 64052288); 108 RegisterBenchmark(strdup("Fannkuchredux"), run_fannkuch, 10, 64052288);
102 RegisterBenchmark(strdup("Nbody"), run_nbody, 1000000, 73000000); 109 RegisterBenchmark(strdup("Nbody"), run_nbody, 1000000, 73000000);
103 RegisterBenchmark(strdup("Spectralnorm"), run_spectralnorm, 350, 150020779); 110 RegisterBenchmark(strdup("Spectralnorm"), run_spectralnorm, 350, 150020779);
104 RegisterBenchmark(strdup("Fasta"), run_fasta, 10000, 51667385); 111 RegisterBenchmark(strdup("Fasta"), run_fasta, 10000, 51667385);
105 RegisterBenchmark(strdup("Revcomp"), run_revcomp, 0, 23542857); 112 RegisterBenchmark(strdup("Revcomp"), run_revcomp, 0, 23542857);
106 RegisterBenchmark(strdup("Binarytrees"), run_binarytrees, 15, 383306452); 113 RegisterBenchmark(strdup("Binarytrees"), run_binarytrees, 15, 383306452);
107 RegisterBenchmark(strdup("Knucleotide"), run_knucleotide, 0, 433893130); 114 RegisterBenchmark(strdup("Knucleotide"), run_knucleotide, 0, 433893130);
108 RegisterBenchmark(strdup("Pidigits"), run_pidigits, 1000, 406976744); 115 RegisterBenchmark(strdup("Pidigits"), run_pidigits, 1000, 406976744);
109 run_model = kRunModelRepeated; 116 run_model = kRunModelRepeated;
110 } 117 }
111 118
112 void SetupLargeBenchmarks() { 119 void SetupLargeBenchmarks() {
120 RegisterBenchmark(strdup("Richards"), run_richards, 1000000, 35302);
121 RegisterBenchmark(strdup("Deltablue"), run_deltablue, 10000, 66118);
113 RegisterBenchmark(strdup("Fannkuchredux"), run_fannkuch, 11, 64052288); 122 RegisterBenchmark(strdup("Fannkuchredux"), run_fannkuch, 11, 64052288);
114 RegisterBenchmark(strdup("Nbody"), run_nbody, 10000000, 73000000); 123 RegisterBenchmark(strdup("Nbody"), run_nbody, 10000000, 73000000);
115 RegisterBenchmark(strdup("Spectralnorm"), run_spectralnorm, 5500, 150020779); 124 RegisterBenchmark(strdup("Spectralnorm"), run_spectralnorm, 5500, 150020779);
116 RegisterBenchmark(strdup("Fasta"), run_fasta, 3000000, 51667385); 125 RegisterBenchmark(strdup("Fasta"), run_fasta, 3000000, 51667385);
117 RegisterBenchmark(strdup("Revcomp"), run_revcomp, 0, 23542857); 126 RegisterBenchmark(strdup("Revcomp"), run_revcomp, 0, 23542857);
118 RegisterBenchmark(strdup("Binarytrees"), run_binarytrees, 18, 383306452); 127 RegisterBenchmark(strdup("Binarytrees"), run_binarytrees, 18, 383306452);
119 RegisterBenchmark(strdup("Knucleotide"), run_knucleotide, 0, 433893130); 128 RegisterBenchmark(strdup("Knucleotide"), run_knucleotide, 0, 433893130);
120 RegisterBenchmark(strdup("Pidigits"), run_pidigits, 5000, 406976744); 129 RegisterBenchmark(strdup("Pidigits"), run_pidigits, 5000, 406976744);
121 run_model = kRunModelOnce; 130 run_model = kRunModelOnce;
122 } 131 }
(...skipping 23 matching lines...) Expand all
146 PrintScores(); 155 PrintScores();
147 score = (int) GeometricMean(); 156 score = (int) GeometricMean();
148 #ifdef ARRAYFILE 157 #ifdef ARRAYFILE
149 arrayfile_fclose(arrayfile_stdout); 158 arrayfile_fclose(arrayfile_stdout);
150 arrayfile_stdout = NULL; 159 arrayfile_stdout = NULL;
151 #endif 160 #endif
152 ClearBenchmarks(); 161 ClearBenchmarks();
153 printf("Aggregate score: %d\n", score); 162 printf("Aggregate score: %d\n", score);
154 return score; 163 return score;
155 } 164 }
OLDNEW
« no previous file with comments | « nacl/bench-framework.h ('k') | nacl/build.scons » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698