Читаем Журнал «Компьютерра» N 37 от 10 октября 2006 года полностью

Если клэйтроника на Форуме все-таки проходила под грифом экзотической диковинки, то о терапроцессорах, позволяющих на старой технологии за счет радикально новых идей получить на один-два порядка большую производительность, нежели у традиционных «многоядерников», говорили более чем серьезно - эта тема составляла содержание не только презентаций, но и технических сессий для профессионалов. Впрочем, главная идея здесь тоже далеко не нова и даже вполне процветает в коммерчески выпускаемом «железе», начиная с Cell и заканчивая специализированными сопроцессорами от ClearSpeed. Ее суть в том, чтобы заменить одно сложное ядро (на котором вычислительные блоки нередко занимают менее 10% площади кристалла, а остальное уходит на то, чтобы вовремя подготовить для этих 10% данные и инструкции) набором из, скажем, пяти более простых, в каждом из которых вычислительные блоки займут половину площади ядра. Естественно, загрузка этих блоков из-за простоты обслуживающей их электроники будет невысока, а потому их быстродействие - заметно ниже, но потенциальный выигрыш за счет пятикратного увеличения числа вычислительных ресурсов перекроет все. Побочные эффекты - увеличение тактовой частоты (за счет упрощения) и снижение тепловыделения (за счет него же) - тоже играют на руку подобному подходу. И все было бы замечательно… если б не необходимость заставлять работать эти десятки процессорных ядер «в одной упряжке». Даже оставляя в стороне вопросы программирования параллельного ПО для десятков специализированных ядер, необходимо с достаточной скоростью читать и записывать обрабатываемую ими информацию и передавать ее на другие устройства - в противном случае наш терапроцессор будет большую часть времени ожидать новую порцию данных, и все его быстродействие сойдет на нет.


То, что предлагает Intel, как ни крути, сильно напоминает Cell, только с гораздо большим количеством ядер: если в детище IBM и Sony их всего девять, то в экспериментальном кристалле Intel - добрых восемьдесят (матрица 8x10). И там и там ядра максимально упрощены и функционируют на частоте 3-4 ГГц; и там и там, чтобы снять проблему недостаточной пропускной способности, каждому ядру выделяется кусочек локальной памяти, с которым оно может работать без оглядки на всех остальных; и там и там используется сложнейшая система связи, связывающая отдельные ядра в многомерную сетку, в которой передаются данные. Разница только в реализации: если IBM и Sony используют сравнительно традиционные технологии, то Intel - принципиально новые. Например, в Cell локальная память реализована как упрощенный аналог кэш-памяти первого уровня и является частью кристалла процессора. В терапроцессоре же используется технология трехмерной упаковки оперативной памяти - на подложке строится «сэндвич» из кристаллов оперативной памяти и лежащего над ними кристалла процессора, что позволяет разместить на той же площади куда больше и ядер, и подключенной к ним памяти. В ядрах Cell нет кэш-памяти и тем более - когерентной (хранящей общие для всех ядер данные), в терапроцессоре - есть. В качестве внешнего интерфейса для Cell используется «электронная» технология, для терапроцессора планируется оптический канал на порядок большей пропускной способности и т. д.

Впрочем, хватает и уникальных наработок - например, в терапроцессоре планируется использовать так называемую транзакционную оперативную память, позволяющую объединить несколько операций чтения-записи в одну транзакцию, для которой гарантируется защита от одновременного чтения-записи со стороны других ядер. Например, если у нас есть счетчик - ячейка памяти, к которой обращаются все ядра, каждый раз увеличивая его на единичку, то в «классическом» варианте, когда контроллер памяти просто обслуживает запросы на чтение и на запись от всех ядер, легко может возникнуть следующая ситуация: скажем, первое ядро прочитало текущее значение счетчика, но не успело записать новое, тогда как счетчик - с уже устаревшим значением - читает второе ядро. Если, например, в счетчике было записано число 11, то и первое, и второе ядро в этом случае прочитают «11», вычислят 11+1 = 12 и два раза подряд (сперва одно, потом второе) запишут в счетчик это значение вместо правильного - 11+1+1 = 13. Когда же чтение и запись представляют собой одну транзакцию, такой проблемы не возникает - пока первое ядро не запишет в счетчик 12, второе не сможет прочитать его значения. Механизм еще требует доработки и уточнения, но уже понятно, что этот способ намного быстрее, чем сегодняшняя практика «защиты» счетчика, сводящаяся к тому, что, прочитав счетчик, процессорное ядро ставит «блокировку», запрещающую остальным процессорам что-либо читать или писать из памяти, пока туда не будет записан результат вычислений.

Перейти на страницу:
Нет соединения с сервером, попробуйте зайти чуть позже