将 Lua 和 MATLAB 结合起来

我现在的情况是,代码库的一部分是用 MATLAB 写的,另一部分是用 Lua 写的(用于一个第三方程序的脚本)。目前它们之间的数据交换是临时的,使用文件 I/O 系统。尽管当时并没有计划,但这演变成了代码的重要部分。

该程序的结构是这样的:运行一些 Lua 脚本,然后根据 MATLAB 的评估运行更多的 Lua 脚本等等。它处理模拟和评估(科学代码),并基于此创建新的模拟。它处理成千上万的文件和模拟。

为了简化流程,我开始研究改变数据 I/O 的可能性,并进行简单的调用。

我想听听如何解决这个问题的一些意见,最优解是我可以从 MATLAB 或 Lua 中调用所有内容,并以更一致和易于访问的方式组织大型数据集。

解决方案:

  1. 使用 Lua C API 为 Lua 模块创建绑定,并将其作为 C 库添加到 MATLAB 中。通过这种方式,我希望能够实现我的目标并减少系统复杂性。

  2. 一些更智能的数据格式用于数据集交换(HDF?),以及一些读取所需工作区变量的函数。这样,程序的各个部分仍然保持独立,但数据交换得到解决。

  3. 为 Lua/MATLAB 函数创建包装器,以便更轻松地调用它们。可通过函数的返回参数进行数据交换。

  4. 有什么建议吗?

点赞
用户6614127
用户6614127

我建议选择方案 1,或者如果你不介意花大笔的钱,可以使用 MATLAB coder 从 MATLAB 端生成 C 函数,将生成的代码编译成共享库,使用 LuaJIT FFI 导入库,并从 Lua 运行所有内容。使用此解决方案,您不需要更改任何 MATLAB 代码,也不需要修改太多 Lua 代码,这得益于 LuaJIT 对于数组索引的语义。方案 1 是免费的,但由于两种语言的数据结构之间的常量切换,它的效率并不高。而且编写接口也需要很多工作。但是,任何一种解决方案都比文件 I / O 更有效率。

作为一种简单的性能提升,您尝试使用 RAM 磁盘或 tmpfs 将文件保留在内存中了吗?

2016-08-10 15:46:53