Javier Luis Lopez Ответов: 1

Может ли 6-ядерный процессор преодолеть графические платы?


Я сделал проект VS2013 для тестирования opencl на github OpenCL dir:

GitHub - jlopez2022/cpp_utils: пример программ на c++ [^]


В этом примере я вычислил дифференциальное среднеквадратичное значение большого вектора (размер 200mega), а затем в режиме процессора и отладки он рассчитал значение 100 Мегаопс/данные

В режиме CPU и release вычисление составляло около 400 Mops/data (поэтому я предполагаю, что он использовал 4 ядра параллельно).

Затем я проверил также на GPU и получил 600 Mops/data

Таким образом, теоретически, если я должен использовать 6-ядерный процессор, я должен преодолеть обработку GPU, если только полоса пропускания CPU-GPU не будет увеличена

Процессор был 4 ядерный E5 3,5 ГГц
Графический процессор был Radeon R9 390 с 2560 ядрами и частотой 1 ГГц

Теоретически графический процессор в 182 раза быстрее процессора но я предполагаю что к сожалению процессору требуется много времени для копирования данных в память графического процессора

Что я уже пробовал:

GitHub - jlopez2022/cpp_utils: пример программ на c++ [^]

1 Ответов

Рейтинг:
12

Jochen Arndt

Удвоение скорости в режиме выпуска не происходит за счет параллельной обработки. Он получен компилятором, оптимизирующим код в режиме выпуска и пропускающим дополнительные проверки, которые выполняются в отладочных сборках.

Вы должны явно написать код для параллельной обработки.

Какой метод в конечном итоге быстрее (CPU-код с параллельной обработкой или GPU-код), в целом ответить невозможно. Единственный надежный метод-это реализовать оба и сравнить результаты. Но это зависит от используемого оборудования (CPU / GPU, количества потоков и ядер), так что результаты для разных систем разные.

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


CPallini

5.

Javier Luis Lopez

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

> В таких случаях вы все еще можете реализовать оба варианта и предоставить пользователю возможность выбрать метод или выполнить короткие тесты, чтобы ваше приложение могло выбрать самый быстрый метод.

В моем коде на github есть два варианта. Любой желающий может изменить его для тестирования методов gpu vs cpu