Если я понимаю, что вы спрашиваете, это возможно, но это очень, очень плохо.
Каноническим примером того, что вы описываете, будет поддержание счетчика, который увеличивается на несколько потоков. Это почти ничего не требует в плане вычислительной мощности, но требует тщательной координации между потоками. Пока только один поток за раз делает приращение (которое фактически является чтением, за которым следует добавление, за которым следует запись), его значение всегда будет правильным. Это связано с тем, что один поток всегда будет читать правильное «предыдущее» значение, добавлять его и записывать правильное «следующее» значение. Получите два потока в действие одновременно, и оба будут читать одно и то же «предыдущее» значение, получать одинаковый результат из приращения и записывать одно и то же «следующее» значение. Счетчик будет эффективно увеличен только один раз, хотя два потока считают, что каждый из них это сделал.
Эта зависимость между временем и правильностью - это то, что информатика называет состоянием гонки .
Гоночных условий часто избегают, используя механизмы синхронизации, чтобы убедиться, что потоки, желающие работать с частью общих данных, должны получить доступ к линии. Счетчик, описанный выше, может использовать блокировку чтения-записи для этого.
Не имея доступа к внутреннему дизайну Dragon Age: Inquisition , все, что может сделать каждый, - это размышлять о том, почему он ведет себя так, как он. Но я попробую, основываясь на некоторых вещах, которые я видел в своем собственном опыте:
Возможно, программа основана на четырех настроенных потоках, поэтому все работает, когда потоки работают в основном непрерывно на своих физических ядрах. «Настройка» может происходить в форме перестановки кода или вставки спящих мест в стратегических местах, чтобы смягчить ошибки, вызванные состоянием гонки, которые возникают во время разработки. Опять же, это все догадки, но я видел, что условия гонки "разрешались" таким образом больше раз, чем я хотел бы сосчитать.
Выполнение подобной программы на чем-то менее способном, чем среда, для которой она была настроена, вносит изменения синхронизации, которые являются результатом того, что код работает не так быстро или, что более вероятно, переключением контекста. Переключение контекста происходит физическим (т. Е. Физические ядра ЦП переключаются между работой, которую держат его логические ядра) и логическим (т. Е. ОС на ЦП распределяет работу по ядрам) способами, но это либо существенно отличается от того, что будет "ожидаемым" временем выполнения. Это может выявить плохое поведение.
Если Dragon Age: Inquisition не предпримет простого шага, чтобы убедиться в наличии достаточного количества физических ядер, прежде чем продолжить, это вина EA. Вероятно, они тратят небольшое состояние, отправляя звонки в службу поддержки и электронные письма от людей, которые пытались запустить игру на слишком маленьком оборудовании.