Настройка соответствия в многоядерных процессорах x86 - PullRequest
3 голосов
/ 15 июня 2009

(Я спрашиваю, потому что до серьезного SMP и многоядерности я изучал ОС. Мне нравится иметь некоторое представление о том, как выполняется код.)

Если у меня многоядерный процессор x86, загружающийся прямо в мою программу. Может кто-нибудь порекомендовать сайт, который описывает, какие команды на ассемблере я должен контролировать сродство?

Ответы [ 2 ]

5 голосов
/ 15 июня 2009

Сходство не определяется состоянием процессора и поэтому не может быть изменено сборкой (в одиночку). Вам необходимо участие ОС. И каждая ОС будет иметь определенный вызов для этого.

Что будет делать ОС: ОС будет иметь планировщик, который фактически является программой, которая определяет, какой процесс выполняется на каком процессоре. Установив привязку как пользователь, вы настраиваете этот планировщик.

И если у вас не будет ОС (что, как мне кажется, подразумевается под вопросом), то вы сами пишете планировщик, и у вас будет собственный контроль над конфигурацией, и вы, вероятно, начнете с глобальной очереди выполнения и для каждого процессора (ядра) следите за этой очередью выполнения и извлекайте из нее процессы для запуска.

Так как же тогда это работает? Во время загрузки работает только один процессор. Если вы, как ОС, готовы к этому, вы «загружаете» другие процессоры, которые начинают выполнять ваш код и, вероятно, будут запускать своего рода планировщик.

Пример реализации см. В Linux 2.6.29, функция arch / x86 / kernel / smpboot.c do_boot_cpu (), которая несколькими способами переводит ЦП в оперативный режим с использованием APIC.

0 голосов
/ 15 июня 2009

Вот довольно хорошее объяснение того, как QNX делает это. Это не так далеко, как поставка требуемого ASM (который в любом случае будет зависеть от платформы), но это может помочь с концепциями:

http://www.embedded.com/columns/technicalinsights/183702309?_requestid=408789

и ряд статей с того же сайта

http://www.embedded.com/products/integratedcircuits/173400008?_requestid=409058

...