int test_main(void){ int a=3, c; int b=-5; void *args1[3]; void *args2[3]; int tab[100]; int i,res; work_t *work1,*work2,*work3,*work4; int nb_threads = get_nb_threads(); printf("nb_threads= %d\n", nb_threads); args1[0] = &a; args1[1] = &b; work1 = create_work(2,args1,f1); for (i=0;i<100;i++) tab[i]=i; c=100; args2[0] = &c; args2[1] = tab; args2[2] = &res; work2 = create_work(3, args2, f2); work3 = create_work(4, args2, f2); work4 = create_work(5, args2, f2); submit_work(work1,0); submit_work(work2,1); submit_work(work3,1); submit_work(work4,1); terminate_thread_pool(); wait_work_completion(work1); wait_work_completion(work2); wait_work_completion(work3); wait_work_completion(work4); printf("res=%d\n",res); destroy_work(work1); destroy_work(work2); destroy_work(work3); destroy_work(work4); return 0; }
int bind_myself_to_core(hwloc_topology_t topology, int id){ hwloc_cpuset_t cpuset; hwloc_obj_t obj; char *str; int binding_res; int depth = hwloc_topology_get_depth(topology); int nb_cores = hwloc_get_nbobjs_by_depth(topology, depth-1); int my_core; int nb_threads = get_nb_threads(); /* printf("depth=%d\n",depth); */ switch (mapping_policy){ case SCATTER: my_core = id*(nb_cores/nb_threads); break; default: if(verbose_level>=WARNING){ printf("Wrong scheduling policy. Using COMPACT\n"); } case COMPACT: my_core = id%nb_cores; } if(verbose_level>=INFO){ printf("Mapping thread %d on core %d\n",id,my_core); } /* Get my core. */ obj = hwloc_get_obj_by_depth(topology, depth-1, my_core); if (obj) { /* Get a copy of its cpuset that we may modify. */ cpuset = hwloc_bitmap_dup(obj->cpuset); /* Get only one logical processor (in case the core is SMT/hyperthreaded). */ hwloc_bitmap_singlify(cpuset); /*hwloc_bitmap_asprintf(&str, cpuset); printf("Binding thread %d to cpuset %s\n", my_core,str); FREE(str); */ /* And try to bind ourself there. */ binding_res = hwloc_set_cpubind(topology, cpuset, HWLOC_CPUBIND_THREAD); if (binding_res == -1){ int error = errno; hwloc_bitmap_asprintf(&str, obj->cpuset); if(verbose_level>=WARNING) printf("Thread %d couldn't bind to cpuset %s: %s.\n This thread is not bound to any core...\n", my_core, str, strerror(error)); free(str); /* str is allocated by hlwoc, free it normally*/ return 0; } /* FREE our cpuset copy */ hwloc_bitmap_free(cpuset); return 1; }else{ if(verbose_level>=WARNING) printf("No valid object for core id %d!\n",my_core); return 0; } }
int CompilationEnvironment::make_app( const String &app, const String &cpp, bool lib, bool dyn, bool want_libs ) { Ptr<CompilationTree> res = make_compilation_tree( app, cpp, lib, dyn, want_libs ); return res->exec( get_nb_threads(), &cout ); }