LINUX.ORG.RU

История изменений

Исправление Pravorskyi, (текущая версия) :

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

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

Начни с простого. Один поток ожидает данные и складирует их в твоё хранилище.

Если у тебя куча мелких объектов, то постоянные new/delete, malloc/free в C/C++ вскоре могут сильно фрагментировать память. Тем не менее, написать свой аллокатор ты всегда успеешь.

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

Далее делаешь N-воркеров, которые будут забирать данные, делать вычисления, и куда-то сохранять результат.

Узких мест у тебя может быть куча — I/O, мьютексы, кэш процессора, алгоритм, сетевая часть. Возможно, в твоём случае пригодится OpenCL, расширения процессора. Но пока информации слишком мало.

Так что пиши, замеряй, расширяй.

Ну и ещё базз-вордов: неблокирующие структуры, ØMQ, OpenMP, распределённые вычисления.

P.S. Инструменты? C++ и компилятор GCC.

Исходная версия Pravorskyi, :

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

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

Начни с простого. Один поток ожидает данные и складирует их в твоё хранилище.

Если у тебя куча мелких объектов, то постоянные new/delete, malloc/free в C/C++ вскоре могут сильно фрагментировать память. Тем не менее, написать свой аллокатор ты всегда успеешь.

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

Далее делаешь N-воркеров, которые будут забирать данные, делать вычисления, и куда-то сохранять результат.

Узких мест у тебя может быть куча — I/O, мьютексы, кэш процессора, алгоритм, сетевая часть. Возможно, в твоём случае пригодится OpenCL, расширения процессора. Но пока информации слишком мало.

Так что пиши, замеряй, расширяй.

Ну и ещё базз-вордов: неблокирующие структуры, ØMQ, OpenMP, распределённые вычисления.