У меня есть алгоритм распространения луча, который я только что реализовал в ArrayFire. Я использовал бэкэнд OpenCL с моей картой GTX Titan. С OpenCL он работал со скоростью около 25 000 шагов в минуту. Затем я переключил его на бэкэнд CUDA, и производительность увеличилась до 50 000 шагов в минуту. Это было несколько неожиданно, но я полагал, что он может использовать некоторые дополнительные функции, недоступные OpenCL. Затем я выполнил те же тесты, используя мою карту GTX 960. Он работал со скоростью около 22 000 шагов в минуту с OpenCL и 23 000 с CUDA. Это вызывает недоумение, поскольку я ожидал, что он будет следовать той же схеме, что и Титан. Также я думаю, что я видел изменение производительности 2x на моем ноутбуке, используя GT 730M. Я слышал, что nvidia замедляет OpenCL на некоторых картах. Они делают это для серии 700?OpenCL в два раза медленнее, чем CUDA на GTX Titan
ответ
Поскольку у вас не было никакого кода, я могу предложить только профайлер. Например, я использую codexl of amd, и все снимки берутся из чрезмерно синхронизированного алгоритма свертки, используя область кисти 50x50, вычисляющую матрицу 768x768. Имея множество целых чисел и локальных целых массивов и целочисленных операций и в то же время много операций fp в конце, приводит к некоторым проблемам (работа сбалансирована на 3 устройствах).
Я уверен, что у nvidia есть аналогичное программное обеспечение для обнаружения дыр в вашем приложении.
- Профилирование времени процессора за функцию позволяет вам узнать о горячих точках на стороне хоста. Лучшие 5 самых трудоемких функций, перечисленных здесь. Таким образом, вы можете оптимизировать функции хоста. (Нажав на одну из функций приводят подробные счетчики производительности инструкций процессора на ядро)
- Ядро анализа показывает, если есть какие-либо узкие места векторных единиц, скалярных , операции с памятью и многое другое. Здесь можно увидеть заполнение ядра и числа волновых фронтов, но они десятки других вещей с правой стороны.
При нажатии на kerneloccupancy ячейку, вы можете увидеть источник узких мест в деталях, как в изображении ниже:
- Применение график трассировки профилирование выявляет пробелы между ndRangeKernel, операции чтения-записи, clFinish и другие методы API, чтобы вы могли видеть, есть ли избыточные сикронизации, узкие места в многопоточных операциях и mem ORY утечки. (ниже рисунке показаны отверстия в вертикальном и горизонтальном направлениях, так как этот пример не имеет асинхронных операций в устройстве, и есть избыточные синхронизаций)
- Также GTX 960 не может бить титана если рабочая нагрузка достаточно велика для 960 и достаточно мала для титана (возможно, это просто api-служебная нагрузка, вызванная разной обработкой устройства). Это может быть титан, имеющий 192 ядра на единицу (лучше для 384 - 768 потоков на группу) и gtx960, имеющих 128 ядер на единицу (лучший параллелизм для 256 - 512 -1024 потоков на группу)
25000 итераций в минуту составляет 416 второй - около 2,5 миллисекунд на шаг. 2,5 миллисекунды означает, что вы можете перенести всего 10-40 МБ на этот фрагмент времени. Что такое размер буферов, которые отправляются?Чрезмерные функции clFinish вызывают по меньшей мере сотни микросекунд, которые имеют наблюдаемую задержку, когда время ядра сравнимо (например, 1-2 миллисекунды)
Увеличьте масштаб выполнения, так что титан загружен достаточно для достижения оптимальной производительности (а не пиковой).
Когда рабочая нагрузка слишком мала, мой R7-240 (320 ядер) превосходит мой HD7870 (1280 ядер), потому что коэффициент заполнения ядра выше в r7, поскольку на единицы расчета больше волновых фронтов, а ALU -% 100 (занятие), также есть меньше вычислительных единиц для подготовки к вычислению (накладные расходы) и меньше синхронизации в аппаратных средствах (накладные расходы). Вот почему существуют разные категории для таких тестов, как «производительность» и «крайность». Кроме того, более новые архитектуры работают ближе к их максимальным характеристикам.
Возможно, gtx 960 может не управлять 3-мя приложениями с массивом, запущенными одновременно (@ 15000/m), в то время как титан может управлять одновременно 8-10 x приложениями (например, 15000/м) (если вы выбираете параллельность уровня приложения, а не просто увеличиваете рабочий размер на каждый шаг).
Редактировать: Пример кода на самом деле вычисления взаимодействия диффузионного типа. Равновесное состояние области вокруг исходного материала круг-образную форму:
Цвет полосатость происходит от округления до FP 0-255 диапазона целого числа для всех цветовых каналов (RGBA-1 байт каждый, должен использовать поплавки, но недостаточно бюджета pci-e)
Я оставляю данные на gpu между шагами. Я делаю только от 20 до 50 шагов, чтобы минимизировать накладные расходы на передачу данных. Также моя сетка имеет размер 1024x1024. Согласно X-Server nvidia, я использую 99% титанов. – chasep255
Где вы получили доступ к его заявлению? –
с сайта amd. страница разработчика. Также важно вычислить коэффициент передачи. –
- 1. Почему cublas на GTX Titan медленнее, чем однопоточный код процессора?
- 2. Программа CUDA работает медленнее на Tesla K20, чем GTX 965
- 3. GTX Titan Z Глобальная память
- 4. Максимальный номер блоков на GTX TITAN
- 5. CUDA 8.0, GTX 1080, почему добавление вектора медленнее, чем умножение матрицы на 5x?
- 6. CUDA GPU медленнее, чем CPU
- 7. SSE42 & STTNI - PcmpEstrM в два раза медленнее, чем PcmpIstrM, правда?
- 8. Titan X Pascal на VGG16 намного медленнее на моей машине, чем в эталоне
- 9. Параллельность в GPU - CUDA/OpenCL
- 10. реализация tensorflow в 2 раза медленнее, чем у факела
- 11. Have GTX Titan, возникают проблемы с динамической Параллельностью
- 12. Ядро OpenCL медленнее, чем обычно, цикл Java
- 13. Непоследовательное поведение: CUDA 8 на GTX 1080
- 14. Обновление GPU от GTX 980 до Titan Z и изменения кода в cuda
- 15. OpenCL реализовал алгоритмы медленнее, чем обычный цикл
- 16. Почему версия cuda 2x медленнее, чем код процессора?
- 17. CUDA версия медленнее, чем версия процессора?
- 18. Cuda - OpenCL CPU 4x быстрее, чем OpenCL или CUDA GPU версия
- 19. OpenCL Kernel работает медленнее на более быстром графическом процессоре
- 20. OpenCL медленнее на настольном компьютере, чем macbook 13 «
- 21. Поддержка OpenCL для Nvidia GTX 295
- 22. Параллельный for_each более чем в два раза медленнее, чем std :: for_each
- 23. Почему std :: mutex в два раза медленнее CRITICAL_SECTION
- 24. свойства устройств CUDA для GTX 970
- 25. Ошибка cudaMemPrefetchAsync на GTX 1080 (Pascal)?
- 26. OpenCL против производительности CUDA на устройстве Nvidia
- 27. Ошибка импорта Tensorflow CUDA GTX 1070
- 28. OpenCL показывает только 6 параллельных комбайтных блоков на GTX 760?
- 29. MATLAB в два раза быстрее, чем Numpy
- 30. Firemonkey CUDA/OpenCL
NVIDIA не замедляет OpenCL на некоторых картах. –
В этом уравнении слишком много переменных. Некоторый код должен быть показан здесь. Необходимо использовать версию arrayfire и cuda. –
Также удалите спекулятивный вопрос с конца вашего вопроса. По нашему опыту, при прочих равных условиях производительность opencl и cuda на графических процессорах nvidia (для ядер, реализованных нами) довольно схожи. Различия исходят от основных библиотек, таких как clBLAS и clFFT, которые не оптимизированы для NVIDIA GPUS, в отличие от cuBLAS и cuFFT. –