brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.7 KiB · f1f931e Raw
75 lines · cpp
1//===-- unittests/Runtime/CUDA/AllocatorCUF.cpp -----------------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "cuda_runtime.h"10#include "gtest/gtest.h"11#include "flang-rt/runtime/allocator-registry.h"12#include "flang-rt/runtime/descriptor.h"13#include "flang-rt/runtime/terminator.h"14#include "flang/Runtime/CUDA/allocator.h"15#include "flang/Runtime/CUDA/descriptor.h"16#include "flang/Runtime/allocatable.h"17#include "flang/Support/Fortran.h"18 19using namespace Fortran::runtime;20using namespace Fortran::runtime::cuda;21 22static OwningPtr<Descriptor> createAllocatable(23    Fortran::common::TypeCategory tc, int kind, int rank = 1) {24  return Descriptor::Create(TypeCode{tc, kind}, kind, nullptr, rank, nullptr,25      CFI_attribute_allocatable);26}27 28TEST(AllocatableCUFTest, SimpleDeviceAllocate) {29  using Fortran::common::TypeCategory;30  RTNAME(CUFRegisterAllocator)();31  // REAL(4), DEVICE, ALLOCATABLE :: a(:)32  auto a{createAllocatable(TypeCategory::Real, 4)};33  a->SetAllocIdx(kDeviceAllocatorPos);34  EXPECT_EQ((int)kDeviceAllocatorPos, a->GetAllocIdx());35  EXPECT_FALSE(a->HasAddendum());36  RTNAME(AllocatableSetBounds)(*a, 0, 1, 10);37  RTNAME(AllocatableAllocate)38  (*a, /*asyncObject=*/nullptr, /*hasStat=*/false, /*errMsg=*/nullptr, __FILE__,39      __LINE__);40  EXPECT_TRUE(a->IsAllocated());41  RTNAME(AllocatableDeallocate)42  (*a, /*hasStat=*/false, /*errMsg=*/nullptr, __FILE__, __LINE__);43  EXPECT_FALSE(a->IsAllocated());44}45 46TEST(AllocatableCUFTest, SimplePinnedAllocate) {47  using Fortran::common::TypeCategory;48  RTNAME(CUFRegisterAllocator)();49  // INTEGER(4), PINNED, ALLOCATABLE :: a(:)50  auto a{createAllocatable(TypeCategory::Integer, 4)};51  EXPECT_FALSE(a->HasAddendum());52  a->SetAllocIdx(kPinnedAllocatorPos);53  EXPECT_EQ((int)kPinnedAllocatorPos, a->GetAllocIdx());54  EXPECT_FALSE(a->HasAddendum());55  RTNAME(AllocatableSetBounds)(*a, 0, 1, 10);56  RTNAME(AllocatableAllocate)57  (*a, /*asyncObject=*/nullptr, /*hasStat=*/false, /*errMsg=*/nullptr, __FILE__,58      __LINE__);59  EXPECT_TRUE(a->IsAllocated());60  RTNAME(AllocatableDeallocate)61  (*a, /*hasStat=*/false, /*errMsg=*/nullptr, __FILE__, __LINE__);62  EXPECT_FALSE(a->IsAllocated());63}64 65TEST(AllocatableCUFTest, DescriptorAllocationTest) {66  using Fortran::common::TypeCategory;67  RTNAME(CUFRegisterAllocator)();68  // REAL(4), DEVICE, ALLOCATABLE :: a(:)69  auto a{createAllocatable(TypeCategory::Real, 4)};70  Descriptor *desc = nullptr;71  desc = RTNAME(CUFAllocDescriptor)(a->SizeInBytes());72  EXPECT_TRUE(desc != nullptr);73  RTNAME(CUFFreeDescriptor)(desc);74}75