mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-27 06:26:08 +00:00

The patch contains a basic BumpAllocator for (AMD)GPUs to allow us to run more tests. The allocator implements `malloc`, both internally and externally, while we continue to default to the NVIDIA `malloc` when we target NVIDIA GPUs. Once we have smarter or customizable allocators we should consider this choice, for now, this allocator is better than none. It traps if it is out of memory, making it easy to debug. Heap size is configured via `LIBOMPTARGET_HEAP_SIZE` and defaults to 512MB. It allows to track allocation statistics via `LIBOMPTARGET_DEVICE_RTL_DEBUG=8` (together with `-fopenmp-target-debug=8`). Two tests were added, and one was enabled. This is the next step towards fixing https://github.com/llvm/llvm-project/issues/66708
45 lines
1.1 KiB
C++
45 lines
1.1 KiB
C++
//===-------- Allocator.h - OpenMP memory allocator interface ---- C++ -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef OMPTARGET_ALLOCATOR_H
|
|
#define OMPTARGET_ALLOCATOR_H
|
|
|
|
#include "Types.h"
|
|
|
|
// Forward declaration.
|
|
struct KernelEnvironmentTy;
|
|
|
|
#pragma omp begin declare target device_type(nohost)
|
|
|
|
namespace ompx {
|
|
|
|
namespace allocator {
|
|
|
|
static uint64_t constexpr ALIGNMENT = 16;
|
|
|
|
/// Initialize the allocator according to \p KernelEnvironment
|
|
void init(bool IsSPMD, KernelEnvironmentTy &KernelEnvironment);
|
|
|
|
/// Allocate \p Size bytes.
|
|
[[gnu::alloc_size(1), gnu::assume_aligned(ALIGNMENT), gnu::malloc]] void *
|
|
alloc(uint64_t Size);
|
|
|
|
/// Free the allocation pointed to by \p Ptr.
|
|
void free(void *Ptr);
|
|
|
|
} // namespace allocator
|
|
|
|
} // namespace ompx
|
|
|
|
#pragma omp end declare target
|
|
|
|
#endif
|