Como passar valores de matriz para e do Android RenderScript usando Alocações

rabalhei recentemente com o RenderScript com a intenção de criar uma API que um programador possa usar com facilidade, semelhante à maneira como o Microsoft Accelerator funcion

O problema com o qual estou preso no momento em que quero passar valores para e da camada RenderScript e fazer com que tudo seja executado da maneira mais eficiente possível, esse é um extrato do meu código-fonte até agora:

    int[] A = new int[10];
    int[] B = new int[10];

    for (int i = 0; i < 10; i++) {
        A[i] = 2;
        B[i] = i;
    }
    intAdd(A, B);

Isso apenas cria duas matrizes básicas e as preenche com valores e chama as funções que as enviarão para o RenderScrip

 private void intAdd(int[] A, int[] B) {
    RenderScript rs = RenderScript.create(this);
    ScriptC_rsintadd intaddscript = new ScriptC_rsintadd(rs, getResources(), R.raw.rsintadd);
    mScript = intaddscript;

    for(int i = 0; i < A.length; i++) {
    setNewValues(mScript, A[i], B[i]);
    intaddscript.invoke_intAdd();
    int C = getResult(mScript);
    notifyUser.append(" " + C);
    }
}

    public void setNewValues(Script script, int A, int B) {
    mScript.set_numberA(A);
    mScript.set_numberB(B);
}

public int getResult(Script script) {
    int C = mScript.get_numberC();
    return C;
}

Isto enviará um par de valores para o seguinte código RenderScript:

int numberA;
int numberB;
int numberC;

void intAdd() {
/*Add the two together*/
numberC = numberA + numberB;
/*Send their values to the logcat*/
rsDebug("Current Value", numberC);
 }

Mas há dois problemas com isso, o primeiro é a natureza assíncrona do RenderScript, significa que, quando a camada Java solicita o valor, o script ainda não fez a operação ou destruiu o valor do objeto saída e iniciado no próximo. E, graças à baixa visibilidade de depuração do RenderScript, não há como saber.

O outro problema é que não é muito eficiente, o código está constantemente chamando a função RenderScript para adicionar dois números. Idealmente, eu gostaria de passar a matriz para o RenderScript e armazená-la em uma estrutura e fazer toda a operação em uma chamada de script, em vez de muitas. Mas, para recuperá-lo, acho que preciso usar a função rsSendtoClient, mas não encontrei nenhum material sobre como usá-la. E, de preferência, eu gostaria de usar a estratégia rsForEach, mas novamente as informações são assustadoras.

Se alguém tiver alguma idéia, eu ficaria muito grato. Obrigado

Will Scott-Jackson

questionAnswers(6)

yourAnswerToTheQuestion