Как графические процессоры (Geforce 9800) реализуют побитовые целочисленные операции? - PullRequest
2 голосов
/ 24 ноября 2010

CUDA дает программисту возможность написать что-то вроде a & b | ~ c (a, b, c, являющееся unsigned int с).

Что делает GPU внутри? Это как-то "эмулирует" побитовые операции над целыми числами или они так же эффективны, как на традиционном процессоре?

1 Ответ

5 голосов
/ 24 ноября 2010

Согласно Руководство по программированию CUDA v2.3 (Раздел 5.1.1.1) побитовые операции выполняются на полной скорости (8 операций за такт).

Целочисленная арифметика

Пропускная способность целочисленного сложения равна 8 операций за такт.

Пропускная способность 32-разрядного целого числа умножение 2 операции в тактовый цикл, но mul24 обеспечивает 24-битный целочисленное умножение с пропускная способность 8 операций за такт цикл. О будущих архитектурах тем не менее, mul24 будет медленнее, чем 32-разрядное целочисленное умножение, поэтому мы рекомендую предоставить два ядра, одно используя mul24, а другой используя общее 32-разрядное целочисленное умножение, быть соответствующим образом вызванным применение.

целочисленное деление и операция по модулю являются особенно дорогостоящими и должны быть по возможности избегать или заменить побитовые операции при любой возможности: Если n является степенью 2, (i / n) эквивалентно (i >> log2 (n)) и (i% n) эквивалентно (i & (n-1)); Компилятор будет выполнять эти преобразования, если n буквально.

Сравнение Пропускная способность сравнения, мин., Максимум, 8 операций за такт цикл.

Битовые операции Пропускная способность любой битовой операции составляет 8 операций. за такт.

...