compute-runtime/shared/test/unit_test/program/program_info_tests.cpp

65 lines
2.7 KiB
C++

/*
* Copyright (C) 2020 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "shared/source/program/program_info.h"
#include "opencl/source/program/kernel_info.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"
TEST(ProgramInfoTests, WhenPrepareLinkerInputStorageGetsCalledTwiceThenLinkerInputStorageIsReused) {
NEO::ProgramInfo programInfo;
EXPECT_EQ(nullptr, programInfo.linkerInput);
programInfo.prepareLinkerInputStorage();
EXPECT_NE(nullptr, programInfo.linkerInput);
auto prevLinkerInput = programInfo.linkerInput.get();
programInfo.prepareLinkerInputStorage();
EXPECT_EQ(prevLinkerInput, programInfo.linkerInput.get());
}
TEST(GetMaxInlineSlmNeeded, GivenProgramWithoutKernelsThenReturn0) {
NEO::ProgramInfo programInfo;
EXPECT_EQ(0U, NEO::getMaxInlineSlmNeeded(programInfo));
}
TEST(GetMaxInlineSlmNeeded, GivenProgramWithKernelsNotRequirignSlmThenReturn0) {
NEO::ProgramInfo programInfo;
programInfo.kernelInfos = {new NEO::KernelInfo(), new NEO::KernelInfo(), new NEO::KernelInfo()};
EXPECT_EQ(0U, NEO::getMaxInlineSlmNeeded(programInfo));
}
TEST(GetMaxInlineSlmNeeded, GivenProgramWithKernelsThenReturnMaxOfInlineSlmNeededByKernels) {
iOpenCL::SPatchAllocateLocalSurface slmTokens[3] = {};
slmTokens[0].TotalInlineLocalMemorySize = 16;
slmTokens[1].TotalInlineLocalMemorySize = 64;
slmTokens[2].TotalInlineLocalMemorySize = 32;
NEO::ProgramInfo programInfo;
programInfo.kernelInfos = {new NEO::KernelInfo(), new NEO::KernelInfo(), new NEO::KernelInfo()};
programInfo.kernelInfos[0]->patchInfo.localsurface = &slmTokens[0];
programInfo.kernelInfos[1]->patchInfo.localsurface = &slmTokens[1];
programInfo.kernelInfos[2]->patchInfo.localsurface = &slmTokens[2];
EXPECT_EQ(64U, NEO::getMaxInlineSlmNeeded(programInfo));
}
TEST(RequiresLocalMemoryWindowVA, GivenProgramWithoutKernelsThenReturnFalse) {
NEO::ProgramInfo programInfo;
EXPECT_FALSE(NEO::requiresLocalMemoryWindowVA(programInfo));
}
TEST(RequiresLocalMemoryWindowVA, GivenProgramWithKernelsNotLocalMemoryWindowVAThenReturnFalse) {
NEO::ProgramInfo programInfo;
programInfo.kernelInfos = {new NEO::KernelInfo(), new NEO::KernelInfo(), new NEO::KernelInfo()};
EXPECT_FALSE(NEO::requiresLocalMemoryWindowVA(programInfo));
}
TEST(RequiresLocalMemoryWindowVA, GivenProgramWithKernelsWhenSomeOfKernelRequireLocalMemoryWidnowVAThenReturnTrue) {
NEO::ProgramInfo programInfo;
programInfo.kernelInfos = {new NEO::KernelInfo(), new NEO::KernelInfo(), new NEO::KernelInfo()};
programInfo.kernelInfos[1]->workloadInfo.localMemoryStatelessWindowStartAddressOffset = 0U;
EXPECT_TRUE(NEO::requiresLocalMemoryWindowVA(programInfo));
}