Графические процессоры не имеют доступа к любому оборудованию, подключенному к хосту.
Типичное исполнение для программ на GPU:
- данные, передаваемые из памяти хоста в память устройства GPU
- GPU устройство выполняет некоторую обработку
- данные передаются обратно из памяти устройства GPU в память хоста
и затем хост делает что-то полезное с данными, например отображает их пользователю или сохраняет в файл.
Передача памяти не является бесплатной, поэтому, как правило, вам нужно накопить достаточно данных и затем отправить их на устройство с графическим процессором, чтобы сделать их полезными.
Что еще нужно учитывать, так это то, что устройства с графическим процессором являются параллельными данными (в отличие от параллельных задач). В отличие от процессоров, которые могут параллельно выполнять разный код, графические процессоры параллельно выполняют один и тот же код для разных данных. Это делает их плохими в таких вещах, как веб-сервер, но отлично подходит для определенных научных и математических задач, где проблему можно распараллелить.
Если вам требуется обработка сетевых пакетов с малой задержкой, графические процессоры вряд ли подойдут. Вам необходимо:
- получить сетевой пакет
- отправить его в GPU (некоторое время ожидания)
- процесс на GPU
- отправить обратно на хост (больше задержки)
Единственный способ для графических процессоров быть осуществимым, если:
- анализ одного пакета может быть распараллелен на множество меньших кусков
- Вы готовы подождать, пока придет много сетевых пакетов, и проанализировать сразу много