是否有任何用于Java / Scala的矩阵库包装blas / lapack并使用直接内存访问,ByteBuffers或unsafe.getFloat访问?看起来这种方法可以避免在越过JNI边界时发生的所有数组复制。
答案 0 :(得分:0)
我不知道任何这样的库,除了一些不安全的序列化框架,如kryo;但我怀疑你是否会需要它。根据我的经验,这不会成为您系统的瓶颈。
对于正常的序列化和消息传递目的,您总是将矩阵序列化为字节缓冲区,这就是可能发生不安全访问的地方。即使从Java内存复制到不安全的内存,您也可以安全地实现非常高的消息吞吐量和非常低的延迟,轻松地谈到千兆字节吞吐量和微秒延迟。
出于计算目的,听起来你不太可能有一个不断变化的大矩阵,你每次都会将它新填充到C ++计算层。这样的大矩阵通常是基于相关或稀疏的,并且更新矩阵本身可能比将其提供给C ++端需要更长的时间。
唯一的用途可能是当你试图实现一个从头到尾延迟约1微秒的系统时;但如果这是你的目的,那么你可能不应该从Java开始,甚至不应该从C ++开始。