Работать на нескольких ядрах - PullRequest
0 голосов
/ 02 июля 2018

Изначально у меня есть программа, которую я разделил на несколько частей, чтобы каждая часть выполнялась определенным ядром. Итак, в моем проекте C ++ у меня есть несколько «основных файлов». Я хотел бы знать, можно ли из Visual Studio 2017 сказать «такое ядро ​​выполняет such.cpp».

Использование простого примера счетчика и дисплея: счетчик включает ядро ​​1 и отправляет свои данные на дисплей на ядре 2. Можно ли запустить Visual Studio 2017?

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

В Windows есть вызов, который может ограничить ваш процесс определенным ядром:

https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-setprocessaffinitymask

В этом случае вам нужно запустить несколько процессов, установить их сходство и выполнить разные задачи в каждом из них.

И есть еще один для потоков:

https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-setthreadaffinitymask

В простом случае вы запускаете новый поток для каждой из ваших задач, устанавливаете их сходство, запускаете задачи в потоках, а затем ждете, пока потоки не присоединятся к вашему основному потоку.

0 голосов
/ 02 июля 2018

Нет, это невозможно, и на самом деле это было бы бессмысленно.

По вашей простой идее, core2 не имеет ничего общего, пока core1 не отправит ему некоторые данные, и в этот момент core1 будет ожидать core2. Таким образом, самое большее одно из двух ядер активно в любое время. Для этого было бы гораздо эффективнее использовать одно ядро.

Чтобы использовать несколько ядер в C ++, вам нужно <thread>. Использование <thread> не является автоматическим. Однако, если у вас есть потоки, использование нескольких ядер является автоматическим.

...