Я использую c/С++/cuda менее недели и не знаком со всеми вариантами, доступными с точки зрения библиотек (извините, если мой вопрос слишком дурацкий или невозможный). Здесь моя проблема, у меня есть процесс, который принимает данные и анализирует его, затем делает 1 из 3 вещей, (1) сохраняет результаты, (2) отбрасывает результаты или (3) прерывает данные и отправляет их обратно для обработки.
Часто параметр (3) создает много данных, и я очень быстро превосхожу доступную мне память (мой сервер - 16 гигабайт), поэтому способ, которым я обходился, состоял в том, чтобы настроить сервер очереди (rabbitmq), который я бы послал и получать работу (он меняет местами очередность, когда достигает определенного размера памяти). Это отлично работало, когда я использовал небольшие серверы с более быстрыми nics для передачи данных, но в последнее время я изучал и конвертировал свой код с Java на c/С++ и запускал его на графическом процессоре, что сделало очереди большими узкими местами. Узким местом было, очевидно, сеть io (профилирование на дешевых системах показало высокую загрузку процессора и аналогичные по старым gpu, но новые более быстрые cpus/gpus не используются так сильно, а сетевой IO устойчив при 300-400/mbs). Поэтому я решил попытаться полностью устранить сеть и запустить локальный сервер очереди на сервере, который сделал это быстрее, но я подозреваю, что это может быть еще быстрее, если я использовал решение, которое не полагалось на внешние сетевые службы (даже если я я запускаю их локально). Возможно, это не сработает, но я хочу поэкспериментировать.
Итак, мой вопрос: есть ли что-нибудь, что я могу использовать как очередь, чтобы я мог удалять записи, когда я их читал, а также меняет очередь на диск после достижения определенного размера (но сохраняет очередь в памяти всегда полной так что мне не нужно ждать, чтобы читать с диска)? Когда вы узнаете о Cuda, есть много примеров, когда исследователи проводят анализ на огромных наборах данных, любые идеи о том, как они хранят данные, наиболее быстрыми темпами для обработки системы (я полагаю, они не связаны диском/сетью, иначе быстрее gpu на самом деле не дадут им прирост в производительности)?
Есть ли что-нибудь подобное?
p.s. если это помогает, до сих пор я экспериментировал с rabbitmq (слишком медленным для моей ситуации), apollo mq (хороший, но все же сетевой), reddis (действительно понравилось, но не может превышать физическую память), играя с mmap() ve также сжал мои данные, чтобы получить лучшую пропускную способность. Я знаю общие решения, но мне интересно, есть ли что-то родное для c/С++, cuda или библиотеки, которую я могу использовать (в идеале, у меня будет очередь в глобальной памяти Cuda, которая поменяется на память хоста, замененную на диск, так что GPU всегда будет на полной скорости, но это может быть желаемое за действительное). Если что-нибудь еще, о чем вы можете подумать, сообщите мне, и мне понравится экспериментировать с ним (если это помогает, я разрабатываю Mac и запускаю его на Linux).