Я хотел бы отобразить thread_id. Это в C / CUDA, но это скорее алгебраическая проблема, которую я пытаюсь решить.
Итак, карта, которую я пытаюсь достичь, выглядит следующим образом:
- Потоки 0-15: чтение массива значений [0]
- Темы 16-31: чтение значения [3]
- Темы 32-47: чтение значения [0]
- Темы 48-63: чтение значения [3]
- Потоки 64-79: чтение массива значений [6]
- Потоки 80-95: чтение массива значений [9]
- Потоки 96-111: чтение массива значений [6]
- Потоки 112-127: чтение массива значений [9]
и т. Д.
Обратите внимание, что это упрощение отображения, в действительности существует более 128 потоков, но последовательность такая, как показано, и потоки всегда будут отображаться кратно трем.
Какую формулу я могу использовать, чтобы каждый поток мог запускать, чтобы выяснить, какую позицию массива он должен смотреть?
Я хотел бы использовать какую-то формулу, как в следующем примере, а не явную карту или какие-либо операторы if.
Чтобы проиллюстрировать, как я решил эту проблему для другого случая, для которого требовалось другое отображение, т. Е .:
- Потоки 0-31: чтение массива значений [0]
- Темы 32-63: чтение значения [3]
Я использовал код
rintf(float(tid)/96.0)*3