Le 19/11/2012 21:01, Andrew Somorjai a écrit : > Below I posted a simple windows thread creation C++ routine which sets > the processor affinity to two cores. > What I want is the equivalent code using hwloc. Sorry for being > somewhat new to this but I'm not sure what > api calls are equivalent to the windows calls and I did search hwloc.h > for "affinity" thinking the function call > would be easy to find. More specifically I'm wondered whats the > equivalent of " CreateThread ", " SetThreadAffinityMask ", > " GetSystemInfo ", and " WaitForMultipleObjects " in hwloc.
CreateThread() and WaitForMultipleObjects() are not in hwloc since they have nothing to do with topologies. > DWORD_PTR m_id = 0; > DWORD_PTR m_mask = 1 << i; > > m_threads[i] = CreateThread(NULL, 0, > (LPTHREAD_START_ROUTINE)threadMain, (LPVOID)i, NULL, &m_id); > SetThreadAffinityMask(m_threads[i], m_mask); This will likely be something such as: hwloc_bitmap_t bitmap = hwloc_bitmap_alloc(); hwloc_bitmap_set_only(bitmap, i); hwloc_set_thread_cpubind(topology, m_threads[i], bitmap, 0); hwloc_bitmap_free(bitmap); To get the number of processors with hwloc, use something like: hwloc_get_nbobjs_by_type(topology, HWLOC_OBJ_CORE); or hwloc_get_nbobjs_by_type(topology, HWLOC_OBJ_PU); Then it depends if you want real cores (the former or hardware threads (the latter). Brice