Имеет ли смысл запускать вычисления на уровне ядра ОС на GPU? - PullRequest
10 голосов
/ 09 марта 2011

Я заметил, что GPU может иметь сотни ядер, так что параллельные вычисления могут быть значительно ускорены. Похоже, что в ядре ОС параллельные алгоритмы не используются для ускорения.

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

Так почему ОС не используют графические процессоры для повышения производительности и пропускной способности? Имеет ли смысл запускать вычисления ОС на графическом процессоре?

Ответы [ 4 ]

21 голосов
/ 09 марта 2011

Приложения параллельной обработки на GPU требуют от вас выполнения 10000 * точно такой же операции сотни раз. Более того, вы ограничены в том, какие операции вы можете выполнять - ветки, как правило, не являются опцией и не проходят цепочки указателей.

Большинство операций ядра не вписываются в эту модель; большая часть того, что делает ядро ​​- это управление ресурсами с помощью указателей, включая блокировку. Это совсем не вписывается в модель GPU. Что касается других операций, которые вы цитируете:

  • Криптография: графические процессоры отлично подходят для попытки взломать криптографических шифров, но это не работа ядра. Обычно он выполняет криптографическую операцию один раз . В этом случае процессор намного быстрее, так как он должен сделать это только один раз.
  • Обработка сетевого трафика: пакеты приходят в разное время и должны обрабатываться с низкой задержкой. Графический процессор может быть в состоянии выполнять обработку межсетевого экрана без сохранения состояния, но вам нужно будет пакетировать пакеты и работать на нескольких сотнях за раз, чтобы иметь преимущество - это вредит задержке и дрожанию, и поэтому работа остается за процессором. Кроме того, для отслеживания состояния требуется общий заблокированный доступ к таблицам отслеживания подключений, чего не позволяет графический процессор.
  • Управление памятью: это сложная операция с большим количеством блокировок, поэтому GPU даже для удаленно не подходит. Более того, задержка имеет решающее значение, и отправка задания на графический процессор подразумевает большую задержку.
  • Поиск: современные ядра ОС не выполняют поиск. Это работа для пространства пользователя - и опять же, это очень тяжелая работа.

Графические процессоры хорошо подходят для математических ядер, где пропускная способность имеет первостепенное значение, а задержка является второстепенной проблемой - численное моделирование и тому подобное. Они, как правило, не очень подходят для управления данными, или там, где латентность имеет решающее значение - это именно то, что делают ядра ОС. Вот почему операционные системы обычно не используют ускорение графического процессора.

Существуют и другие типы аппаратного ускорения, которые ядра ОС могут использовать и используют - на некоторых машинах есть специальные криптографические аппаратные ядра, специально предназначенные для быстрого выполнения одноразовых криптографических вычислений. Они могут быть эффективно использованы ядром, поскольку они лучше подходят для конкретных проблем, с которыми сталкивается ядро.

4 голосов
/ 09 марта 2011

Ваше впечатление, что ядра не распараллеливаются, неверно. Современные ядра достаточно хорошо адаптировались к многоядерным / многопоточным процессорам и в этом отношении справляются практически со всем "параллельным" способом.

Что касается графических процессоров, они сильно отличаются с точки зрения инструкций, которые они могут обрабатывать от процессоров. Более приспособлен для векторных вычислений с плавающей запятой, в частности. Ядро Linux практически никогда не использует такую ​​операцию. Исключение составляют криптография и некоторый рейд-код, который может быть хорошо адаптирован к операциям векторного типа (и, возможно, другим, но все еще очень ограниченным).

Таким образом, в общем случае само ядро ​​на самом деле не нуждается в том типе операций, которые обеспечивают графические процессоры. В те времена, когда это необходимо, вы обнаружите, что современные ядра ЦП включают в себя специальные наборы команд (например, SSE, AES-NI и т. Д.) Или выделенные сопроцессоры / механизмы разгрузки (опять же для крипто-и рейд-кальков, проверки сетевых пакетов и т.д. ...).

0 голосов
/ 17 марта 2015

Современные графические процессоры могут использоваться не только для обработки графики;они также могут запускать программы общего назначения.Хотя они не очень подходят для всех типов программ, они превосходят код, который может использовать их высокую степень параллелизма.Большинство применений так называемых вычислений «GPU общего назначения» (GPGPU) выходят за рамки системного программного обеспечения.Однако недавняя работа над программными маршрутизаторами и зашифрованными сетевыми подключениями дала примеры того, как GPGPU могут применяться к задачам, более традиционно выполняемым в рамках операционных систем.Эти применения только царапают поверхность.Другие примеры задач системного уровня, которые могут использовать преимущества графических процессоров, включают общую криптографию, сопоставление с образцом, программный анализ и ускорение основных часто используемых алгоритмов.

Цитируется по https://code.google.com/p/kgpu/

0 голосов
/ 28 марта 2014

Да, я согласен с Матем.Узким местом современного вычислительного мира является операционная система, работающая в виртуальных потоках.Это создает спрос в пользовательском пространстве для создания приложений, использующих графический процессор.Тем не менее, ядро ​​все еще работает ОС последовательно.Например, операция поиска интегрирована как функция ОС, которая проверяет таблицу файловой системы последовательно или путем индексации, а затем выполняет поиск с использованием алгоритмов двоичного поиска.Обе операции занимают много времени.Почему бы не отправить частичную таблицу файловой системы графическим процессорам и разветвить операцию поиска.На уровне обработки большинство операций ОС - не что иное, как арифметические и логические вычисления, и все же эти операции ждут ЦП.Проблема, связанная с этим, заключается в задержке, связанной с отправкой и получением операции / памяти из CPU в GPU и обратно в CPU.Много исследований необходимо, чтобы уменьшить эту задержку.Но проблема на самом деле здесь не в аппаратной задержке (между процессором и графическим процессором), а в том, чтобы оценить эту задержку ОС.ОС должна оценить задержку и решить, является ли обработка в ЦП лучше или лучше в GPU.Это опять-таки зависит от аппаратной платформы.Эти проблемы могут быть решены и исследованы.Просто нужны огромные инвестиции для исследований ОС компаний.

...