мульти-ЦП, многоядерный и гиперпоток

let object1 = [{ "number": 1111, "test": 0, "low": 2131 }, { "number": 1234, "test": 0, "low": 2684 }, { "number": 4214, "test": 0, "low": 6345 }];
let object2 = [{ "number": 1234, "test": 0, "low": 2684 }];

// use unique key to findIndex, am using number key here replace this in your case.
object1 = object1.filter(obj => {
    return object2.findIndex(obj1 => {
        return obj.number === obj1.number;
    }) === -1;
});
77
задан Warren Dew 4 June 2014 в 00:23
поделиться

3 ответа

Мульти-ЦП был первой версией: у Вас было бы одна или несколько системных плат с одними или несколькими микросхемами ЦП на них. Основная проблема здесь состояла в том, что центральные процессоры должны будут выставить некоторые свои внутренние данные к другому ЦП, таким образом, они не стояли бы на пути.

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

Текущая разработка является многоядерной. Это - в основном исходная идея (несколько полных центральных процессоров), но в однокристальной схеме. Преимущество: Разработчики чипов могут легко поместить дополнительные провода для синхросигналов в микросхему (вместо того, чтобы иметь необходимость направить их на контакте, затем по переполненной системной плате и во вторую микросхему).

Супер компьютеры сегодня являются мульти-CPU, многоядерным: у Них есть много системных плат с обычно 2-4 центральными процессорами на них, каждый ЦП является многоядерным, и у каждого есть его собственная RAM.

[РЕДАКТИРОВАНИЕ] Вы получили это в значительной степени правильное. Всего несколько деталей:

  • Гиперпоточность отслеживает два контекста сразу в одноядерном, выставляя больше параллелизма неисправному ядру процессора. Это сохраняет модули выполнения питаемыми работой, даже когда один поток останавливается на неудачном обращении в кэш, ответвлении mispredict, или ожидающий результатов инструкций высокой задержки. Это - способ получить больше общей пропускной способности, не копируя много аппаратных средств, но если что-нибудь это замедляет каждый поток индивидуально. Дополнительную информацию см. в этом Вопросы и ответы и объяснение того, что было неправильным с предыдущей формулировкой этого абзаца.

  • Основная проблема с мульти-ЦП состоит в том, которые кодируют работу их, в конечном счете получит доступ к RAM. Существуют центральные процессоры N, но только одна шина для доступа к RAM. Таким образом, у Вас должны быть некоторые аппаратные средства, которые удостоверяются что a) каждый ЦП получает изрядное количество доступа RAM, b) это получает доступ к той же части RAM, не вызывают проблемы и c) самое главное тот ЦП 2 будет уведомлен, когда ЦП 1 запись к некоторому адресу памяти, который ЦП 2 имеет в его внутреннем кэше. Если этого не произойдет, то ЦП 2 будет счастливо использовать кэшируемое значение, не обращающее внимания на то, что это устарело

    Просто предположите, что у Вас есть задачи в списке, и Вы хотите распространить их ко всем доступным центральным процессорам. Таким образом, ЦП 1 выберет первый элемент из списка и обновит указатели. ЦП 2 сделает то же. По причинам эффективности оба центральных процессора не только скопируют несколько байтов в кэш, но целую "строку кэша" (независимо от того, что это может быть). Предположение - то, что при чтении байта X Вы скоро считаете X+1, также.

    Теперь оба центральных процессора имеют копию памяти в их кэше. ЦП 1 затем выберет следующий объект из списка. Без синхронизации кэша это не будет замечать, что ЦП 2 изменил список также, и это начнет работать над тем же объектом как ЦП 2.

    Это - то, что эффективно делает мульти-ЦП так сложным. Побочные эффекты этого могут привести к производительности, которая хуже, чем, что Вы получили бы, если бы целый код работал только на единственном ЦП. Решение было многоядерным: можно легко добавить столько проводов, сколько необходимо синхронизировать кэши; Вы могли даже скопировать данные от одного кэша до другого (обновление частей строки кэша, не имея необходимость сбрасывать и перезагружать его) и т.д. Или логика кэша могла удостовериться, что все центральные процессоры получают ту же строку кэша, когда они получают доступ к той же части реальной RAM, просто блокируя ЦП 2 в течение нескольких наносекунд, пока ЦП 1 не внес свои изменения.

[EDIT2], которым главная причина, почему многоядерный более просто, чем мульти-CPU, состоит в том, что на системной плате, Вы просто не можете выполнить все провода между двумя микросхемами, которые необходимо было бы сделать синхронизацию эффективной. Плюс сигнал только перемещается 30cm/ns вершины (скорость света; в проводе Вы обычно имеете намного меньше). И не забывайте, что на многослойной системной плате сигналы начинают влиять друг на друга (перекрестные помехи). Нам нравится думать, что 0 0V, и 1 5 В, но в действительности, "0" что-то между-0.5V (перегрузка при написании от 1-> 0), и.5V и "1" является чем-либо выше 0.8 В.

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

83
ответ дан Community 24 November 2019 в 11:01
поделиться

Можно найти некоторые интересные статьи о двойном ЦП, многоядерном и гиперпоточность на веб-сайте Intel или в короткой статье из Йельского университета.

Я надеюсь, что Вы находите здесь всю информацию, в которой Вы нуждаетесь.

4
ответ дан Bogdan Constantinescu 24 November 2019 в 11:01
поделиться

Вкратце: мульти-ЦП или многопроцессорная система имеют несколько процессоров. Многоядерная система является многопроцессорной системой с несколькими процессорами на том же, умирают. В гиперпоточности несколько потоков могут работать на том же процессоре (который является временем контекстного переключения между этими несколькими потоками, является очень маленьким).

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

Статьи Википедии об этих темах довольно иллюстративны.

2
ответ дан amit 24 November 2019 в 11:01
поделиться
Другие вопросы по тегам:

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