File: unified_memory_reuse.h

package info (click to toggle)
intel-compute-runtime 25.35.35096.9-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 79,324 kB
  • sloc: cpp: 926,243; lisp: 3,433; sh: 715; makefile: 162; python: 21
file content (52 lines) | stat: -rw-r--r-- 1,437 bytes parent folder | download
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
/*
 * Copyright (C) 2025 Intel Corporation
 *
 * SPDX-License-Identifier: MIT
 *
 */

#pragma once
#include <cstdint>
#include <mutex>

namespace NEO {
struct UsmReuseInfo {
    uint64_t getAllocationsSavedForReuseSize() const {
        return allocationsSavedForReuseSize;
    }

    uint64_t getMaxAllocationsSavedForReuseSize() const {
        return maxAllocationsSavedForReuseSize;
    }

    uint64_t getLimitAllocationsReuseThreshold() const {
        return limitAllocationsReuseThreshold;
    }

    std::unique_lock<std::mutex> obtainAllocationsReuseLock() const {
        return std::unique_lock<std::mutex>(allocationsReuseMtx);
    }

    void recordAllocationSaveForReuse(size_t size) {
        allocationsSavedForReuseSize += size;
    }

    void recordAllocationGetFromReuse(size_t size) {
        allocationsSavedForReuseSize -= size;
    }

    void init(uint64_t maxAllocationsSavedForReuseSize, uint64_t limitAllocationsReuseThreshold) {
        this->maxAllocationsSavedForReuseSize = maxAllocationsSavedForReuseSize;
        this->limitAllocationsReuseThreshold = limitAllocationsReuseThreshold;
    }

    static constexpr uint64_t notLimited = std::numeric_limits<uint64_t>::max();

  protected:
    uint64_t maxAllocationsSavedForReuseSize = 0u;
    uint64_t limitAllocationsReuseThreshold = 0u;
    uint64_t allocationsSavedForReuseSize = 0u;
    mutable std::mutex allocationsReuseMtx;
};

} // namespace NEO