11# Stream-orderdered memory allocator
22
3- export CuMemoryPool, trim
3+ export CuMemoryPool, default_memory_pool, memory_pool, memory_pool!, trim
44
55mutable struct CuMemoryPool
66 handle:: CUmemoryPool
77 ctx:: CuContext
8+ end
89
9- function CuMemoryPool (dev:: CuDevice )
10- props = Ref (CUmemPoolProps (
11- CU_MEM_ALLOCATION_TYPE_PINNED,
12- CU_MEM_HANDLE_TYPE_NONE,
13- CUmemLocation (
14- CU_MEM_LOCATION_TYPE_DEVICE,
15- deviceid (dev)
16- ),
17- C_NULL ,
18- ntuple (i-> Cuchar (0 ), 64 )
19- ))
20- handle_ref = Ref {CUmemoryPool} ()
21- cuMemPoolCreate (handle_ref, props)
22-
23- ctx = CuCurrentContext ()
24- obj = new (handle_ref[], ctx)
25- finalizer (unsafe_destroy!, obj)
26- return obj
27- end
10+ function CuMemoryPool (dev:: CuDevice )
11+ props = Ref (CUmemPoolProps (
12+ CU_MEM_ALLOCATION_TYPE_PINNED,
13+ CU_MEM_HANDLE_TYPE_NONE,
14+ CUmemLocation (
15+ CU_MEM_LOCATION_TYPE_DEVICE,
16+ deviceid (dev)
17+ ),
18+ C_NULL ,
19+ ntuple (i-> Cuchar (0 ), 64 )
20+ ))
21+ handle_ref = Ref {CUmemoryPool} ()
22+ cuMemPoolCreate (handle_ref, props)
23+
24+ ctx = CuCurrentContext ()
25+ obj = CuMemoryPool (handle_ref[], ctx)
26+ finalizer (unsafe_destroy!, obj)
27+ return obj
2828end
2929
3030function unsafe_destroy! (pool:: CuMemoryPool )
@@ -38,4 +38,22 @@ Base.unsafe_convert(::Type{CUmemoryPool}, pool::CuMemoryPool) = pool.handle
3838Base.:(== )(a:: CuMemoryPool , b:: CuMemoryPool ) = a. handle == b. handle
3939Base. hash (pool:: CuMemoryPool , h:: UInt ) = hash (pool. handle, h)
4040
41+ function default_memory_pool (dev:: CuDevice )
42+ handle_ref = Ref {CUmemoryPool} ()
43+ cuDeviceGetDefaultMemPool (handle_ref, dev)
44+
45+ ctx = CuCurrentContext ()
46+ CuMemoryPool (handle_ref[], ctx)
47+ end
48+
49+ function memory_pool (dev:: CuDevice )
50+ handle_ref = Ref {CUmemoryPool} ()
51+ cuDeviceGetMemPool (handle_ref, dev)
52+
53+ ctx = CuCurrentContext ()
54+ CuMemoryPool (handle_ref[], ctx)
55+ end
56+
57+ memory_pool! (dev:: CuDevice , pool:: CuMemoryPool ) = cuDeviceSetMemPool (dev, pool)
58+
4159trim (pool:: CuMemoryPool , bytes_to_keep:: Integer = 0 ) = cuMemPoolTrimTo (pool, bytes_to_keep)
0 commit comments