Как выглядит многоядерный язык ассемблера?
Когда-то, например, для написания ассемблера x86 вы должны были получить инструкции, в которых «загружать регистр EDX значением 5», «увеличивать регистр EDX» и т. Д.
С современными процессорами, которые имеют 4 ядра (или даже больше), на уровне машинного кода это просто выглядит так, как будто есть 4 отдельных процессора (т.е. есть только 4 отдельных регистра "EDX")? Если да, то когда вы говорите «увеличить регистр EDX», что определяет, какой регистр EDX ЦП увеличивается? Есть ли в ассемблере x86 понятие «контекст процессора» или «нить»?
Как работает связь / синхронизация между ядрами?
Если вы писали операционную систему, какой механизм предоставляется через оборудование, чтобы позволить вам планировать выполнение на разных ядрах? Это какие-то специальные привилегированные инструкции?
Если бы вы писали оптимизирующую виртуальную машину компилятора / байт-кода для многоядерного процессора, что вам нужно было бы знать конкретно о, скажем, x86, чтобы он генерировал код, эффективно работающий на всех ядрах?
Какие изменения были внесены в машинный код x86 для поддержки многоядерных функций?