Ответ 1
Ответ: потребности Android сильно отличаются от того, что предлагает OpenCL.
OpenCL использует модель исполнения, впервые введенную в CUDA. В этой модели ядро состоит из одной или многих групп рабочих, и каждая группа имеет быструю разделяемую память и примитивы синхронизации внутри этой группы. Это означает, что описание алгоритма должно быть смешано с тем, как этот алгоритм должен планироваться на определенной архитектуре (потому что вы определяете размер группы и когда синхронизировать внутри этой группы).
Это замечательно, когда вы пишете для одной архитектуры и хотите абсолютную максимальную производительность, но она получает максимальную производительность за счет производительности. Возможно, на вашей архитектуре у вас достаточно регистров и разделяемой памяти для запуска 256 сотрудников в группе для достижения максимальной производительности, но в другой архитектуре вы получите массивную регистрацию разливов с чем-то более 128 сотрудников на группу, что приведет к 80% -ной регрессии производительности, Между тем, поскольку ваш код явно написан для 256 сотрудников на группу, среда выполнения не может ничего сделать, чтобы попытаться улучшить ситуацию на другой архитектуре - она должна подчиняться тому, что вы написали. Такая ситуация распространена при переходе от архитектуры к архитектуре на компьютере/HPC-стороне вычисления графического процессора.
На мобильном телефоне Android требуется переносимость производительности между множеством разных производителей графических процессоров и процессоров с очень разными архитектурами. Если Android будет полагаться на модель исполнения в стиле CUDA, было бы практически невозможно написать одно ядро и запустить его на разных устройствах.
Рефераты RenderScript контролируют планирование от разработчика за счет некоторой максимальной производительности; однако мы постоянно закрываем пробел с точки зрения того, что возможно с помощью RenderScript. Например, ScriptGroup, API, представленный в Android 4.2, является большой частью наших планов по дальнейшему улучшению генерации кода графического процессора. Появилось много новых улучшений, которые также упрощают работу с быстрым кодом.