Начну с менее заметных и не таких эффектных новшеств нового процессорного ядра. По сравнению с Dothan в Yonah была существенно повышена эффективность работы процессора с инструкциями наборов SSE. Теперь с их декодированием справляются все три декодера нового ядра, для них (хотя бы частично) поддерживается технология «наслоения» микроопераций[Это когда несколько микроопераций запускаются на конвейере в виде одной «связки», проходящей по нему в виде единой конструкции и «разбивающейся» по исполнительным устройствам лишь в самый последний момент. Такой подход экономит ресурсы конвейера, повышает его производительность и бережет электроэнергию; в конкурирующем AMD K7/K8 он является неотъемлемой частью архитектуры] и, наконец, поддерживается SSE3. Заодно Intel внесла какие-то (неразглашаемые) улучшения в обычный блок вычислений с плавающей точкой, являющийся одним из наиболее уязвимых мест ядра Dothan. На очередные 25%, с 533 до 667 МГц, увеличили тактовую частоту системной шины, снабжающей процессор данными из оперативной памяти. Новый технологический процесс 65-нм, о котором я подробно рассказывал в предыдущем номере «Компьютерры», тоже сыграл инженерам на руку, позволив впихнуть в процессор второе ядро без заметного увеличения площади и себестоимости кристалла, а заодно улучшить его частотные показатели и снизить тепловыделение. Как обычно, модернизировали и энергосберегающие технологии. В принципе Yonah был бы уже интересен, даже если б этим дело и ограничилось — однако Intel не стала мелочиться, и «последний» процессор получил качественную и сложную в реализации поддержку двухъядерности.
Как я писал в статьях по «теории двухъядерности», сами по себе двухъядерные процессоры ничего, кроме двух процессорных ядер в одной упаковке, собой не представляют. Интересно то, как эти ядра, оказавшиеся в одной упряжке, взаимодействуют друг с другом и с чипсетом и к каким эффектам это приводит. Ну так вот: два ядра Yonah объединяются «самым прогрессивным» из известных способом — посредством общего L2-кэша.
Что это вообще такое? Все процессоры так называемой гарвардской архитектуры используют в работе каждого ядра два специальных кэша, один из которых содержит выполняющуюся программу (L1 instructions), а второй — необходимые для работы данные (L1 data). Это непосредственное «рабочее место» ядра, и если ему потребуется обработать какие-нибудь данные не из L1-кэша или фрагмент программы, которого в этом кэше нет, то оно вначале скопирует эти данные к себе в кэш и лишь затем сможет с ними что-либо делать. Быстродействие от подобного кэша требуется соответствующее, так что L1-I и L1-D в рамках этой архитектуры для каждого ядра сугубо индивидуальны, без них ничего работать не будет, и очень маловероятно, что это положение изменится впредь. А вот уже следующий уровень взаимодействия процессора с системой — общий кэш второго уровня (L2) — является более чем обычным и никаких специальных функций на себе не несет, работая банальным «ускорителем» доступа процессора в оперативную память. Во всех известных решениях до выхода Yonah, этот кэш в двухъядерных процессорах был, как и L1, индивидуален для каждого ядра; и взаимодействие между двумя ядрами происходило либо на уровне чипсета и оперативной памяти (Intel), либо на уровне специального межъядерного интерфейса, соединяющего кэши L2 напрямую (AMD). Для Yonah же никакого специального «межъядерного» взаимодействия решили не изобретать, сделав кэш второго уровня частью общей подсистемы памяти и подключив оба процессорных ядра к одному и тому же L2.