Cómo pasar valores de matriz hacia y desde Android RenderScript usando Asignaciones

He estado trabajando con RenderScript recientemente con la intención de crear una API que un programador pueda usar con facilidad, similar a la forma en que funciona Microsoft Accelerator.

El problema con el que estoy atrapado en este momento es que quiero pasar valores hacia y desde la capa RenderScript y hacer que todo se ejecute de la manera más eficiente posible, este es un extracto de mi código fuente hasta ahora:

    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);

Esto solo crea dos matrices básicas y las llena de valores y llama a las funciones que las enviarán a RenderScript.

 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;
}

Esto enviará un par de valores al siguiente 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);
 }

Pero hay dos problemas con esto, el primero es que la naturaleza asincrónica de RenderScript significa que cuando la capa de Java solicita el valor, el script no ha realizado la operación todavía, o ya lo hizo, destruyó el valor de salida y comenzó en el siguiente. Y gracias a la baja visibilidad de depuración de RenderScript no hay forma de saberlo.

El otro problema es que no es muy eficiente, el código llama constantemente a la función RenderScript para agregar dos números juntos. Idealmente, me gustaría pasar la matriz a RenderScript y almacenarla en una estructura y hacer que toda la operación se realice en una llamada de script en lugar de muchas. Pero para recuperarlo, creo que necesitaré usar la función rsSendtoClient, pero no he encontrado ningún material sobre cómo usarlo. Y preferiblemente me gustaría usar la estrategia rsForEach, pero nuevamente la información es aterradora.

Si alguien tiene alguna idea, estaría muy agradecido. Gracias

Will Scott-Jackson

Respuestas a la pregunta(6)

Su respuesta a la pregunta