Чтобы быть уверенным, я проверил мой код в следующих двух параметрах Dev:Renderscript пау(), POWR() и pown() очень медленно на GPU в Nexus 5 с ОС Android 4.4 и Android 4.4.1
Development OS: Windows 7 32-bit
Phone: Nexus 5
Phone OS version: Android 4.4 and Android 4.4.1
SDK bundle: adt-bundle-windows-x86-20131030
Build-tool version: 19
SDK tool version: 22.3
Platform tool version: 19
и
Development OS: Windows 7 32-bit
Phone: Nexus 5
Phone OS version: Android 4.4 and Android 4.4.1
SDK bundle: adt-bundle-windows-x86-20130729
Build-tool version: 18.1
SDK tool version: 22.2.1
Platform tool version: 18.0.1
код также очень прост, как следует
#pragma rs_fp_relaxed
uchar4 __attribute__((kernel)) sample(uchar4 in, uint32_t x, uint32_t y){
const float4 fin = convert_float4(in);
float tmp = pow(2.f, 2.f); // very slow on GPU
fin.x = tmp;
return convert_uchar4(fin);
}
код будет автоматически работать на GPU. Однако проблема, с которой я столкнулся, была, функция pow() очень медленная. Если я запустил этот скрипт с разрешением 1600 * 1067, он займет 1927 мс на графическом процессоре. Если я использую adb для принудительного запуска кода на CPU, он будет принимать только 10 мс до 12 мс. Если я прокомментирую функцию pow(), она будет работать быстро и в CPU, и в GPU. Я также попробовал альтернативные функции powr() и pown(), и результат был таким же. И я также попытался включить:
#include "rs_cl.rsh"
и результат был таким же.
Мне интересно, является ли это ожидаемым поведением. Заранее спасибо.
Было бы хорошо знать, как определяется «native_pow()». Если я попытаюсь использовать его, я просто получаю функцию, которая не существует. – TSGames
@TSGames На самом деле это ** native_powr() **, это не видно в документации, но доступно. '01066 _RS_RUNTIME float __attribute __ ((перегружаемый)) native_powr (float v, float y); 01067 FN_FUNC_FN_FN (native_powr) ' [ссылка] (http://developer.android.com/reference/renderscript/rs__cl_8rsh_source.html) –