2014-02-11 1 views
3

Мне интересно, можно ли создать метод finalize для записей OCaml? Я создаю базу данных GPU, и я использую OCaml для создания DSL для запроса и обработки данных GPU, и мне нужен способ освободить память GPU, когда они имеют право на GC (больше не упоминаются).Управление памятью GPU в OCaml

У меня есть привязка к моему графическому процессору на основе C, чтобы разрешить malloc, бесплатно и манипулировать данными GPU, но я рассматриваю решения для бесплатной памяти графического процессора, когда на этом уровне больше не ссылаются переменные.

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

В этом примере, я должен был бы освободить память GPU для заявок и спрашивает вектор находится в памяти GPU. Думаю, мне нужно написать собственный язык?

ответ

3

Что вам нужно, это, вероятно, пользовательские блоки, так как ваши данные не чисто Caml:

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

19,9 Advanced Тема: пользовательские блоки

блоков с тегом Custom_tag содержит как произвольные пользовательские данные, так и указатель для структуры C с типом struct custom_operations, который связывает предоставленную пользователем завершение, сравнение, хеширование, serializatio n и десериализации для этого блока.

Вы можете прикрепить свои функции завершения C к пользовательским блокам. Они вызывается, когда блок GCed в мире OCaml.

0

Чтобы сделать это, вы можете использовать Gc.finalise. Использование GC-финализации (американское правописание) для контроля над вещами довольно опасно (или так я читал). Например, функции завершения не вызывается при выходе программы. Так что будьте осторожны :-)

Смежные вопросы