-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathaligned-mem-pool.h
More file actions
71 lines (55 loc) · 1.26 KB
/
aligned-mem-pool.h
File metadata and controls
71 lines (55 loc) · 1.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#ifndef DYNET_ALIGNED_MEM_POOL_H
#define DYNET_ALIGNED_MEM_POOL_H
#include <iostream>
#include "dynet/mem.h"
#include "dynet/globals.h"
#include "dynet/except.h"
namespace dynet {
class InternalMemoryPool {
public:
explicit InternalMemoryPool(const std::string & name, size_t cap, MemAllocator* a) : name(name), a(a) {
sys_alloc(cap);
zero_all();
}
~InternalMemoryPool() {
a->free(mem);
}
void* allocate(size_t n);
void free() {
//std::cerr << "freeing " << used << " bytes\n";
used = 0;
}
// zeros out the amount of allocations
void zero_allocated_memory() {
if (used == 0) return;
a->zero(mem, used);
}
size_t used;
private:
void sys_alloc(size_t cap);
void zero_all() {
a->zero(mem, capacity);
}
std::string name;
size_t capacity;
MemAllocator* a;
void* mem;
};
class AlignedMemoryPool {
public:
explicit AlignedMemoryPool(const std::string &name, size_t cap, MemAllocator *a);
~AlignedMemoryPool();
void* allocate(size_t n);
void free();
void zero_allocated_memory();
size_t used();
void set_used(size_t s);
private:
std::string name;
std::vector<InternalMemoryPool *> pools;
int current;
size_t cap;
MemAllocator* a;
};
} // namespace dynet
#endif