#c #multithreading
#c #многопоточность
Вопрос:
Можете ли вы сказать мне, как я могу настроить поток для запуска всего ядра моего процессора? Я создаю поток с помощью: CreateThread(0, 0, Thread, (LPVOID)1, 0, 0); но он работает только на 25% скорости моего процессора, потому что для выполнения вычислений требуется всего 1 ядро. Как я могу настроить его на использование всех 4 для полной скорости?
Комментарии:
1. если бы вы показали код и цель, мы действительно могли бы помочь. Прямо сейчас вы просите о невозможном, так что -1 от меня
2. Использование нескольких потоков (как предлагается в некоторых ответах) будет использовать все ваши ядра, но поймите, что изменение вашей программы на многопоточность делает ее более сложной, особенно в зависимости от вашего опыта и уровня квалификации программиста.
Ответ №1:
Поток будет выполняться на одном ядре в любой момент времени, хотя ОС может переключать его между ядрами. Чтобы ваше приложение использовало более одного ядра, вам понадобится более одного потока.
Вы можете использовать CreateThread
для запуска этих потоков или оболочку вокруг него, например boost::thread
, или новый C 11 std::thread
. Если у вас четыре потока (включая первый), ваше приложение может работать на 4 ядрах одновременно.
Однако добавление потоков в приложение — это не то, что нужно делать легко. Многопоточность — сложная тема, и ее может быть трудно понять правильно. В многопоточных приложениях гораздо больше трудностей, с которыми вы можете столкнуться, и источников ошибок, чем в однопоточных. Следовательно, существует множество статей и книг (включая мою) на тему многопоточного программирования.
Не торопитесь, подробно прочитайте о многопоточном программировании, а затем посмотрите, является ли это лучшим подходом для вашего приложения и как наилучшим образом использовать эти ядра.
Ответ №2:
Чтобы использовать всю мощь ваших 4 ядер, вам придется выполнять некоторую работу с этими 4 ядрами одновременно.
Когда вы создаете поток, вы даете некоторую работу для 1 ядра. Выполнение одного потока выполняется последовательно, инструкция за инструкцией, и одна инструкция может быть выполнена только 1 ядром.
Чтобы иметь возможность использовать 4 ядра, создайте 4 потока.
Ответ №3:
Один поток не может выполняться параллельно на 4 ядрах, как это должно быть возможно? Вместо этого создайте больше потоков (возможно, 4), чтобы использовать все ядра. Затем эти потоки будут выполняться параллельно друг другу на соответствующих ядрах (в идеальном случае).