плавать против INT в CUDA - PullRequest
       6

плавать против INT в CUDA

4 голосов
/ 18 августа 2010

Лучше ли использовать float вместо int в CUDA?

Уменьшает ли float банковские конфликты и обеспечивает слияние? (или это не имеет к этому никакого отношения?)

Ответы [ 4 ]

5 голосов
/ 18 августа 2010

Банковские конфликты при чтении разделяемой памяти - все о количестве прочитанных данных.Итак, поскольку int и float имеют одинаковый размер (по крайней мере, я думаю, что они на всех платформах CUDA), разницы нет.

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

2 голосов
/ 20 августа 2010

Оба int и float - это четыре байта, так что это не имеет никакого значения (если вы обращаетесь к ним обоим одинаково), которое вы используете с точки зрения объединения ваших глобальных обращений к памяти или банковских конфликтов на доступ к общей памяти.

Сказав это, вы можете иметь лучшую производительность с float с, поскольку устройства предназначены для максимально быстрого их обработки, int с часто используются для управления, индексов и т. Д. И, следовательно, имеют более низкую производительность. Конечно, это действительно сложнее, чем это - если бы у вас не было ничего, кроме числа с плавающей запятой, целочисленное оборудование было бы бездействующим, что было бы пустой тратой.

1 голос
/ 02 марта 2011

Банковские конфликты и слияния - все о шаблонах доступа к памяти (независимо от того, все ли потоки внутри основы читают / записывают в разные места с одинаковым шагом).Таким образом, эти проблемы не зависят от типа данных (float, int, double и т. Д.)

Обратите внимание, что тип данных влияет на производительность вычислений.Плавающая с одинарной точностью быстрее, чем с двойной точностью и т. Д. Массивные FPU в графических процессорах обычно означают, что выполнение вычислений в фиксированной точке не требуется и может даже нанести ущерб.

0 голосов
/ 31 августа 2012

Ознакомьтесь с разделом «Математические функции» Руководства для разработчиков CUDA. Использование функций времени выполнения устройства (встроенные функции) может обеспечить лучшую производительность для различных типов. Вы можете выполнить несколько операций за одну операцию за меньшее количество тактов.

Для некоторых функций SectionC.1 существует менее точная, но более быстрая версия в компоненте времени выполнения устройства; оно имеет то же имя с префиксом __ (например, __sinf (x)). Компилятор имеет опцию (-use_fast_math), который заставляет каждую функцию в Таблице компилироваться в свой внутренний аналог ... выборочно заменять математическую функцию вызовы вызовами встроенных функций только там, где это заслуживает прирост производительности и где изменились свойства, такие как снижение может допускаться точность и обработка в особых случаях.

  • Например, вместо использования => используйте: x / y => __fdividef (x, y); sinf (x) => __sinf (x)

И вы можете найти больше методов, таких как x + c * y, выполняемых с одной функцией ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...