我们有一个本机c/asm
应用程序,它使用GPU(OpenCL)encrypt/decrypt
通过一种特定的方法处理大数据,并且运行得很好,没有问题。该项目的一部分(网络和分发)由进行开发JEE
,我们只需要调用本机应用程序/库即可。
我们试图使用Process
类将其称为独立的外部过程。问题是我们无法控制应用程序(事件,处理程序,线程等)。我们还尝试将C代码转换为Java代码,但是性能下降了。除了将本机代码作为进程运行之外,我还在考虑JNA和JNI,但是还有一些问题。
问题:
ByteBuffer#allocateDirect()
JNI和JNA中的直接(非托管)内存[Java()] 交换数据?我们在Redhat Linux6 x64上有两个AMD W7000集群设备。
JNA比JNI慢得多,但容易得多。如果性能不是问题,请使用JNA。
使用直接缓冲区的优势在于,最关键的操作不使用JNI或JNA,因此速度更快。当它们变成单个机器代码指令时,它们使用内在函数。
如果Java代码比C慢得多,则可能是代码未充分优化。通常,GPU应该完成所有工作,因此,如果Java速度稍慢,则不会有太大的不同。
例如,如果您将99%的时间花费在GPU上,而Java花费的时间是原来的两倍,则总时间将降低99 + 2%或1%。
我们有一个本机< code>c/asm应用程序,它利用GPU(OpenCL)通过特定的方法对大量< code >数据进行加密/解密,它运行得非常完美,没有任何问题。该项目的一部分(网络和分发)正在由< code>JEE开发,我们只需要调用原生应用程序/库。 我们已经尝试使用类将其称为分离的外部进程。问题是我们无法控制应用程序(事件、处理程序、线程等…)。我们还尝试将C代码切换为Java代码,但性能
问题内容: 望回到发展空间;主要使用Java调用某些本地win32函数(我不希望在.NET中构建)…。 有人可以指向我一个可以使用Java(JNI / JNA / SWIG)从不同的运行窗口中读取标题的地方。假设您知道要尝试挂接到的应用程序在内存空间中的哪个位置。 问题答案: JNA中: 要使用它: 您可能需要为HWND使用适当的结构映射,并允许unicode支持。您可以在JNA网站上找到该信息以
问题内容: 与JNI相比,JNA似乎更易于调用本机代码。在什么情况下,您将在JNA上使用JNI? 问题答案: JNA不支持c 类的映射,因此,如果您使用的是c 库,则需要一个jni包装器 如果需要大量内存复制。例如,您调用一个返回大字节缓冲区的方法,对其中的内容进行更改,然后需要调用使用此字节缓冲区的另一种方法。这将需要您将该缓冲区从c复制到java,然后再将其从java复制回到c。在这种情况下,
但是,当我使用命令行中的ndk-build命令编译它时,会出现以下错误: Android NDK:APP_PLATFORM未设置。默认为最小支持版本Android-16。[arm64-v8a]编译:com_celik_abdullah_imageprocessingpart_processors_NativeImageProcessor<=com_celik_Abdullah_ImageProce
JNA(Java Native Access )提供一组Java工具类用于在运行期动态访问系统本地库(native library:如Window的dll)而不需要编写任何Native/JNI代码。开发人员只要在一个java接口中描述目标native library的函数与结构,JNA将自动实现Java接口到native function的映射。下面是一段使用该工具的示例代码: package c
我正在编写一个Scala程序,它使用通过JNA加载的C++共享对象来调用一些我们用C++编写的自定义文件读取函数,并且不希望维护Java/Scala副本。该程序只需要与Linux兼容。 我的问题是,检查共享对象是否可用的适当方法是什么?如果用户忘记将共享对象添加到他们的LD_LIBRARY_PATH中,那么当他们尝试使用其中的某些功能时,GUI将崩溃。我希望在启动时进行检查,以确保共享对象可用--