void run() { unsigned i, time; gasnett_tick_t start, end; hashset_create(params[HASHSET_SIZE], params[ON_PTHREAD]); BARRIER(); start = gasnett_ticks_now(); for (i = 0; i < MY_NUM_OPS; ++i) { if (put_flags[i] == GRT_TRUE) { hashset_insert(numbers[i]); } else { hashset_find(numbers[i]); } } end = gasnett_ticks_now(); time = ((unsigned) gasnett_ticks_to_us(end - start)); //printf("processor %u: execution time=%f us\n", // grt_id, (double) time); fflush(stdout); grt_write(0, time, ×[grt_id]); BARRIER(); if (grt_id == 0) { time = 0, max_time = 0; for (i = 0; i < grt_num_procs; ++i) { gasnett_tick_t this_time = times[i]; time += this_time; if (this_time >= max_time) max_time = this_time; } time_per_op = ((float) time) / params[NUM_OPS]; printf("total CPU time=%f us\n", (double) time); printf("time per operation=%f us\n", time_per_op); printf("max time=%f us\n", (double) max_time); } BARRIER(); hashset_destroy(); BARRIER(); }
int main(int argc, char** argv) { hashset_init(argc, argv, 4); struct timeval tv; gettimeofday(&tv, 0); srand(tv.tv_usec); unsigned i; #ifdef PTHREAD hashset_create(TABLE_SIZE, GRT_TRUE); #else hashset_create(TABLE_SIZE, GRT_FALSE); #endif BARRIER(); grt_debug_print("generating numbers\n"); for (i = 0; i < N; ++i) { numbers[i] = rand(); } grt_debug_print("inserting numbers\n"); for (i = 0; i < N; ++i) { hashset_insert(numbers[i]); } BARRIER(); grt_debug_print("finding numbers\n"); for (i = 0; i < N; ++i) { grt_word_t num = numbers[i]; unsigned found = hashset_find(num); if (!found) { fprintf(stderr, "processor %d: expected to find %llx\n", grt_id, num); } } BARRIER(); grt_debug_print("done\n"); hashset_destroy(); hashset_exit(0); }
void *downloader(void *arg) { struct input_args *in_args = (struct input_args *)arg; while (1) { char *url = (char *)bounded_buffer_get(in_args->url_queue); if (url == NULL) break; if (hashset_contains(in_args->url_set, url) == 0) { hashset_insert(in_args->url_set, url); char *content = in_args->fetch(url); assert(content != NULL); struct page *page = (struct page *)mem_malloc(sizeof(struct page)); page->url = url; page->content = content; unbounded_buffer_put(in_args->page_queue, (void *)page); } else { mem_free(url); } bounded_buffer_done(in_args->url_queue); mutex_lock(in_args->done_mutex); cond_signal(in_args->done_cond); mutex_unlock(in_args->done_mutex); } return NULL; }