void parTreeSearch(StealStack *ss) { Node *parent; Node *child; void *parent_buf, *child_buf; #ifdef USING_GTC parent_buf = (void*) gtc_task_create_ofclass(sizeof(Node), uts_tclass); parent = gtc_task_body((task_t*)parent_buf); child_buf = (void*) gtc_task_create_ofclass(sizeof(Node), uts_tclass); child = gtc_task_body((task_t*)child_buf); #else child = malloc(sizeof(Node)); parent = malloc(sizeof(Node)); parent_buf = parent; child_buf = child; #endif while (ss_get_work(ss, parent_buf) == STATUS_HAVEWORK) { genChildren(parent, child_buf, child, ss); #if DEBUG_PROGRESS > 0 // Debugging: Witness progress... if (ss->nNodes % DEBUG_PROGRESS == 0) printf("Thread %3d: Progress is %d nodes\n", ss_get_thread_num(), ss->nNodes); #endif } #ifdef USING_GTC gtc_task_destroy(parent_buf); gtc_task_destroy(child_buf); #else free(parent); free(child); #endif }
/* * parallel search of UTS trees using work stealing * * Note: tree size is measured by the number of * push operations */ void parTreeSearch(StealStack *ss) { Node* parent; Node* child; parent = malloc(sizeof(Node)); child = malloc(sizeof(Node)); while (ss_get_work(ss,parent) == STATUS_HAVEWORK) { genChildren(parent,child,ss); // Debugging: Uncomment to witness progress... //if (ss->nNodes % 10000 == 0) // printf("Thread %d: Progress is %d nodes\n", ss_get_thread_num(), ss->nNodes); } free(child); free(parent); }