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.

Thanks for any useful suggestions.

#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdio.h>
#include <cmath>
#include <iostream>

HANDLE *m_threads = NULL;
static DWORD_PTR WINAPI threadMain(void* p);

DWORD_PTR GetNumCPUs()//this function is not actually used by this example
{
SYSTEM_INFO m_si = {0, };
GetSystemInfo(&m_si);
return (DWORD_PTR)m_si.dwNumberOfProcessors;
}
int main(int argc, char **args)
{
  DWORD_PTR c = 2;

m_threads = new HANDLE[c];

for(DWORD_PTR i = 0; i < c; i++)
{
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);

//wprintf(L"Creating Thread %d (0x%08x) Assigning to CPU 0x%08x\r\n", i, 
(LONG_PTR)m_threads[i], m_mask);
}
WaitForMultipleObjects(c, m_threads, TRUE, INFINITE);
return 0;
}
static DWORD_PTR WINAPI threadMain(void* p)
{
double result = 0.0;

for (int i = 0; i < 1000000000; i++)
{
result = result + sin(i) * tan(i);
}

return 0;
}

Reply via email to