在OCaml中管理GPU内存

时间:2014-02-11 18:55:10

标签: ocaml

我想知道是否可以为OCaml记录创建一个finalize方法?我正在创建一个GPU数据库,我正在使用OCaml构建DSL来查询和操作GPU数据,我需要一种方法来释放GPU内存,因为它们符合GC条件(不再引用)。

我已经创建了一个绑定到我的基于C的GPU api以允许malloc,free和操作GPU数据但我正在寻找解决方案来释放GPU内存,因为它不再被变量引用到顶层。

let bids = (**a 1-dim GPU array*) and asks = (**another 1-dim GPU array*) in
let spread = asks - bids 

在此示例中,我需要释放GPU内存以获取出价并请求向量驻留在GPU内存中。我想我需要写自己的语言?

2 个答案:

答案 0 :(得分:3)

您需要的可能是自定义块,因为您的数据不是纯粹的Caml:

http://caml.inria.fr/pub/docs/manual-ocaml-4.00/manual033.html

  

19.9高级主题:自定义块

     

带有标签Custom_tag的块包含任意用户数据和a   指向C结构的指针,类型为struct custom_operations,即   关联用户提供的最终确定,比较,散列,   序列化和反序列化功能到这个块。

您可以将C完成功能附加到自定义块。当块在OCaml世界中被GC时,它们被调用。

答案 1 :(得分:0)

您可以使用Gc.finalise执行此操作。使用GC终结(美国拼写)来控制事物是非常危险的(或者我读过)。例如,在程序退出时不调用终结函数。所以要小心: - )