If olMemAlloc happens to allocate memory that was already allocated elsewhere (possibly by another device on another platform), it is now thrown away and a new allocation generated. A new `AllocBases` vector is now available, which is an ordered list of allocation start addresses.
67 lines
1.9 KiB
C++
67 lines
1.9 KiB
C++
//===------- Offload API tests - olMemAlloc -------------------------------===//
|
|
//
|
|
// 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "../common/Fixtures.hpp"
|
|
#include <OffloadAPI.h>
|
|
#include <gtest/gtest.h>
|
|
|
|
using olMemAllocTest = OffloadDeviceTest;
|
|
OFFLOAD_TESTS_INSTANTIATE_DEVICE_FIXTURE(olMemAllocTest);
|
|
|
|
TEST_P(olMemAllocTest, SuccessAllocManaged) {
|
|
void *Alloc = nullptr;
|
|
ASSERT_SUCCESS(olMemAlloc(Device, OL_ALLOC_TYPE_MANAGED, 1024, &Alloc));
|
|
ASSERT_NE(Alloc, nullptr);
|
|
olMemFree(Alloc);
|
|
}
|
|
|
|
TEST_P(olMemAllocTest, SuccessAllocHost) {
|
|
void *Alloc = nullptr;
|
|
ASSERT_SUCCESS(olMemAlloc(Device, OL_ALLOC_TYPE_HOST, 1024, &Alloc));
|
|
ASSERT_NE(Alloc, nullptr);
|
|
olMemFree(Alloc);
|
|
}
|
|
|
|
TEST_P(olMemAllocTest, SuccessAllocDevice) {
|
|
void *Alloc = nullptr;
|
|
ASSERT_SUCCESS(olMemAlloc(Device, OL_ALLOC_TYPE_DEVICE, 1024, &Alloc));
|
|
ASSERT_NE(Alloc, nullptr);
|
|
olMemFree(Alloc);
|
|
}
|
|
|
|
TEST_P(olMemAllocTest, SuccessAllocMany) {
|
|
std::vector<void *> Allocs;
|
|
Allocs.reserve(1000);
|
|
|
|
constexpr ol_alloc_type_t TYPES[3] = {
|
|
OL_ALLOC_TYPE_DEVICE, OL_ALLOC_TYPE_MANAGED, OL_ALLOC_TYPE_HOST};
|
|
|
|
for (size_t I = 1; I < 1000; I++) {
|
|
void *Alloc = nullptr;
|
|
ASSERT_SUCCESS(olMemAlloc(Device, TYPES[I % 3], 1024 * I, &Alloc));
|
|
ASSERT_NE(Alloc, nullptr);
|
|
|
|
Allocs.push_back(Alloc);
|
|
}
|
|
|
|
for (auto *A : Allocs) {
|
|
olMemFree(A);
|
|
}
|
|
}
|
|
|
|
TEST_P(olMemAllocTest, InvalidNullDevice) {
|
|
void *Alloc = nullptr;
|
|
ASSERT_ERROR(OL_ERRC_INVALID_NULL_HANDLE,
|
|
olMemAlloc(nullptr, OL_ALLOC_TYPE_DEVICE, 1024, &Alloc));
|
|
}
|
|
|
|
TEST_P(olMemAllocTest, InvalidNullOutPtr) {
|
|
ASSERT_ERROR(OL_ERRC_INVALID_NULL_POINTER,
|
|
olMemAlloc(Device, OL_ALLOC_TYPE_DEVICE, 1024, nullptr));
|
|
}
|