Hi Samuel and Brice,
I made the changes to the code. I tried running it and it crashed around line 53 with this statement (I debugged it by stepping through the program). hwloc_set_thread_cpubind(topology, handle, hwloc_get_obj_by_type(topology, HWLOC_OBJ_CORE, t)->cpuset, 0); I also wanted to know what these two lines mean: bitmap = hwloc_bitmap_alloc(); hwloc_bitmap_only(bitmap, t); and do I need those? #include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <math.h> #include <hwloc.h> /* A task that takes some time to complete. The id identifies distinct tasks for printed messages. */ hwloc_topology_t topology; void *task(int id) { printf("Task %d started\n", id); int i; double result = 0.0; for (i = 0; i < 1000000000; i++) { result = result + sin(i) * tan(i); } printf("Task %d completed with result %e\n", id, result); } /* Same as 'task', but meant to be called from different threads. */ void *threaded_task(void *t) { long id = (long) t; printf("Thread %ld started\n", id); task(id); printf("Thread %ld done\n", id); pthread_exit(0); } /* Run 'task' num_tasks times serially. */ void *parallel(int num_tasks) { int num_threads = num_tasks; pthread_t thread[num_threads]; int rc; long t; hwloc_bitmap_t bitmap; for (t = 0; t < num_threads; t++) { printf("Creating thread %ld\n", t); rc = pthread_create(&thread[t], NULL, threaded_task, (void *)t); HANDLE handle = pthread_getw32threadhandle_np(thread[t]); bitmap = hwloc_bitmap_alloc(); hwloc_bitmap_only(bitmap, t); hwloc_set_thread_cpubind(topology, handle, hwloc_get_obj_by_type(topology, HWLOC_OBJ_CORE, t)->cpuset, 0); if (rc) { printf("ERROR: return code from pthread_create() is %d\n", rc); exit(-1); } } hwloc_bitmap_free(bitmap); } int main() { hwloc_topology_init(&topology); parallel(2); pthread_exit(NULL); } Andrew