繁体   English   中英

将Java浮点数转换为C.

[英]Convert Java floats to C

我有一个使用包含大量浮点数的对象的java程序。 事情是出于优化原因,我需要将此代码的一部分转换为C.

对于基准测试,我已经在C中转换了所需的方法。而不是将对象作为输入,它现在采用那些浮点数组。

我将这些数组保存在Java文件中,以便从我的C代码中轻松访问它。 问题是,Java浮动和C浮动显然是完全不同的,我在我的C代码中得到虚拟值。

我没有在互联网上找到任何可以帮助我完成这项任务的资源。 我确实找到了这个 ,但它适用于C ++,我无法访问这些类。

你有什么建议吗? 我想我可以开发某种转换器,但可能需要一些时间,而且可能有更好的在线解决方案。

谢谢,

编辑:

我使用DataOutputStream及其writeFloat方法保存float数组。

我会使用JavaCL或JavaCV直接使用GPU。

注意:这些库也适用于Intel / AMD CPU,因此如果GPU速度不快,则无需使用GPU。

BTW:浮点数用Java和C是一样的。 但是,如果使用ObejctOutputStream,则只能由Java读取,如果使用DataOutputStream,则数据将采用Big Endian格式。 如果你的Intel / AMD CPU是小端,你必须交换字节。

如果你使用ByteBuffer和NIO来编写数据,你可以使它成为大端或小端。 后者不需要翻译。

注意:您可以通过JNI访问float[]FloatBuffer ,这意味着它不需要写入文件。

我建议使用FloatBuffer

FloatBuffer fb = ByteBuffer.allocateDirect(size*4)
                           .order(ByteOrder.nativeOrder())
                           .asFloatBuffer();

首先,您可以在GPU上运行Java程序而无需转换为C: 项目RootBeer

其次,Java浮动与C浮动相同。 诀窍是正确地写和读它们。 我建议使用FileChannelByteBuffer ,它们具有读取和写入浮点数的方法。 注意字节顺序,ByteBuffer有方法来设置所需的顺序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM