diff options
author | Ronan Collobert <ronan@collobert.com> | 2015-04-14 08:09:28 +0300 |
---|---|---|
committer | Ronan Collobert <ronan@collobert.com> | 2015-04-21 04:54:18 +0300 |
commit | 9665a4b99eed85ccfad1e03a581ff14428d6dace (patch) | |
tree | 23f2f0e068c3817227abb046456f2110b8d2b606 /sharedserialize.lua | |
parent | d223e9d60ed04f91016867065a5ef7575d337dce (diff) |
moved away from FFI
- removed the ffi dependency... now runs under lua!
- support for low-level thread
- support for basic mutex and condition variables from lua
- better error messaging
- better reliability
- more doc
- no more addjobasync()
- no sdl
Diffstat (limited to 'sharedserialize.lua')
-rw-r--r-- | sharedserialize.lua | 62 |
1 files changed, 8 insertions, 54 deletions
diff --git a/sharedserialize.lua b/sharedserialize.lua index f940f1a..9d2cfe3 100644 --- a/sharedserialize.lua +++ b/sharedserialize.lua @@ -1,47 +1,8 @@ -local ffi = require 'ffi' - require 'torch' -local status, tds = pcall(require, 'tds') - --- definitions for TH -local TH = ffi.load(package.searchpath('libtorch', package.cpath)) - -ffi.cdef[[ -void free(void *ptr); -void *malloc(size_t size); -THCharStorage* THCharStorage_newWithData(const char *data, long size); -void THCharStorage_clearFlag(THCharStorage *storage, const char flag); - -void THByteTensor_retain(THByteTensor *self); -void THCharTensor_retain(THCharTensor *self); -void THShortTensor_retain(THShortTensor *self); -void THIntTensor_retain(THIntTensor *self); -void THLongTensor_retain(THLongTensor *self); -void THFloatTensor_retain(THFloatTensor *self); -void THDoubleTensor_retain(THDoubleTensor *self); - -void THByteStorage_retain(THByteStorage *self); -void THCharStorage_retain(THCharStorage *self); -void THShortStorage_retain(THShortStorage *self); -void THIntStorage_retain(THIntStorage *self); -void THLongStorage_retain(THLongStorage *self); -void THFloatStorage_retain(THFloatStorage *self); -void THDoubleStorage_retain(THDoubleStorage *self); -]] - --- definitions for THC -local THC -if torch.CudaTensor then - THC = ffi.load(package.searchpath('libcutorch', package.cpath)) - ffi.cdef[[ -void THCudaTensor_retain(THCudaTensor *self); -void THCudaStorage_retain(THCudaStorage *self); -]] -end +local _, tds = pcall(require, 'tds') local serialize = {} - local typenames = {} -- check if typenames exists @@ -73,6 +34,7 @@ for _, typename in ipairs{ end if typenames.tds_hash then + local ffi = require 'ffi' local mt = typenames.tds_hash function mt.__factory(f) @@ -113,8 +75,6 @@ for _, typename in ipairs{ if typenames[typename] then local mt = typenames[typename] - local thname = typename:gsub('torch%.', 'TH') - local retain = thname:match('Cuda') and THC[thname .. '_retain'] or TH[thname .. '_retain'] function mt.__factory(f) local self = f:readLong() @@ -124,7 +84,7 @@ for _, typename in ipairs{ function mt.write(self, f) f:writeLong(torch.pointer(self)) - retain(self:cdata()) + self:retain() end function mt.read(self, f) @@ -156,22 +116,18 @@ function serialize.save(func) os.exit(-1) end - local status, code_p, sz = pcall( + local status, storage = pcall( function() local f = torch.MemoryFile() f:binary() f:writeObject(func) local storage = f:storage() - local code_p = storage:data() - local sz = storage:size() - -- refcounted, but do not free mem - TH.THCharStorage_clearFlag(storage:cdata(), 4) f:close() - return code_p, sz + return storage end ) if not status then - print(string.format('FATAL THREAD PANIC: (write) %s', code_p)) + print(string.format('FATAL THREAD PANIC: (write) %s', storage)) os.exit(-1) end @@ -181,10 +137,10 @@ function serialize.save(func) os.exit(-1) end - return code_p, sz + return storage end -function serialize.load(code_p, sz) +function serialize.load(storage) local status, msg = pcall(swapread) if not status then print(string.format('FATAL THREAD PANIC: (read) %s', msg)) @@ -193,8 +149,6 @@ function serialize.load(code_p, sz) local status, func = pcall( function() - local storage_p = TH.THCharStorage_newWithData(code_p, sz) - local storage = torch.pushudata(storage_p, 'torch.CharStorage') local f = torch.MemoryFile(storage) f:binary() local func = f:readObject() |