Я, проходящей через образец кода NVIDIA предоставляется на linkпараллельная реализация сокращения сумма в OpenCL
В примере кода ядер (файл oclReduction_kernel.c
) reduce4 использует технику
1) разматывания и удаления барьера синхронизации для резьбы id < 32.
2) Кроме этого, код использует проверки blockSize для суммирования данных в локальной памяти. Я думаю, что в OpenCL у нас есть get_local_size(0/1)
, чтобы узнать размер рабочей группы. Размер блока меня сбивает с толку.
Я не могу понять оба пункта, упомянутые выше. Почему и как эти вещи помогают в оптимизации? Любые объяснения по сокращению5 и reduce6 также будут полезны.
Презентация на https://docs.nvidia.com/cuda/samples/6_Advanced/reduction/doc/reduction.PDF относится к CUDA (и, по общему признанию, я считаю, что образцы OpenCL в основном были созданы путем конвертации ядер CUDA в OpenCL как можно скорее), но это может привести к некоторому пониманию, особенно в отношении дальнейших оптимизированных версий reduce5/reduce6. – Marco13
Да, они были только в кудах. Но он не отвечает ни на какие вопросы. –
Спасибо @ Marco13 Я пропустил ур ссылку в ночное время. Может быть, я спал :) –