Как выглядит многоядерный язык ассемблера?

Когда-то, например, для написания ассемблера x86 вы должны были получить инструкции, в которых «загружать регистр EDX значением 5», «увеличивать регистр EDX» и т. Д.

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

Как работает связь / синхронизация между ядрами?

Если вы писали операционную систему, какой механизм предоставляется через оборудование, чтобы позволить вам планировать выполнение на разных ядрах? Это какие-то специальные привилегированные инструкции?

Если бы вы писали оптимизирующую виртуальную машину компилятора / байт-кода для многоядерного процессора, что вам нужно было бы знать конкретно о, скажем, x86, чтобы он генерировал код, эффективно работающий на всех ядрах?

Какие изменения были внесены в машинный код x86 для поддержки многоядерных функций?

Ответы на вопрос(10)

Ваш ответ на вопрос