Skip to content

Commit

Permalink
Merge pull request #507 from sonots/bp-480
Browse files Browse the repository at this point in the history
[backport] Fix multi thread problem in PooledMemory
  • Loading branch information
okuta authored Sep 20, 2017
2 parents a108a7a + f728b7b commit 12a542a
Showing 1 changed file with 34 additions and 29 deletions.
63 changes: 34 additions & 29 deletions cupy/cuda/memory.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -419,44 +419,49 @@ class PooledMemory(Memory):
self.size = chunk.size
self.pool = pool

def __del__(self):
if self.ptr != 0:
self.free()

def free(self):
"""Frees the memory buffer and returns it to the memory pool.
This function actually does not free the buffer. It just returns the
buffer to the memory pool for reuse.
"""
cdef Py_ssize_t ptr
ptr = self.ptr
if ptr == 0:
return
self.ptr = 0
pool = self.pool()
if pool and self.ptr != 0:
hooks = memory_hook.get_memory_hooks()
if hooks:
device_id = self.device.id
pmem_id = id(self)
size = self.size
ptr = self.ptr
hooks_values = hooks.values() # avoid six for performance
if pool is None:
return

hooks = None
# to avoid error at exit
mh = memory_hook
if mh is not None and mh.get_memory_hooks is not None:
hooks = mh.get_memory_hooks()
size = self.size
if hooks:
device_id = self.device.id
pmem_id = id(self)
hooks_values = hooks.values() # avoid six for performance
for hook in hooks_values:
hook.free_preprocess(device_id=device_id,
mem_size=size,
mem_ptr=ptr,
pmem_id=pmem_id)
try:
pool.free(ptr, size)
finally:
for hook in hooks_values:
hook.free_preprocess(device_id=device_id,
mem_size=size,
mem_ptr=ptr,
pmem_id=pmem_id)
try:
pool.free(ptr, size)
finally:
for hook in hooks_values:
hook.free_postprocess(device_id=device_id,
mem_size=size,
mem_ptr=ptr,
pmem_id=pmem_id)
else:
pool.free(self.ptr, self.size)
self.ptr = 0
self.size = 0
self.device = None
hook.free_postprocess(device_id=device_id,
mem_size=size,
mem_ptr=ptr,
pmem_id=pmem_id)
else:
pool.free(ptr, size)

__del__ = free


cdef class SingleDeviceMemoryPool:
Expand Down

0 comments on commit 12a542a

Please sign in to comment.