Вы смешиваете две независимые (ортогональные) идеи в теории цифровых схем: асинхронные схемы и многоядерные процессоры.
Асинхронные схемы: схемы, которые имеют более одного тактового генератора, и тактовые импульсы асинхронны (то есть имеют непостоянное и непредсказуемое фазовое отношение).
Некоторые схемы могут использовать два такта (например), но один - это просто деление на 2 от другого. Эти схемы не являются асинхронными, поскольку между двумя тактовыми генераторами существует известная фазовая зависимость, хотя частоты тактовых импульсов различны.
У вас может быть одноядерный ЦП с несколькими асинхронными часами и многоядерный ЦП со всеми его ядрами, работающими на одинаковых тактовых частотах (последний - просто воображаемый ЦП - все настоящие многоядерные ЦП имеют много тактовых импульсов, которые состоят из нескольких взаимно наборы асинхронных часов).
Асинхронные схемы - главная тема в цифровом дизайне. Приведенное выше объяснение является основным.
Многоядерные процессоры: несколько параллельно подключенных микропроцессоров (ядер), в которых используется сложное аппаратное и программное обеспечение для достижения высокой производительности.
Обычная практика - сделать ядра как можно более независимыми с точки зрения часов / мощности / исполнения / и т. Д. Это позволяет динамически (во время выполнения) регулировать активность процессоров (т.е. потребляемую мощность) в соответствии с фактическими потребностями системы.
У меня сложилось впечатление, что вы ищете объяснение многоядерных процессоров , а не асинхронных схем.
Эта тема намного, намного больше, чем что-либо, что можно вставить в ответ.
Ответы на ваши вопросы, хотя:
- Часы, используемые разными ядрами (насколько мне известно), имеют одни и те же источники (их может быть несколько: кристалл, VCO, ...). Каждое ядро (обычно) имеет несколько взаимно-асинхронных наборов часов. Каждое ядро имеет специальную логику стробирования и регулирования тактовой частоты, которая позволяет отключать или замедлять тактовую частоту независимо для каждого ядра. Опять же, если вас интересует только алгоритмический аспект параллелизма ядер - забудьте о часах (пока).
- Вы только что указали главный аспект параллельности сердечников - как запускать несколько ядер параллельно эффективно . Эта тема огромна и содержит решения HW и SW. С точки зрения HW, ядра модифицируют общую память и обмениваются управляющими и статусными сигналами с логикой последовательности и между собой. Картина сильно усложняется из-за наличия кешей - я бы посоветовал начать с чтения на кешах, затем на когерентность кеша и только потом на кеш в многоядерных системах.
Надеюсь это поможет.