将 JNI Java 数组类型转换为 NEON

发布于 2024-11-28 19:39:49 字数 593 浏览 2 评论 0原文

我确信人们总是这样做,但我在这里遇到了困难。我将浮点数组传递给 JNI 函数,但随后我打算使用 ARM 的 NEON SIMD 功能对此数组执行一些操作。无论如何,我都不是 C 专家,所以我有点陷入困境。这是我正在尝试做的事情的草图。

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))。解决这个问题的正确方法是什么?

I'm sure people do this all the time, but I'm having a hard time here. I'm passing an array of floats to a JNI function, but then I'm intended to use NEON SIMD capabilities of ARM to perform some operations on this array. I'm not a C expert by any means, so I'm kind of stuck. Here's a sketch of what I'm trying to do.

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

}

I have to Idea how to use C to typecast an entire array. Also, perhaps there is a way to do it directly when extracting array entries from Java (x = (*env)->GetFloatArrayElements(env,input,0)). What is the correct way of going about this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

狂之美人 2024-12-05 19:39:49

我认为您不必将整个数组分配给 y。如果您确定必须这样做,则可以使用 GetArrayLength 来查找浮点数组的大小。将元素一一复制。执行您的操作,然后创建一个新的浮点数组。
一定要调用ReleaseFloatArrayElements,否则会出现泄漏。

I dont think that you will have to assign the entire array to y. If you are sure you have to then you can use GetArrayLength to find the size of the float array. Copy the elements one by one. Perform your stuff and then create a new float array.
Be sure to call ReleaseFloatArrayElements, otherwise there will be a leak.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文