Я пытаюсь построить алгоритм искусственного интеллекта Tetris, который может масштабироваться на несколько ядер.
В моих тестах оказалось, что использование нескольких потоков медленнее, чем использование одного потока.
После некоторых исследований я обнаружил, что мои темы проводят большую часть своего времени в ожидании _Lockit _Lock(_LOCK_DEBUG)
. Вот скриншот .
Как видите, блокировка применяется к локальной переменной , которая в любом случае не требует блокировки!
Мои вопросы:
- Почему STL блокирует этот вектор?
- Как я могу сделать мою программу быстрее? (Использовать массивы?)
Обновление
Я снял блокировку, установив следующие параметры командной строки в моих проектах Visual Studio:
/D "_HAS_ITERATOR_DEBUGGING=0" /D "_SECURE_SCL=0"
Важно применить это ко всем проектам в файле решения, иначе во время выполнения возникнут ошибки (конфликтующие итераторы и т. Д.).
Вторая вещь, которую я изменил, меняла std::vector<bool>
на std::vector<char>
. Я не знал, что std::vector<bool>
было так медленно.