MPI + GPU: как смешать две техники
Моя программа хорошо подходит для MPI. Каждый ЦП выполняет свою особую (сложную) работу, производит одинdouble
, а затем я используюMPI_Reduce
умножить результат от каждого процессора.
Но я повторяю это много-много раз (& gt; 100 000). Таким образом, мне пришло в голову, что GPU значительно ускорит процесс.
У меня есть Google вокруг, но я не могу найти что-то конкретное. Как вы смешиваете MPI с графическими процессорами? Есть ли способ для программы запрашивать и проверять"oh, this rank is the GPU, all other are CPUs" ? Есть ли рекомендуемый учебник или что-то?
Важно отметить, что я не хочу или не нуждаюсь в полном наборе графических процессоров. Мне действительно нужно много процессоров, а затем один графический процессор, чтобы ускорить часто используемыеMPI_Reduce
операция.
Вот схематический пример того, о чем я говорю:
Предположим, у меня 500 процессоров. Каждый процессор как-то производит, скажем, 50double
s. Мне нужно умножить все 250,00 из нихdouble
вместе. Затем я повторяю это от 10000 до 1 миллиона раз. Если бы я мог иметь один графический процессор (в дополнение к 500 процессорам), это было бы действительно эффективно. Каждый процессор будет вычислять свои 50double
s для всех ~ 1 миллиона "состояний". Затем все 500 процессоров отправят своиdouble
с ГПУ. Графический процессор умножит 250 000double
вместе для каждого из 1 миллиона «штатов», производящих 1 миллионdoubles
.
Эти цифры не являются точными. Вычисление действительно очень большое. Я просто пытаюсь донести общую проблему.