aboutsummaryrefslogtreecommitdiff
path: root/arena.cu
diff options
context:
space:
mode:
authorKunoiSayami <[email protected]>2021-11-05 16:34:40 +0800
committerKunoiSayami <[email protected]>2021-11-05 16:34:40 +0800
commit01769e17e318deab2b9ffc2fc49464e50f865c15 (patch)
tree557b63d116989f151f058af912a21b47779d5d99 /arena.cu
parent5bf90aa4e7e5b6127352a494782346caf69386b7 (diff)
chore: Refactor struct
Signed-off-by: KunoiSayami <[email protected]>
Diffstat (limited to 'arena.cu')
-rw-r--r--arena.cu68
1 files changed, 0 insertions, 68 deletions
diff --git a/arena.cu b/arena.cu
deleted file mode 100644
index 1bb0f91..0000000
--- a/arena.cu
+++ /dev/null
@@ -1,68 +0,0 @@
-//
-// Created by user on 20/10/2021.
-//
-
-#include "arena.cuh"
-
-namespace cleveldb {
-
-static const int kBlockSize = 4096;
-Arena::Arena()
- : alloc_ptr_(nullptr), alloc_bytes_remaining_(0), memory_usage_(0) {}
-
-Arena::~Arena() {
- for (size_t i = 0; i < blocks_.size(); i++) {
- //delete[] blocks_[i];
- cudaFree(blocks_[i]);
- }
-}
-
-char* Arena::AllocateFallback(size_t bytes) {
- if (bytes > kBlockSize / 4) {
- // Object is more than a quarter of our block size. Allocate it separately
- // to avoid wasting too much space in leftover bytes.
- char* result = AllocateNewBlock(bytes);
- return result;
- }
-
- // We waste the remaining space in the current block.
- alloc_ptr_ = AllocateNewBlock(kBlockSize);
- alloc_bytes_remaining_ = kBlockSize;
-
- char* result = alloc_ptr_;
- alloc_ptr_ += bytes;
- alloc_bytes_remaining_ -= bytes;
- return result;
-}
-
-char* Arena::AllocateAligned(size_t bytes) {
- const int align = (sizeof(void*) > 8) ? sizeof(void*) : 8;
- static_assert((align & (align - 1)) == 0,
- "Pointer size should be a power of 2");
- size_t current_mod = reinterpret_cast<uintptr_t>(alloc_ptr_) & (align - 1);
- size_t slop = (current_mod == 0 ? 0 : align - current_mod);
- size_t needed = bytes + slop;
- char* result;
- if (needed <= alloc_bytes_remaining_) {
- result = alloc_ptr_ + slop;
- alloc_ptr_ += needed;
- alloc_bytes_remaining_ -= needed;
- } else {
- // AllocateFallback always returned aligned memory
- result = AllocateFallback(bytes);
- }
- assert((reinterpret_cast<uintptr_t>(result) & (align - 1)) == 0);
- return result;
-}
-
-char* Arena::AllocateNewBlock(size_t block_bytes) {
- //char* result = new char[block_bytes];
- char* result = nullptr;
- cudaMallocManaged((void **)&result, sizeof(char) * block_bytes);
- blocks_.push_back(result);
- memory_usage_.fetch_add(block_bytes + sizeof(char*),
- std::memory_order_relaxed);
- return result;
-}
-
-} // namespace cleveldb \ No newline at end of file