EXSWCPHIPT-112 - Unit test for hipMalloc3DArray for default and surface arrays (#2713)

Этот коммит содержится в:
Finlay
2022-07-11 07:49:05 +01:00
коммит произвёл GitHub
родитель 25f2b260be
Коммит c0deb17bbc
4 изменённых файлов: 302 добавлений и 184 удалений
+45 -44
Просмотреть файл
@@ -30,10 +30,10 @@ hipArrayCreate API test scenarios
#include "hipArrayCommon.hh"
#include "DriverContext.hh"
static constexpr auto NUM_W{4};
static constexpr auto BIGNUM_W{100};
static constexpr auto NUM_H{4};
static constexpr auto BIGNUM_H{100};
static constexpr size_t NUM_W{4};
static constexpr size_t BIGNUM_W{100};
static constexpr size_t NUM_H{4};
static constexpr size_t BIGNUM_H{100};
static constexpr auto ARRAY_LOOP{100};
/*
@@ -51,31 +51,34 @@ static constexpr auto ARRAY_LOOP{100};
*/
static void ArrayCreate_DiffSizes(int gpu) {
HIP_CHECK(hipSetDevice(gpu));
std::vector<std::pair<size_t, size_t>> array_size{{NUM_W, NUM_H}, {BIGNUM_W, BIGNUM_H}};
for (auto& size : array_size) {
std::array<HIP_ARRAY, ARRAY_LOOP> array;
const size_t pavail = getFreeMem();
HIP_ARRAY_DESCRIPTOR desc;
desc.NumChannels = 1;
desc.Width = std::get<0>(size);
desc.Height = std::get<1>(size);
desc.Format = HIP_AD_FORMAT_FLOAT;
for (int i = 0; i < ARRAY_LOOP; i++) {
HIP_CHECK(hipArrayCreate(&array[i], &desc));
}
for (int i = 0; i < ARRAY_LOOP; i++) {
HIP_CHECK(hipArrayDestroy(array[i]));
}
const size_t avail = getFreeMem();
if (pavail != avail) {
HIPASSERT(false);
}
HIP_CHECK_THREAD(hipSetDevice(gpu));
std::pair<size_t, size_t> size =
GENERATE(std::make_pair(NUM_W, NUM_H), std::make_pair(BIGNUM_W, BIGNUM_H));
std::array<HIP_ARRAY, ARRAY_LOOP> array;
size_t pavail, avail;
HIP_CHECK_THREAD(hipMemGetInfo(&pavail, nullptr));
HIP_ARRAY_DESCRIPTOR desc;
desc.NumChannels = 1;
desc.Width = std::get<0>(size);
desc.Height = std::get<1>(size);
desc.Format = HIP_AD_FORMAT_FLOAT;
for (int i = 0; i < ARRAY_LOOP; i++) {
HIP_CHECK_THREAD(hipArrayCreate(&array[i], &desc));
}
for (int i = 0; i < ARRAY_LOOP; i++) {
HIP_CHECK_THREAD(hipArrayDestroy(array[i]));
}
HIP_CHECK_THREAD(hipMemGetInfo(&avail, nullptr));
REQUIRE_THREAD(pavail == avail);
}
/* This testcase verifies hipArrayCreate API for small and big chunks data*/
TEST_CASE("Unit_hipArrayCreate_DiffSizes") { ArrayCreate_DiffSizes(0); }
TEST_CASE("Unit_hipArrayCreate_DiffSizes") {
ArrayCreate_DiffSizes(0);
HIP_CHECK_THREAD_FINALIZE();
}
/*
This testcase verifies the hipArrayCreate API in multithreaded
@@ -90,13 +93,13 @@ TEST_CASE("Unit_hipArrayCreate_MultiThread") {
const size_t pavail = getFreeMem();
for (int i = 0; i < devCnt; i++) {
// FIXME: the HIP_CHECK and HIPASSERT are not threadsafe so this test is broken.
threadlist.push_back(std::thread(ArrayCreate_DiffSizes, i));
}
for (auto& t : threadlist) {
t.join();
}
HIP_CHECK_THREAD_FINALIZE();
const size_t avail = getFreeMem();
if (pavail != avail) {
@@ -282,28 +285,26 @@ TEMPLATE_TEST_CASE("Unit_hipArrayCreate_maxTexture", "", uint, int, int4, ushort
desc.Format = vec_info::format;
desc.NumChannels = vec_info::size;
int device;
HIP_CHECK(hipGetDevice(&device));
hipDeviceProp_t prop;
HIP_CHECK(hipGetDeviceProperties(&prop, device));
const Sizes sizes(hipArrayDefault);
const size_t s = 64;
hiparray array{};
SECTION("Happy") {
SECTION("1D - Max") {
desc.Width = prop.maxTexture1D;
desc.Width = sizes.max1D;
desc.Height = 0;
}
SECTION("2D - Max Width") {
desc.Width = prop.maxTexture2D[0];
desc.Height = 64;
desc.Width = sizes.max2D[0];
desc.Height = s;
}
SECTION("2D - Max Height") {
desc.Width = 64;
desc.Height = prop.maxTexture2D[1];
desc.Width = s;
desc.Height = sizes.max2D[1];
}
SECTION("2D - Max Width and Height") {
desc.Width = prop.maxTexture2D[0];
desc.Height = prop.maxTexture2D[1];
desc.Width = sizes.max2D[0];
desc.Height = sizes.max2D[1];
}
auto maxArrayCreateError = hipArrayCreate(&array, &desc);
// this can try to alloc many GB of memory, so out of memory is acceptable
@@ -314,20 +315,20 @@ TEMPLATE_TEST_CASE("Unit_hipArrayCreate_maxTexture", "", uint, int, int4, ushort
}
SECTION("Negative") {
SECTION("1D - More Than Max") {
desc.Width = prop.maxTexture1D + 1;
desc.Width = sizes.max1D + 1;
desc.Height = 0;
}
SECTION("2D - More Than Max Width") {
desc.Width = prop.maxTexture2D[0] + 1;
desc.Height = 64;
desc.Width = sizes.max2D[0] + 1;
desc.Height = s;
}
SECTION("2D - More Than Max Height") {
desc.Width = 64;
desc.Height = prop.maxTexture2D[1] + 1;
desc.Width = s;
desc.Height = sizes.max2D[1] + 1;
}
SECTION("2D - More Than Max Width and Height") {
desc.Width = prop.maxTexture2D[0] + 1;
desc.Height = prop.maxTexture2D[1] + 1;
desc.Width = sizes.max2D[0] + 1;
desc.Height = sizes.max2D[1] + 1;
}
HIP_CHECK_ERROR(hipArrayCreate(&array, &desc), hipErrorInvalidValue);
}