Недостатки в общей памяти массивных многопоточных конструкций - PullRequest
3 голосов
/ 15 июня 2011

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

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

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

1 Ответ

2 голосов
/ 16 июня 2011

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

http://msdn.microsoft.com/en-us/magazine/cc163715.aspx#S2 дает хорошее объяснение, почему доступ к общим данным из нескольких потоков может быть медленным и что с этим можно сделать.

...