GPU по сравнению с производительностью ЦП для [закрытых] общих алгоритмов

Используемый класс здесь неверен. В общем смысле вы должны тестировать базовый класс.

use Illuminate\Support\Collection;

....
if($images instanceof Collection) { 
 ....
}
17
задан Chris 12 September 2009 в 17:35
поделиться

5 ответов

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

3
ответ дан 30 November 2019 в 13:28
поделиться

БУДЬТЕ ОСТОРОЖНЫ, ОЧЕНЬ ОСТОРОЖНЫ с любыми показателями производительности, указанными для GPGPU. Многим людям нравится публиковать действительно впечатляющие цифры, не учитывающие время передачи, необходимое для передачи входных данных из ЦП в графический процессор и обратно, и оба выходят за узкое место PCIe.

5
ответ дан 30 November 2019 в 13:28
поделиться

Изменение размера изображения должно быть распространено на многих веб-сайтах, которые принимают загрузки изображений.

Изменение размера изображения JPEG с разрешением 2600 × x 2000 × 2 МБ (до 512 × 512) заняло 23,5 миллисекунды в C # с параметрами абсолютного минимального качества и выборки ближайшего соседа. Используемая функция была основана на graphics.DrawImage(). Загрузка ЦП также составила 21,5%.

Для извлечения «массива байтового массива rgba» на стороне C # и отправки его в графический процессор, изменения размера в графическом процессоре и возврата результатов в изображение потребовалось 6,3 миллисекунды, а загрузка ЦП составила% 12,7. Это было сделано с помощью более дешевого графического процессора на 55% всего с 320 ядрами.

Только 3.73X множитель ускорения.

Ограничивающим фактором здесь была отправка извлеченных 20 МБ RGB-данных (jpeg только 2 МБ!) В графический процессор. Эта трудоемкая часть составила почти 90% от общего времени, включая извлечение байтового массива на стороне C #! Так что я предполагаю, что по крайней мере примерно в 30 раз будет ускорение, если часть извлечения может быть выполнена и в GPU.

30X - это неплохо.

Затем вы можете передать слой извлечения слоем изменения размера, чтобы скрыть задержку копирования памяти, чтобы получить еще большую скорость! Это может быть 40X-50X.

Затем, повысив качество выборки (например, бикубический вместо ближайшего соседа), вы получите еще большее преимущество в сторону графического процессора. Добавление фильтра Гаусса 5x5 добавило всего 0,77 миллисекунды. Вдобавок к этому CPU получит более высокое время, особенно если необходимые параметры Гаусса отличаются от реализации в C # .Net.


Даже если вы не удовлетворены коэффициентом ускорения, разгрузка на GPU и наличие «свободного ядра» в ЦП все еще выгодны для переноса дополнительной работы на этот сервер.

Теперь добавьте факт энергопотребления графического процессора (30 Вт против 125 Вт в этом примере), это гораздо более выгодно.


Процессор едва ли может выиграть в тестах

 C[i]=A[i]+B[i]

, когда обе стороны работают с оптимизированными кодами, и вы все равно можете разгрузить половину массивов в GPU и одновременно быстрее завершить работу, используя CPU + GPU.


GPU не построен для неоднородных работ. У графических процессоров глубокие трубопроводы, поэтому постоять после остановки из-за разветвления занимает слишком много времени. Кроме того, аппаратное обеспечение типа SIMD вынуждает его выполнять то же самое на всех рабочих элементах. Когда рабочий элемент делает что-то отличное от группы, он теряет отслеживание и добавляет пузырьки во весь конвейер SIMD или просто другие ожидают точки синхронизации. Таким образом, ветвление затрагивает как глубокие, так и широкие области конвейера и делает его даже медленнее, чем ЦП, в совершенно хаотических условиях.

1
ответ дан 30 November 2019 в 13:28
поделиться

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

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

Другой часто цитируемый пример - запуск SETI @ HOMEна графическом процессоре Nvidia , но он сравнивает яблоки с апельсинами. Единицы работы графических процессоров отличаются (и сильно ограничены) по сравнению с обычными процессорами.

9
ответ дан 30 November 2019 в 13:28
поделиться

Взгляните на thust :

Thrust - это библиотека параллельного интерфейса CUDA. алгоритмы с интерфейсом напоминающий стандартный шаблон C ++ Библиотека (STL). Тяга обеспечивает гибкий высокоуровневый интерфейс для GPU программирование, которое значительно улучшает продуктивность разработчика.

5
ответ дан 30 November 2019 в 13:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: