В настоящее время я работаю над проектом OpenCL, и мне интересно, почему он не поддерживает рекурсию. Связано ли это с параллелизмом?Почему OpenCL не поддерживает рекурсию?
3
A
ответ
5
Это связано с целевым оборудованием, я думаю. Для поддержки рекурсии требуется несколько аппаратных функций, которых нет у определенных классов устройств OpenCL (т. Е. Графических процессоров). Без них поддержка стека вызовов и разворачивание непрямого кода нецелесообразно. По той же причине NVIDIA не поддерживает рекурсию на всех своих устройствах с поддержкой CUDA.
3
Его не OpenCL, его аппаратное обеспечение GPU. AMD разработала новую архитектуру набора команд , которая будет поддерживать рекурсию. Графические процессоры имеют большое количество регистров (до 32 К). Итак, будьте осторожны, о чем просить и получить. Push/Pop из 32K регистров, для рекурсивного вызова, не будет быстрым.
Talonmies: Рекурсия поддерживается для функций устройства на вычислительной способности 2.x. –
@ashwin: Мне это хорошо известно, поэтому я сказал: «NVIDIA не поддерживает рекурсию на все свои аппаратные средства CUDA». Они поддерживают его на некоторых, то есть Ферми и Кеплере ... – talonmies