Работает ли uint2 быстрее, чем ulong в OpenCL на картах AMD GCN?
Какой из расчетов "+" быстрее? 1) uint2 a, b, c; с = а + б; 2) Улонг а, б, в; с = а + б;
1 ответ
AMD GCN не имеет встроенной поддержки 64-разрядных целочисленных векторов, поэтому второе выражение будет преобразовано в два 32-разрядных добавления: одно V_ADD_U32, за которым следует V_ADDC_U32, которое учитывает флаг переноса из первого V_ADD_U32.
Таким образом, чтобы ответить на ваш вопрос, они оба одинаковы с точки зрения количества команд, однако первый может быть вычислен параллельно (параллелизм на уровне команд) и может быть быстрее, если ваше ядро привязано к занятости (то есть использует много регистров).
Если ваши операторы могут выполняться скалярным модулем (т. Е. Они не зависят от индекса потока), то игра меняется, и вторая будет только одной инструкцией (против двух), поскольку скалярное устройство имеет собственное 64-битное целое число служба поддержки.
Однако имейте в виду, что ваше первое утверждение не совпадает со вторым, вы потеряете флаг переноса.