From ffa0a514081ac0cd815a11714a025aec1278ea97 Mon Sep 17 00:00:00 2001 From: Evgeny Date: Thu, 19 Mar 2020 01:27:06 -0500 Subject: [PATCH] adding mytest target Change-Id: Ia82b971597a4876d99c85d7dbbf997faea83f0c9 --- bin/build_kernel.sh | 37 ++++++++++++++++++++++++++++--------- cmake_modules/env.cmake | 24 +++++++++++++++++++++--- test/CMakeLists.txt | 9 ++++++--- test/ctrl/test_hsa.cpp | 9 +-------- 4 files changed, 56 insertions(+), 23 deletions(-) diff --git a/bin/build_kernel.sh b/bin/build_kernel.sh index 6c4afe6f46..e89cf5618d 100755 --- a/bin/build_kernel.sh +++ b/bin/build_kernel.sh @@ -1,7 +1,9 @@ -#!/bin/sh +#!/bin/sh -x TEST_NAME=$1 DST_DIR=$2 +ROCM_DIR=$3 +TGT_LIST=$4 if [ -z "$TEST_NAME" ] ; then echo "Usage: $0 " @@ -13,18 +15,35 @@ if [ -z "$DST_DIR" ] ; then DST_DIR=$(dirname TEST_NAME) fi -GFXIP=$(/opt/rocm/bin/rocminfo | grep "amdgcn-amd-amdhsa--" | head -n 1 | sed -n "s/^.*amdgcn-amd-amdhsa--\(\w*\).*$/\1/p") -if [ -z "$GFXIP" ] ; then - echo "GPU is not found" +if [ -z "$ROCM_DIR" ] ; then + ROCM_DIR=/opt/rocm +fi + +if [ -z "$TGT_LIST" ] ; then + TGT_LIST=$(/opt/rocm/bin/rocminfo | grep "amdgcn-amd-amdhsa--" | head -n 1 | sed -n "s/^.*amdgcn-amd-amdhsa--\(\w*\).*$/\1/p") +fi + +if [ -z "$TGT_LIST" ] ; then + echo "Error: GPU targets not found" exit 1 fi -OBJ_PREF=$(echo $GFXIP | head -c 4) -OBJ_NAME=$(echo "_$(basename $TEST_NAME)" | sed -e 's/_./\U&\E/g' -e 's/_//g') -OBJ_FILE=${OBJ_PREF}_${OBJ_NAME}.hsaco +OCL_VER="2.0" +OCL_DIR=$ROCM_DIR/opencl -/opt/rocm/opencl/bin/x86_64/clang -cl-std=CL2.0 -cl-std=CL2.0 -include /opt/rocm/opencl/include/opencl-c.h -Xclang -mlink-bitcode-file -Xclang /opt/rocm/opencl/lib/x86_64/bitcode/opencl.amdgcn.bc -Xclang -mlink-bitcode-file -Xclang /opt/rocm/opencl/lib/x86_64/bitcode/ockl.amdgcn.bc -target amdgcn-amd-amdhsa -mcpu=$GFXIP -mno-code-object-v3 $TEST_NAME.cl -o $OBJ_FILE +LLVM_DIR=$ROCM_DIR/hcc +CLANG=$LLVM_DIR/bin/clang +BITCODE_OPTS="\ + -Xclang -mlink-bitcode-file -Xclang $LLVM_DIR/lib/opencl.amdgcn.bc \ + -Xclang -mlink-bitcode-file -Xclang $LLVM_DIR/lib/ockl.amdgcn.bc \ + -Xclang -mlink-bitcode-file -Xclang $LLVM_DIR/lib/ocml.amdgcn.bc" -echo "'$OBJ_FILE' is generated for '$GFXIP'" +for GFXIP in $TGT_LIST ; do + OBJ_PREF=$GFXIP + OBJ_NAME=$(echo "_$(basename $TEST_NAME)" | sed -e 's/_./\U&\E/g' -e 's/_//g') + OBJ_FILE=${OBJ_PREF}_${OBJ_NAME}.hsaco + $CLANG -cl-std=CL$OCL_VER -include $OCL_DIR/include/opencl-c.h $BITCODE_OPTS -target amdgcn-amd-amdhsa -mcpu=$GFXIP -mno-code-object-v3 $TEST_NAME.cl -o $DST_DIR/$OBJ_FILE + echo "'$OBJ_FILE' is generated for '$GFXIP'" +done exit 0 diff --git a/cmake_modules/env.cmake b/cmake_modules/env.cmake index 44fb0cd0c8..d762b7429b 100644 --- a/cmake_modules/env.cmake +++ b/cmake_modules/env.cmake @@ -114,11 +114,12 @@ if ( "${HSA_RUNTIME_INC_PATH}" STREQUAL "" ) find_file ( HSA_RUNTIME_INC "hsa/hsa.h" ) endif() find_library ( HSA_RUNTIME_LIB "libhsa-runtime${NBIT}.so" ) -get_filename_component ( HSA_RUNTIME_INC_PATH ${HSA_RUNTIME_INC} DIRECTORY ) -get_filename_component ( HSA_RUNTIME_LIB_PATH ${HSA_RUNTIME_LIB} DIRECTORY ) +get_filename_component ( HSA_RUNTIME_INC_PATH "${HSA_RUNTIME_INC}" DIRECTORY ) +get_filename_component ( HSA_RUNTIME_LIB_PATH "${HSA_RUNTIME_LIB}" DIRECTORY ) find_library ( HSA_KMT_LIB "libhsakmt.so" ) -get_filename_component ( HSA_KMT_LIB_PATH ${HSA_KMT_LIB} DIRECTORY ) +get_filename_component ( HSA_KMT_LIB_PATH "${HSA_KMT_LIB}" DIRECTORY ) +get_filename_component ( ROCM_ROOT_DIR "${HSA_KMT_LIB_PATH}" DIRECTORY ) ## Basic Tool Chain Information message ( "----------------NBit: ${NBIT}" ) @@ -127,5 +128,22 @@ message ( "------------Compiler: ${CMAKE_CXX_COMPILER}" ) message ( "----Compiler-Version: ${CMAKE_CXX_COMPILER_VERSION}" ) message ( "-----HSA-Runtime-Inc: ${HSA_RUNTIME_INC_PATH}" ) message ( "-----HSA-Runtime-Lib: ${HSA_RUNTIME_LIB_PATH}" ) +message ( "----HSA_KMT_LIB_PATH: ${HSA_KMT_LIB_PATH}" ) +message ( "-------ROCM_ROOT_DIR: ${ROCM_ROOT_DIR}" ) message ( "-----------CXX-Flags: ${CMAKE_CXX_FLAGS}" ) message ( "---CMAKE_PREFIX_PATH: ${CMAKE_PREFIX_PATH}" ) +message ( "---------GPU_TARGETS: ${GPU_TARGETS}" ) + +## Check the ROCm pathes +if ( "${HSA_RUNTIME_INC_PATH}" STREQUAL "" ) + message ( FATAL_ERROR "HSA_RUNTIME_INC_PATH is not found." ) +endif () +if ( "${HSA_RUNTIME_LIB_PATH}" STREQUAL "" ) + message ( FATAL_ERROR "HSA_RUNTIME_LIB_PATH is not found." ) +endif () +if ( "${HSA_KMT_LIB_PATH}" STREQUAL "" ) + message ( FATAL_ERROR "HSA_KMT_LIB_PATH is not found." ) +endif () +if ( "${ROCM_ROOT_DIR}" STREQUAL "" ) + message ( FATAL_ERROR "ROCM_ROOT_DIR is not found." ) +endif () diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index fa6b275909..2ab6f0bc3e 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -61,12 +61,15 @@ set ( CTRL_SRC ## Dummy kernel set ( DUMMY_NAME dummy_kernel ) -execute_process ( COMMAND sh -xc "${TEST_DIR}/../bin/build_kernel.sh ${TEST_DIR}/${DUMMY_NAME}/${DUMMY_NAME} ${PROJECT_BINARY_DIR}" ) - ## Test kernel set ( TEST_NAME simple_convolution ) set ( KERN_SRC ${TEST_DIR}/${TEST_NAME}/${TEST_NAME}.cpp ) -execute_process ( COMMAND sh -xc "${TEST_DIR}/../bin/build_kernel.sh ${TEST_DIR}/${TEST_NAME}/${TEST_NAME} ${PROJECT_BINARY_DIR}" ) + +## Building test kernels +add_custom_target( mytest + COMMAND sh -xc "${TEST_DIR}/../bin/build_kernel.sh ${TEST_DIR}/${DUMMY_NAME}/${DUMMY_NAME} ${PROJECT_BINARY_DIR} '${ROCM_ROOT_DIR}' '${GPU_TARGETS}'" + COMMAND sh -xc "${TEST_DIR}/../bin/build_kernel.sh ${TEST_DIR}/${TEST_NAME}/${TEST_NAME} ${PROJECT_BINARY_DIR} '${ROCM_ROOT_DIR}' '${GPU_TARGETS}'" +) ## Building standalone test executable add_executable ( ${STEXE_NAME} ${STTST_SRC} ${UTIL_SRC} ${KERN_SRC} ) diff --git a/test/ctrl/test_hsa.cpp b/test/ctrl/test_hsa.cpp index 3cb5dee7e6..47f788cf93 100644 --- a/test/ctrl/test_hsa.cpp +++ b/test/ctrl/test_hsa.cpp @@ -82,14 +82,7 @@ bool TestHsa::Initialize(int /*arg_cnt*/, char** /*arg_list*/) { // Obtain the code object file name std::string agentName(agent_info_->name); - if (agentName.compare(0, 4, "gfx8") == 0) { - brig_path_obj_.append("gfx8"); - } else if (agentName.compare(0, 4, "gfx9") == 0) { - brig_path_obj_.append("gfx9"); - } else { - TEST_ASSERT(false); - return false; - } + brig_path_obj_.append(agentName); brig_path_obj_.append("_" + name_ + ".hsaco"); return true;