| 56 | |
| 57 | template<typename T> |
| 58 | unique_ptr<cl::Buffer, function<void(cl::Buffer *)>> memAlloc( |
| 59 | const size_t &elements) { |
| 60 | // TODO: make memAlloc aware of array shapes |
| 61 | if (elements) { |
| 62 | dim4 dims(elements); |
| 63 | void *ptr = memoryManager().alloc(false, 1, dims.get(), sizeof(T)); |
| 64 | auto buf = static_cast<cl_mem>(ptr); |
| 65 | cl::Buffer *bptr = new cl::Buffer(buf, true); |
| 66 | return unique_ptr<cl::Buffer, function<void(cl::Buffer *)>>(bptr, |
| 67 | bufferFree); |
| 68 | } else { |
| 69 | return unique_ptr<cl::Buffer, function<void(cl::Buffer *)>>(nullptr, |
| 70 | bufferFree); |
| 71 | } |
| 72 | } |
| 73 | |
| 74 | void *memAllocUser(const size_t &bytes) { |
| 75 | dim4 dims(bytes); |