Параллельный GNU и графический процессор? - PullRequest
0 голосов
/ 04 марта 2019

Я заинтересован в том, чтобы GNU Parallel запускал некоторые вычислительные задачи на GPU.Вообще говоря, вот мой первоначальный подход:

  1. Напишите задачи для использования OpenCL или какой-либо другой библиотеки взаимодействия с GPU
  2. Вызовите GNU параллельно в списке задач ( Янеуверен в необходимости этого шага )

В связи с этим возникли следующие вопросы:

  1. Преимущество моего подхода / варианта использования от использования GNU Parallel(то есть, я должен даже использовать это здесь)?
  2. Предлагает ли GNU Parallel встроенный механизм для параллельного выполнения задач на GPU?
  3. Если так, как я могу настроить GNU Parallel для этого?

1 Ответ

0 голосов
/ 04 марта 2019

Современные процессоры имеют несколько ядер, это означает, что они могут выполнять разные инструкции одновременно;поэтому, когда ядро ​​1 работает, MUL, ядро ​​2 может работать ADD.Это также называется MIMD - несколько инструкций, несколько данных.

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

Современные графические процессоры имеют несколько ядер, каждое из которых имеет SIMD.

Так, где GNU Parallel вписывается в этот микс?

GNU Parallel запускает программы,Если ваша программа использует графический процессор и у вас в системе есть одно ядро, графический процессор не будет иметь особого смысла.Но если в вашей системе, скажем, 4 ядра GPU, то имеет смысл поддерживать эти 4 ядра одновременно.Поэтому, если ваша программа читает переменную CUDA_ VISIBLE_ DEVICES, чтобы решить, на каком ядре GPU работать, вы можете сделать что-то вроде этого:

seq 10000 | parallel -j4 CUDA_​VISIBLE_​DEVICES='$(({%} - 1))' compute {}
...