jak przełączać procesory logiczne w procesie?

0

Witam,
pytanie jest takie jak w temacie postu. Potrzebuje uruchomić mój proces na wszystkich obecnych w komputerze procesorach logicznych. Mógłby ktoś dać jakieś wskazówki.

z góry dziękuje

0

Odpalasz tyle wątków ile jest procesorów logicznych. Resztą zajmuje się automatycznie system operacyjny, wraz z ustaleniem, czy uruchamianie każdego wątka na osobnym rdzeniu to faktycznie dobry pomysł.

0

ja potrzebuje wyliczyć procesory. może uruchamianie jednego procesu na każdym kolejnym procesorze logicznym nie wygląda rozsądnie, ale ja potrzebuje odpytać każdy logiczny procesor instrukcją asm CPUID i potrzebne mi jest zrobić to "osobiście".

0

GNU/Linux ma takie narzędzia, możesz zajrzeć do kodu i bezczelnie skopiować.

0

jak nazywa sie taki tool. bo przeszukiwanie całego kodu linux jest raczej ostatecznością.

2

W Windows można to zrobić za pomocą SetThreadAffinityMask. Ilość procesorów logicznych pobieram z systemu, ale nic nie stoi na przeszkodzie, żeby i to za pomocą cpuid wyciągnąć.

#include <Windows.h>
#include <intrin.h>

#include <cstdio>

int main()
{
    SYSTEM_INFO system_info;
    GetSystemInfo(&system_info);

    for(int i = 0; i < system_info.dwNumberOfProcessors; i++)
    {
        HANDLE thread = CreateThread(NULL, 0, [](LPVOID) -> DWORD
        {
            // Dla procesorów Intel:
            // Each logical processor in an Intel 64 or IA-32 platform supporting coherent memory is assigned a unique ID (APIC ID) within the coherent domain.

            int data[4];
            __cpuid(data, 1);

            printf("APIC ID: %d\n", (data[1] >> 24));

            return 0;
        }, NULL, CREATE_SUSPENDED, NULL);

        DWORD_PTR affinity = 1 << i;
        SetThreadAffinityMask(thread, affinity);
        ResumeThread(thread);
        WaitForSingleObject(thread, INFINITE);
    }
}
0

dzięki wszystkim za pomoc. Rev - o to chodziło.

1 użytkowników online, w tym zalogowanych: 0, gości: 1