2013-09-29 3 views
1

Я хотел бы знать, можно ли использовать механизм RenderScript для оптимизации алгоритма.Использование RenderScript для Android с неопределенными элементами

Алгоритм выполняет итеративную обработку изображения до тех пор, пока не будут выполнены некоторые условия. Невозможно узнать, прежде чем обрабатывать количество требуемых итераций. Но я видел только примеры RenderScript, которые работают над хорошо определенным распределением, имеющим N элементов (типичным примером является то, что ядро ​​выполняется для каждого пикселя в растровом изображении).

Одним из решений было бы создать цикл «while» Java, и на каждом итерационном вызове код RenderScript (он будет иметь только один элемент, один цикл ядра) и проверить из java, когда алгоритм завершится. Будет ли это исполнять? Я имею в виду, мне придется передать растровое изображение в RenderScript, будет ли это причиной создания целой копии? Не было бы NDK лучшим решением в этом случае?

Какой был бы лучший подход к работе, чтобы решить эту проблему?

Спасибо! Juan Ignacio

+0

Renderscript не используется для оптимизации алгоритма, но делает подходящую работу. Вы указываете итеративную обработку, но вы можете делать такие вещи, как Mandelbrot в Renderscript, поэтому вы можете более подробно объяснить, что вы пытаетесь выполнить. –

ответ

2

Вы можете вернуться к Java для управления потоком на каждой итерации, но это не самое лучшее и требует кучу дополнительных материалов, чтобы убедиться, что вы не блокируете поток пользовательского интерфейса и тому подобное.

Хороший способ сделать это - создать однопоточную функцию RS (не созданную с __attribute ((ядро)) или что-то в этом роде) и использовать rsForEach для создания каждой итерации. когда эта итерация будет выполнена, rsForEach вернется, вы сможете проверить условия завершения через глобальные скрипты скрипта и при необходимости запустить еще одну итерацию. это также будет сдерживать накладные расходы, так как вы будете жить в среде RS для всего времени выполнения итеративного процесса (меньшее количество переходов JNI, меньшее количество входов/выходов процессоров, таких вещей).

+0

Обратите внимание, что вы можете использовать только rsForEach() с ядром root() для данного скрипта. –

Смежные вопросы