CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
157 lines
6.0 KiB
C++
157 lines
6.0 KiB
C++
/*
|
|
* Copyright (c) Advanced Micro Devices, Inc., or its affiliates.
|
|
*
|
|
* SPDX-License-Identifier: MIT
|
|
*/
|
|
|
|
#include <iostream>
|
|
#include <hip_test_common.hh>
|
|
#include <hip/hiprtc.h>
|
|
#include <vector>
|
|
#include <string>
|
|
|
|
|
|
/**
|
|
* @addtogroup hiprtcGetLoweredName hiprtcGetLoweredName
|
|
* @{
|
|
* @ingroup hiprtc
|
|
* `hiprtcResult hiprtcGetLoweredName(prog,
|
|
* kernel_name_vec[i].c_str(), // name expression
|
|
* &name // lowered name
|
|
* ));` -
|
|
* These test cases tests working hiprtcGetLoweredName() api
|
|
*/
|
|
|
|
static const char* const gpuProgram1 = R"(
|
|
template <int N, typename T>
|
|
__global__ void my_kernel(T* data) {
|
|
if (blockIdx.x != 0 || threadIdx.x != 0) return;
|
|
T data0 = data[0];
|
|
for( int i=0; i<N-1; ++i ) {
|
|
data[0] *= data0;
|
|
}
|
|
})";
|
|
|
|
static const char* const gpuProgram2 = R"(
|
|
template <int N, typename T, typename K>
|
|
__global__ void my_kernel(T* data, K* Arr) {
|
|
if (blockIdx.x != 0 || threadIdx.x != 0) return;
|
|
T data0 = data[0];
|
|
for( int i=0; i<N-1; ++i ) {
|
|
data[0] = data0 + Arr[i];
|
|
}
|
|
})";
|
|
|
|
static const char* const gpuProgram3 = R"(
|
|
template <int N>
|
|
__global__ void nontype_kernel() {}
|
|
)";
|
|
|
|
bool Test(int CaseNum, const char* GpuProgram) {
|
|
bool IfTestPassed = true;
|
|
// Create an instance of hiprtcProgram
|
|
hiprtcProgram prog;
|
|
|
|
HIPRTC_CHECK(hiprtcCreateProgram(&prog, // prog
|
|
GpuProgram, // buffer
|
|
"prog.cu", // name
|
|
0, // numHeaders
|
|
NULL, // headers
|
|
NULL)); // includeNames
|
|
|
|
// add all name expressions for kernels
|
|
std::vector<std::string> kernel_name_vec, kernelNameExpectdOutput;
|
|
if (CaseNum == 1) {
|
|
kernel_name_vec.push_back("my_kernel<(int)3, float >");
|
|
kernel_name_vec.push_back("my_kernel<(int)5, double >");
|
|
kernel_name_vec.push_back("my_kernel<(int)6, int >");
|
|
kernel_name_vec.push_back("my_kernel<(int)10, long >");
|
|
kernel_name_vec.push_back("my_kernel<(int)11, long long >");
|
|
kernel_name_vec.push_back("my_kernel<(int)123, unsigned int >");
|
|
kernel_name_vec.push_back("my_kernel<(int)1234, char >");
|
|
kernel_name_vec.push_back("my_kernel<(int)12345, unsigned char >");
|
|
|
|
kernelNameExpectdOutput.push_back("_Z9my_kernelILi3EfEvPT0_");
|
|
kernelNameExpectdOutput.push_back("_Z9my_kernelILi5EdEvPT0_");
|
|
kernelNameExpectdOutput.push_back("_Z9my_kernelILi6EiEvPT0_");
|
|
kernelNameExpectdOutput.push_back("_Z9my_kernelILi10ElEvPT0_");
|
|
kernelNameExpectdOutput.push_back("_Z9my_kernelILi11ExEvPT0_");
|
|
kernelNameExpectdOutput.push_back("_Z9my_kernelILi123EjEvPT0_");
|
|
kernelNameExpectdOutput.push_back("_Z9my_kernelILi1234EcEvPT0_");
|
|
kernelNameExpectdOutput.push_back("_Z9my_kernelILi12345EhEvPT0_");
|
|
} else if (CaseNum == 2) {
|
|
kernel_name_vec.push_back("my_kernel<(int)3, float, float >");
|
|
kernel_name_vec.push_back("my_kernel<(int)66, float, int >");
|
|
kernel_name_vec.push_back("my_kernel<(int)(4 + 6), long, double >");
|
|
kernel_name_vec.push_back("my_kernel<(int)5, double, double >");
|
|
kernel_name_vec.push_back("my_kernel<(int)6, int, int >");
|
|
kernel_name_vec.push_back("my_kernel<(int)10, long, long >");
|
|
kernel_name_vec.push_back("my_kernel<(int)11, long long, long long >");
|
|
kernel_name_vec.push_back("my_kernel<(int)123, unsigned int, unsigned int >"); // NOLINT
|
|
kernel_name_vec.push_back("my_kernel<(int)1234, char, char >");
|
|
kernel_name_vec.push_back("my_kernel<(int)12345, unsigned char, unsigned char >"); // NOLINT
|
|
|
|
kernelNameExpectdOutput.push_back("_Z9my_kernelILi3EffEvPT0_PT1_");
|
|
kernelNameExpectdOutput.push_back("_Z9my_kernelILi66EfiEvPT0_PT1_");
|
|
kernelNameExpectdOutput.push_back("_Z9my_kernelILi10EldEvPT0_PT1_");
|
|
kernelNameExpectdOutput.push_back("_Z9my_kernelILi5EddEvPT0_PT1_");
|
|
kernelNameExpectdOutput.push_back("_Z9my_kernelILi6EiiEvPT0_PT1_");
|
|
kernelNameExpectdOutput.push_back("_Z9my_kernelILi10EllEvPT0_PT1_");
|
|
kernelNameExpectdOutput.push_back("_Z9my_kernelILi11ExxEvPT0_PT1_");
|
|
kernelNameExpectdOutput.push_back("_Z9my_kernelILi123EjjEvPT0_PT1_");
|
|
kernelNameExpectdOutput.push_back("_Z9my_kernelILi1234EccEvPT0_PT1_");
|
|
kernelNameExpectdOutput.push_back("_Z9my_kernelILi12345EhhEvPT0_PT1_");
|
|
} else if (CaseNum == 3) {
|
|
kernel_name_vec.push_back("nontype_kernel<3>");
|
|
kernel_name_vec.push_back("nontype_kernel<(2 + 3)>");
|
|
kernel_name_vec.push_back("nontype_kernel<(-2 + 6)>");
|
|
|
|
kernelNameExpectdOutput.push_back("_Z14nontype_kernelILi3EEvv");
|
|
kernelNameExpectdOutput.push_back("_Z14nontype_kernelILi5EEvv");
|
|
kernelNameExpectdOutput.push_back("_Z14nontype_kernelILi4EEvv");
|
|
}
|
|
|
|
// add kernel name expressions to HIPRTC
|
|
for (size_t i = 0; i < kernel_name_vec.size(); ++i)
|
|
HIPRTC_CHECK(hiprtcAddNameExpression(prog, kernel_name_vec[i].c_str()));
|
|
|
|
hiprtcResult compileResult = hiprtcCompileProgram(prog, // prog
|
|
0, // numOptions
|
|
NULL); // options
|
|
// Obtain compilation log from the program.
|
|
size_t logSize;
|
|
HIPRTC_CHECK(hiprtcGetProgramLogSize(prog, &logSize));
|
|
|
|
if (logSize > 0) {
|
|
char* log = new char[logSize];
|
|
HIPRTC_CHECK(hiprtcGetProgramLog(prog, log));
|
|
INFO(log);
|
|
delete[] log;
|
|
REQUIRE(compileResult == HIPRTC_SUCCESS);
|
|
}
|
|
// Extract lowered names
|
|
for (size_t i = 0; i < kernel_name_vec.size(); ++i) {
|
|
const char* name;
|
|
HIPRTC_CHECK(hiprtcGetLoweredName(prog,
|
|
kernel_name_vec[i].c_str(), // name expression
|
|
&name)); // lowered name
|
|
if (name != kernelNameExpectdOutput[i]) {
|
|
IfTestPassed = false;
|
|
}
|
|
}
|
|
HIPRTC_CHECK(hiprtcDestroyProgram(&prog));
|
|
return IfTestPassed;
|
|
}
|
|
|
|
|
|
HIP_TEST_CASE(Unit_hiprtcGetLoweredName_templateKrnls) {
|
|
REQUIRE(Test(1, gpuProgram1));
|
|
REQUIRE(Test(2, gpuProgram2));
|
|
REQUIRE(Test(3, gpuProgram3));
|
|
}
|
|
|
|
/**
|
|
* End doxygen group hiprtc.
|
|
* @}
|
|
*/
|