相关疑难解决方法(0)

通过JNI传递C和Java之间的指针

目前,我正在尝试创建一个使用CUDA功能的Java应用程序.CUDA和Java之间的连接工作正常,但我有另一个问题,想问一下,如果我的想法是正确的.

当我从Java调用本机函数时,我将一些数据传递给它,函数计算一些东西并返回结果.是否有可能让第一个函数返回一个引用(指针)到这个结果,我可以传递给JNI并调用另一个用结果进行进一步计算的函数?

我的想法是通过将数据保留在GPU内存中并只是传递对它的引用来减少从GPU复制数据所带来的开销,以便其他函数可以使用它.

经过一段时间的尝试,我想,这应该是不可能的,因为指针在应用程序结束后被删除(在这种情况下,当C函数终止时).它是否正确?或者我只是在C中看到解决方案?

编辑:嗯,稍微扩展问题(或使其更清楚):当函数结束时,JNI本机函数分配的内存是否已释放?或者我可以访问它,直到JNI应用程序结束或我手动释放它?

感谢您的输入 :)

java java-native-interface pointers cuda

68
推荐指数
6
解决办法
5万
查看次数

JNI:从C代码到Java和JNI

背景

我正在开发eclipse中的android应用程序,现在我遇到了问题,我需要你的帮助.所以我必须从JAVA应用程序调用C编写的函数.但在我编写代码的过程中,我有一些问题,你可以在下面看到.我在等你的答案和想法......

C代码:

typdef struct blobData_s {
    unsigned long length;
    unsigned char data[1];
} blobData_t;

unsigned int CheckEnrollmentExist ( unsigned long hdevice, blobData_t* pInputInfo ) {
    // Function code goes here
    ..........................
    return some_value;
}
Run Code Online (Sandbox Code Playgroud)

JAVA代码:

在JAVA代码而不是unsigned long我使用int所以我可以写.

class jblobData_c {
    public int langth;
    *Question 1.*
}

public class ApplicationMainClass extends Activity {
    // Some code goes here
    ......................

    public native int JCheckEnrollmentExist( int jhdevive, *Question 2.* );

}
Run Code Online (Sandbox Code Playgroud)

问题1.

  • 我可以用什么而不是unsigned …

c java eclipse java-native-interface android

11
推荐指数
1
解决办法
2760
查看次数

标签 统计

java ×2

java-native-interface ×2

android ×1

c ×1

cuda ×1

eclipse ×1

pointers ×1