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