/* * Copyright (c) Advanced Micro Devices, Inc., or its affiliates. * * SPDX-License-Identifier: MIT */ #pragma once #include template void MaxPotentialBlockSize(F func, int maxThreadsPerBlock) { int gridSize = 0; int blockSize = 0; // Get potential blocksize HIP_CHECK(func(&gridSize, &blockSize)); // Check if blockSize doesn't exceed maxThreadsPerBlock REQUIRE(gridSize > 0); REQUIRE(blockSize > 0); REQUIRE(blockSize <= maxThreadsPerBlock); REQUIRE(gridSize * blockSize < static_cast(std::pow(2, 32))); } template void MaxPotentialBlockSizeNegative(F func) { int blockSize = 0; int gridSize = 0; // Validate common arguments SECTION("gridSize is nullptr") { HIP_CHECK_ERROR(func(nullptr, &blockSize), hipErrorInvalidValue); } SECTION("blockSize is nullptr") { HIP_CHECK_ERROR(func(&gridSize, nullptr), hipErrorInvalidValue); } } template void MaxActiveBlocksPerMultiprocessor(F func, int blockSize, int maxThreadsPerMultiProcessor) { int numBlocks = 0; // Validate maximum active block pre multiprocessor HIP_CHECK(func(&numBlocks)); // Check if numBlocks and blockSize are within limits REQUIRE(numBlocks > 0); REQUIRE((numBlocks * blockSize) <= maxThreadsPerMultiProcessor); } template void MaxActiveBlocksPerMultiprocessorNegative(F func, int blockSize) { int numBlocks = 0; // Validate common arguments SECTION("numBlocks is nullptr") { HIP_CHECK_ERROR(func(nullptr, blockSize, 0), hipErrorInvalidValue); } SECTION("Block size is 0") { HIP_CHECK_ERROR(func(&numBlocks, 0, 0), hipErrorInvalidValue); } }