使用直接内存访问的Java矩阵库

时间:2014-08-22 03:29:06

标签: java blas

是否有任何用于Java / Scala的矩阵库包装blas / lapack并使用直接内存访问,ByteBuffers或unsafe.getFloat访问?看起来这种方法可以避免在越过JNI边界时发生的所有数组复制。

1 个答案:

答案 0 :(得分:0)

我不知道任何这样的库,除了一些不安全的序列化框架,如kryo;但我怀疑你是否会需要它。根据我的经验,这不会成为您系统的瓶颈。

对于正常的序列化和消息传递目的,您总是将矩阵序列化为字节缓冲区,这就是可能发生不安全访问的地方。即使从Java内存复制到不安全的内存,您也可以安全地实现非常高的消息吞吐量和非常低的延迟,轻松地谈到千兆字节吞吐量和微秒延迟。

出于计算目的,听起来你不太可能有一个不断变化的大矩阵,你每次都会将它新填充到C ++计算层。这样的大矩阵通常是基于相关或稀疏的,并且更新矩阵本身可能比将其提供给C ++端需要更长的时间。

唯一的用途可能是当你试图实现一个从头到尾延迟约1微秒的系统时;但如果这是你的目的,那么你可能不应该从Java开始,甚至不应该从C ++开始。