java - 通过 JNI 在 Java 或 C++ 中实现矩阵运算?

标签 java c++ java-native-interface

我基本上是想在 java 中为电路求解器完成 MNA(改进的节点分析)。它们基本上涉及求解大量线性方程,所以我最终得到了矩阵代数。 MTJ 和其他几个 Java 库都很棒,但我的任务是自己实现它并在 Java 中完成它,因为我的整个项目都是在 Java 中实现的。我想知道我是否应该继续使用 Java 实现,或者是否会通过 JNI 在 C++ 中实现它提供更好的性能来保证它的实现?我只是担心 JNI 在传递一万及以上的矩阵时会产生瓶颈,或者这不是问题吗?

最佳答案

我对您的最强烈建议是,在开发代码时不要尝试优化代码以提高性能。几乎不可能提前知道哪些代码需要优化。通常,您最终会得到可读性差、可维护性差、性能也好不到哪里去的代码。

  1. 使用 Java 开发您的库,以实现最大的清晰度和正确性。忽略性能。

  2. 针对实际负载的基准性能。例如,如果您需要处理数百万个矩阵,那么测试需要多长时间。

  3. 确定您是否有问题。现代硬件加上 JRE 的所有性能元素意味着在这个阶段需要做任何事情的情况要少得多。如果需要做某事,请考虑在功能更强大的机器上运行,而不是优化您的代码。这通常是更便宜的选择。

  4. 如果您需要优化代码,请使用分析器查找瓶颈。通常只有少数几个小区域消耗了大部分资源。您可能会浪费大量时间来优化影响很小的代码。

  5. 优化那些瓶颈中的代码。有大量好的资源可以帮助您解决这个问题。定期重新运行基准测试以确保您有所作为。展开最终证明没有任何区别的优化。

关于java - 通过 JNI 在 Java 或 C++ 中实现矩阵运算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46178274/

相关文章:

java - 获取 DefaultListModel 以使用 LinkedList

c++ - 如何开发跨平台的C++项目?

java - 对于使用 jna 的补丁,MsiOpendatabase 返回错误 110

java - 无法借助 JNA 库访问内存引用

java - Thread.getContextClassLoader() == null?

java - RMI:如何将服务器端和客户端类放置到网络可访问的位置?

java - 在 WebDriver 中获取元素,而不是通过 xpath

c++ - boost::信号2;没有添加信号槽的匹配函数

c++ - 符号查找错误 : _FileName_: undefined symbol: _intel_fast_memmove

android - 带或不带括号的 JNIEnv 用法?