Типизация Java-массива JNI в NEON - PullRequest
0 голосов
/ 09 августа 2011

Я уверен, что люди делают это все время, но мне трудно здесь.Я передаю массив чисел с плавающей точкой в ​​функцию JNI, но затем я намерен использовать возможности ARM NEON SIMD для выполнения некоторых операций с этим массивом.Я ни в коем случае не эксперт по Си, так что я застрял.Вот набросок того, что я пытаюсь сделать.

JNIEXPORT jfloatArray JNICALL Java_com_blah (JNIEnv *env, jobject obj, jfloatArray input)
{
    jfloat * x;
    float32_t * y;

    x = (*env)->GetFloatArrayElements(env,input,0);

    // Assign x to y

    // Perform some stuff on y

    // Return y as a Java float array back to caller

}

У меня есть идея, как использовать C для типизации всего массива.Также, возможно, есть способ сделать это напрямую при извлечении записей массива из Java (x = (*env)->GetFloatArrayElements(env,input,0)).Как правильно это сделать?

1 Ответ

0 голосов
/ 10 августа 2011

Я не думаю, что вам придется присвоить весь массив y. Если вы уверены, что должны, то вы можете использовать GetArrayLength, чтобы найти размер массива с плавающей точкой. Скопируйте элементы один за другим. Выполните ваши вещи, а затем создайте новый массив с плавающей точкой.
Обязательно вызовите ReleaseFloatArrayElements, иначе произойдет утечка.

...