Intel только что представил новые 48 ядер процессора. Что это переместит во многие ядра, подразумевают для нас программистов? [закрытый]

Я обычно включаю "фантомные данные" игровой сессии с highscore записью. Таким образом, если я делаю мчащуюся игру, я включаю данные воспроизведения. У Вас часто есть данные воспроизведения уже для функциональности воспроизведения или фантома, мчащегося функциональность (играющий против Вашей последней гонки или играющий против фантома чувака № 14 в списке лидеров).

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

, Если цель состоит в том, чтобы сохранить список highscores онлайн недо конца времени ни с кем имеющим необходимость смотреть на них, это не принесет Вам очень.

7
задан 2 revs, 2 users 82% 25 May 2014 в 21:32
поделиться

8 ответов

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

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

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

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

Кроме того, виртуализация станет скорее торговым инструментом, интегрированным в компилятор. Код, написанный изначально для разных платформ, сможет взаимодействовать из одного программного модуля, поскольку разные биты будут работать на разных процессорах, а коммуникационная архитектура будет легко их интегрировать. Различные части одного и того же приложения будут написаны на разных языках программирования, так как они будут компилироваться отдельно и развертываться как службы.

8
ответ дан 6 December 2019 в 08:15
поделиться

Это означает, что мы все должны изучать Erlang или какой-либо другой функциональный язык, предназначенный для параллелизма.

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

5
ответ дан 6 December 2019 в 08:15
поделиться

Первая версия добавит новый KeyValuePair в словарь, выбрасывая, если ключ уже есть в словаре. Второй, используя индексатор, добавит новую пару, если ключ не существует,

2
ответ дан 6 December 2019 в 08:15
поделиться

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

1
ответ дан 6 December 2019 в 08:15
поделиться

Идеальной ситуацией было бы, чтобы это вообще ничего не значило для 90% программистов.

Как и почти все, у нас должна быть парадигма программирования, поддерживаемая одним или несколькими языки программирования, которые скрывают сложности многозадачности от обычного программиста. Довольно сложно что-либо запрограммировать с помощью потоков, особенно если вам нужно использовать 20-30, чтобы программа действительно использовала ЦП.

Есть несколько предложений, таких как Parallels Extensions, Microsoft Axum или Erlang для начала, особенно Erlang, имеет долгую историю успехов на протяжении многих лет.

2
ответ дан 6 December 2019 в 08:15
поделиться

Нам нужно будет выполнить множество небольших задач, которые решают небольшие проблемы, но связаны друг с другом. Звучит очень по-unix-ish

Большой монолитный последовательный код станет все более и более презираемым.

0
ответ дан 6 December 2019 в 08:15
поделиться

«Обнародован», что означает «продемонстрировал прототип»: в пресс-релизе говорится, что Intel получит до 6- и 8-ядерных процессоров в 2010 году. 48-ядерные чипы не будут запущены в производство в течение многих лет, если вообще.

В любом случае, я слышал это "о, никаких десятков ядер" в течение многих лет. Как отрасль, у нас достаточно проблем с правильной работой однопоточного последовательного кода. Когда Firefox дает сбой или IE не может правильно отобразить, вы понимаете, что добавление дополнительных ядер в ситуацию не поможет. На работе у меня есть 4-ядерный бокс, и в нем уже больше ядер, чем может использовать любое мое программное обеспечение. Если вы не геймер или не занимаетесь высокопроизводительными вычислениями или облачным хостингом, вы, вероятно, не ограничены процессором большую часть времени, если вообще.

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

Это пресс-релиз об экспериментальной конструкции. Это похоже на то, как Ferrari хвастается новым 10-литровым 18-цилиндровым двигателем: это звучит круто, и он мог бы продать больше уличных Ferrari, но 99,999% из нас на самом деле не будут беспокоиться о движении со скоростью 130 миль в час.

0
ответ дан 6 December 2019 в 08:15
поделиться

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

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

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

Но, я думаю, многие базовые системы не подходят для использования на настольных компьютерах. Когда приложения будут оптимизированы для этого, появится новый вид лагов, что в сумме может вызвать заметные задержки пользовательского интерфейса в приложениях. Для пользователя это может казаться менее отзывчивым, что, в свою очередь, будет восприниматься как «медленное»! Причиной этого будет гораздо больше работы по планированию, когда разработчики разделят рабочую нагрузку на более мелкие пакеты и поставят их в очередь в рабочие очереди и отправят сигналы, чтобы начать их обработку и т. Д.

Это ИМХО применимо даже к коду, основанному на передаче сообщений (erlang & co.) - хотя там задержки будут короче, чем в коде на основе блокировок и сигналов, но они также суммируются.

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

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

Это IMHO даже применимо к коду, основанному на передаче сообщений (erlang & co.) - хотя там задержки будут короче, чем в коде на основе блокировок и сигналов, но они также суммируются.

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

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

Это ИМХО применимо даже к коду, основанному на передаче сообщений (erlang & co.) - хотя там задержки будут короче, чем в коде на основе блокировок и сигналов, но они также суммируются.

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

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

Это IMHO даже применимо к коду, основанному на передаче сообщений (erlang & co.) - хотя там задержки будут короче, чем в коде на основе блокировок и сигналов, но они также суммируются.

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

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

Это IMHO даже применимо к коду, основанному на передаче сообщений (erlang & co.) - хотя там задержки будут короче, чем в коде на основе блокировок и сигналов, но они также суммируются.

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

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

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

1
ответ дан 6 December 2019 в 08:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: