Se capisco cosa stai chiedendo, è possibile, ma è una cosa molto, molto brutta.
L'esempio canonico di ciò che stai descrivendo sarebbe il mantenimento di un contatore che viene incrementato da più thread. Ciò non richiede quasi nulla in termini di potenza di calcolo, ma richiede un attento coordinamento tra i thread. Finché un solo thread alla volta esegue un incremento (che in realtà è una lettura seguita da un'aggiunta seguita da una scrittura), il suo valore sarà sempre corretto. Questo perché un thread leggerà sempre il valore "precedente" corretto, ne aggiungerà uno e scriverà il valore "successivo" corretto. Ottieni due thread nell'azione contemporaneamente ed entrambi leggono lo stesso valore "precedente", ottengono lo stesso risultato dall'incremento e scrivono lo stesso valore "successivo". Il contatore sarà effettivamente aumentato solo una volta, anche se due thread pensano di averlo fatto ciascuno.
Questa dipendenza tra tempismo e correttezza è ciò che l'informatica chiama una condizione di razza .
Le condizioni di gara vengono spesso evitate utilizzando i meccanismi di sincronizzazione per assicurarsi che i thread che desiderano operare su una parte di dati condivisi debbano mettersi in fila per l'accesso. Il contatore sopra descritto potrebbe usare un blocco lettura-scrittura per questo.
Senza accesso al design interno di Dragon Age: Inquisition , tutto ciò che chiunque può fare è speculare sul perché si comporti in questo modo. Ma proverò sulla base di alcune cose che ho visto fare nella mia esperienza:
È possibile che il programma si basi su quattro thread che sono stati sintonizzati in modo che tutto funzioni quando i thread vengono eseguiti per lo più ininterrottamente sui propri core fisici. La "messa a punto" potrebbe presentarsi sotto forma di riorganizzazione del codice o inserimento di sleep in luoghi strategici per mitigare i bug indotti dalle condizioni di gara che sono emersi durante lo sviluppo. Ancora una volta, questa è tutta una congettura, ma ho visto le condizioni di gara "risolte" in quel modo più volte di quanto mi importi.
L'esecuzione di un programma in questo modo su qualcosa di meno capace rispetto all'ambiente per il quale è stato messo a punto introduce cambiamenti di temporizzazione che sono il risultato del fatto che il codice non viene eseguito più rapidamente o, più probabilmente, dei cambi di contesto. I cambi di contesto avvengono in modo fisico (ovvero i nuclei fisici della CPU stanno cambiando tra il lavoro svolto dai suoi core logici) e logici (ovvero, il sistema operativo sulla CPU sta assegnando lavoro ai core), ma l'una o l'altra è una significativa divergenza rispetto a ciò sarebbe il tempismo di esecuzione "previsto". Ciò può far emergere comportamenti scorretti.
Se Dragon Age: Inquisition non fa il semplice passo per assicurarsi che ci siano abbastanza nuclei fisici disponibili prima di procedere, è colpa di EA. Probabilmente stanno spendendo una piccola fortuna mettendo in campo le chiamate di supporto e le e-mail da parte di persone che hanno cercato di eseguire il gioco su hardware troppo piccolo.