#include #include #include #include "limits.h" #include "types.h" #include "engine.c" #include "score_feed.h" void feed(unsigned begin, unsigned end); long long timediff(struct timespec start, struct timespec end); void print_cpuaffinity(); /* This script provides indicative unofficial score. Lowest score wins. Run Ubuntu 10.10 with the kernel option isocpus=1 and match "Detailed information about judging platform", on the challenge webpage, to make this as close to the judging environment as possible. */ int msg_batch_size = 10; int replays = 200; void execution(t_execution exec) {}; int main() { print_cpuaffinity(); int raw_feed_len = sizeof(raw_feed)/sizeof(t_order); int samples = replays * (raw_feed_len/msg_batch_size); long long late[samples]; // batch latency measurements struct timespec begin; struct timespec end; /*int j; for (j = 0; j < replays; j++) {*/ /*init();*/ /*int i; for (i = msg_batch_size; i < raw_feed_len; i += msg_batch_size) {*/ /*clock_gettime(CLOCK_MONOTONIC_RAW, &begin);*/ /*feed(i-msg_batch_size, i);*/ /*clock_gettime(CLOCK_MONOTONIC_RAW, &end);*/ /*late[i/msg_batch_size - 1 + (j*(raw_feed_len/msg_batch_size))] = timediff(begin, end);*/ /*} */ /*destroy();*/ /*}*/ init(); clock_gettime(CLOCK_MONOTONIC_RAW, &begin); feed(0, raw_feed_len); clock_gettime(CLOCK_MONOTONIC_RAW, &end); printf("total time = %llu\n", timediff(begin, end)); destroy(); /*long long late_total = 0LL;*/ /*int i; for (i = 0; i < samples; i++) { late_total += late[i]; }*/ /*double late_mean = ((double)late_total) / ((double)samples);*/ /*double late_centered = 0;*/ /*double long late_sqtotal = 0LL;*/ /*for (i = 0; i < samples; i++) {*/ /*late_centered = ((double)late[i]) - late_mean;*/ /*late_sqtotal += late_centered*late_centered/((double)samples);*/ /*}*/ /*double late_sd = sqrt(late_sqtotal);*/ /*printf("mean(latency) = %1.2f, sd(latency) = %1.2f\n", late_mean, late_sd);*/ /*double score = 0.5 * (late_mean + late_sd); */ /*printf("You scored %1.2f. Try to minimize this.\n", score);*/ } void feed(unsigned begin, unsigned end) { int i; for(i = begin; i < end; i++) { if (raw_feed[i].price == 0) { cancel(raw_feed[i].size); } else { limit(raw_feed[i]); } } } long long timediff(struct timespec start, struct timespec end) { struct timespec temp; if ((end.tv_nsec-start.tv_nsec)<0) { temp.tv_sec = end.tv_sec-start.tv_sec-1; temp.tv_nsec = 1000000000+end.tv_nsec-start.tv_nsec; } else { temp.tv_sec = end.tv_sec-start.tv_sec; temp.tv_nsec = end.tv_nsec-start.tv_nsec; } return (temp.tv_sec*1000000000) + temp.tv_nsec; } void print_cpuaffinity() { unsigned long mask = 2; /* processor 1 (0-indexed) */ unsigned int len = sizeof(mask); if (sched_getaffinity(0, len, &mask) < 0) { perror("sched_getaffinity"); } printf("my affinity mask is: %08lx\n", mask); }