следует использовать GPU? - PullRequest
       5

следует использовать GPU?

1 голос
/ 13 апреля 2011

как узнать, будет ли мой последовательный код работать быстрее, если я использую графический процессор?я знаю, что это зависит от многих вещей ... то есть, если код может быть парализован с помощью SMID и все эти вещи ... но какие соображения я должен принять во внимание, чтобы быть "уверенным", что я получу скорость?должен ли алгоритм быть смущающе параллельным?поэтому я не буду пытаться попробовать GPU, если части алгоритма не могут быть распараллелены?я должен принять во внимание, сколько памяти требуется для ввода образца?

Каковы "спецификации" последовательного кода, которые заставили бы его работать быстрее на GPU?может сложный алгоритм набрать скорость на GPU?я не хочу тратить время и пытаться кодировать свой алгоритм на графическом процессоре, и я на 100% уверен, что скорость будет увеличена .... это моя проблема ....

я думаю, что мой алгоритмможно распараллелить на GPU ... стоило бы попробовать?

Ответы [ 3 ]

2 голосов
/ 13 апреля 2011

Это зависит от двух факторов:

1) Ускорение работы множества ядер, выполняющих операции с плавающей запятой

Это зависит от присущего распараллеливания выполняемых вами операций, числаядер на вашем графическом процессоре и различия в тактовых частотах между вашим процессором и графическим процессором.

2) Затраты на передачу данных назад и вперед между основной памятью и памятью графического процессора.

Этов основном зависит от «пропускной способности памяти» вашего конкретного графического процессора и значительно уменьшается из-за архитектуры Sandy Bridge, в которой процессор и графический процессор находятся на одном кристалле.В более старых архитектурах некоторые операции, такие как матричное умножение, когда внутренние размеры невелики, не улучшаются.Это связано с тем, что для передачи внутренних векторов назад и вперед по системной шине требуется больше времени, чем для расстановки векторов на центральном процессоре.

К сожалению, эти два фактора трудно оценить, и нет способа«знать», не пытаясь это.Если вы в настоящее время используете BLAS для своих операций SIMD, заменить CUBLAS на тот же API-интерфейс достаточно просто, за исключением того, что он передает операции в графический процессор для выполнения.

1 голос
/ 18 апреля 2011

При поиске параллельного решения обычно задайте себе вопросы

  1. Количество данных у вас есть.
  2. Количество вычислений с плавающей запятой, которое у вас есть.
  3. Насколько сложен ваш алгоритм, то есть условия и ветви в алгоритме. Есть ли локализация данных?
  4. какое ускорение требуется?
  5. Это вычисления в реальном времени или нет?
  6. Существуют ли альтернативные алгоритмы (но, может быть, они не самый эффективный последовательный алгоритм)?
  7. К какому типу sw / hw у вас есть доступ.

В зависимости от ответов, которые вы ищете, вы можете использовать GPGPU, кластерные вычисления или распределенные вычисления или комбинацию GPU и кластерных / распределенных машин.

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

0 голосов
/ 13 апреля 2011

Обычный код C может быть преобразован в CUDA очень легко. Если сильные нападающие в профиле вашего алгоритма могут быть распараллелены, попробуйте и посмотрите, поможет ли это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...