Ожидаете ли вы, что будущие поколения процессоров не связаны с кэшем?

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

Это не проблема для современных процессоров Intel. Но я хочу, чтобы эта программа приносила доход как минимум в течение следующих десяти лет (непродолжительное время для программного обеспечения), поэтому мне интересно, если вы считаете, что это может стать проблемой для будущих архитектур ЦП.

6 ответов

Решение

Я подозреваю, что будущие поколения процессоров по-прежнему будут поддерживать когерентность кэша для вас. Без этого большинство основных методологий программирования потерпит неудачу. Я сомневаюсь, что любая архитектура процессора, которая будет широко использоваться в течение следующих десяти лет, лишит законной силы текущую модель программирования - она ​​может расширить ее, но трудно отбросить что-то столь широко распространенное.

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

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

X86 не использует многие из этих методов, но использует некоторые. Пока память остается значительно медленнее, чем процессор, ожидайте увидеть больше этих и других техник, которые еще предстоит использовать. Даже Itanium, несмотря на неудачу, использует многие из этих идей, поэтому ожидайте, что Intel перенесет их в x86 со временем.

Что касается избежания блокировок и т. Д.: Всегда сложно контролировать уровень знаний людей через Интернет, поэтому либо вы ошибаетесь в том, что, по вашему мнению, может работать, либо находитесь на переднем крае программирования без блокировок. Трудно сказать.

Вы понимаете протокол MESI, барьеры памяти и видимость? Вы читали материал от Пола МакКенни и т. Д.?

Я не знаю как таковой. Но я бы хотел увидеть тенденцию к некогерентным когерентным режимам.

Концептуальный сдвиг ума является значительным (нельзя просто передавать данные в вызове метода, нужно передавать их через очередь в асинхронный метод), но это необходимо, так как мы все больше и больше перемещаемся в многоядерный мир. Чем ближе мы к одному процессору на банк памяти, тем лучше. Потому что тогда мы работаем в мире сетевой маршрутизации сообщений, где данные просто недоступны, а не потоки, которые могут молча топтать данные.

Однако, как отмечает Рид Копси, весь мир вычислительной техники x86 построен на предположении когерентности кэша (что даже больше, чем доля Microsoft на рынке!). Так что это не уйдет в ближайшее время!

Вот статья известных авторов в области компьютерной архитектуры, в которой утверждается, что когерентность кэша сохранится.

http://acg.cis.upenn.edu/papers/cacm12_why_coherence.pdf

"Почему согласованность кэширования на чипе здесь, чтобы остаться" - Мартин, Хилл и Сорин

Вы делаете странный запрос. Вы запрашиваете наши предположения (сообщества SO) о будущих архитектурах ЦП - очень опасное предложение. Готовы ли вы положить свои деньги туда, где у нас рот? Потому что, если мы ошибаемся, и ваше заявление не получится, вы не заработаете денег.

В любом случае, я подозреваю, что ситуация не изменится кардинально из-за всего унаследованного кода, который был написан для однопоточного исполнения, но это только мое мнение.

Вопрос мне кажется вводящим в заблуждение. Архитектура процессора не так важна, важна модель памяти платформы, на которой вы работаете.

Вы разрабатываете приложение в некоторой среде с определенной моделью памяти. Например, если вы в настоящее время ориентируетесь на x86, вы можете быть уверены, что любая будущая платформа будет реализовывать ту же модель памяти, когда она выполняет код x86. То же самое верно для виртуальных машин Java или.NET и других платформ исполнения.

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

Другие вопросы по тегам