SWDEV-387560 rocprofiler changes for CI test scripts

Change-Id: Ie727424eae47502395e0779614bd5e863ed9a197


[ROCm/rocprofiler commit: a56b32e4eb]
Этот коммит содержится в:
gobhardw
2023-04-05 14:38:11 +05:30
родитель b130d67bb8
Коммит 56437acbd1
6 изменённых файлов: 153 добавлений и 49 удалений
+5 -2
Просмотреть файл
@@ -8,7 +8,8 @@ int main(int argc, char** argv) {
testing::InitGoogleTest(&argc, argv);
testing::FLAGS_gtest_death_test_style = "threadsafe";
// Add line below to disable any problematic test
testing::GTEST_FLAG(filter) = "-OpenMPTest.*:ProfilerSPMTest*";
testing::GTEST_FLAG(filter) =
"-OpenMPTest.*:ProfilerSPMTest*:ProfilerMQTest*:ProfilerMPTest*:MPITest*";
// Disable ATT test fir gfx10 GPUs until its supported
hsa_init();
// iterate for gpu's
@@ -18,7 +19,9 @@ int main(int argc, char** argv) {
hsa_agent_get_info(agent, HSA_AGENT_INFO_NAME, gpu_name);
std::string gfx_name = gpu_name;
if (gfx_name.find("gfx10") != std::string::npos) {
testing::GTEST_FLAG(filter) = "-ATTCollection.*:OpenMPTest.*:-ProfilerSPMTest*";
testing::GTEST_FLAG(filter) =
"-ATTCollection.*:OpenMPTest.*:-ProfilerSPMTest*:ProfilerMQTest:*ProfilerMPTest*:"
"MPITest*";
}
return HSA_STATUS_SUCCESS;
},
+16 -2
Просмотреть файл
@@ -53,12 +53,14 @@ endforeach()
set_source_files_properties(apps/hello_world_hip.cpp PROPERTIES HIP_SOURCE_PROPERTY_FORMAT 1)
hip_add_executable(hip_helloworld apps/hello_world_hip.cpp)
set_target_properties(hip_helloworld PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/tests/featuretests/profiler/apps")
install(TARGETS hip_helloworld RUNTIME DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}/tests/featuretests/profiler/apps COMPONENT tests)
#hip_vectoradd
set_source_files_properties(apps/vector_add_hip.cpp PROPERTIES HIP_SOURCE_PROPERTY_FORMAT 1)
hip_add_executable(hip_vectoradd apps/vector_add_hip.cpp)
set_target_properties(hip_vectoradd PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/tests/featuretests/profiler/apps")
install(TARGETS hip_vectoradd RUNTIME DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}/tests/featuretests/profiler/apps COMPONENT tests)
#mpi_vectoradd
find_package(MPI)
@@ -67,6 +69,7 @@ include_directories(SYSTEM ${MPI_INCLUDE_PATH})
set_source_files_properties(apps/vector_add_mpi.cpp PROPERTIES HIP_SOURCE_PROPERTY_FORMAT 1)
hip_add_executable(mpi_vectoradd apps/vector_add_mpi.cpp)
set_target_properties(mpi_vectoradd PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/tests/featuretests/profiler/apps")
install(TARGETS mpi_vectoradd RUNTIME DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}/tests/featuretests/profiler/apps COMPONENT tests)
target_link_libraries(mpi_vectoradd ${MPI_C_LIBRARIES} stdc++fs)
endif()
@@ -88,6 +91,7 @@ endif()
set_source_files_properties(apps/async_mem_copy.cpp PROPERTIES HIP_SOURCE_PROPERTY_FORMAT 1)
hip_add_executable(hsa_async_mem_copy apps/async_mem_copy.cpp)
set_target_properties(hsa_async_mem_copy PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/tests/featuretests/profiler/apps")
install(TARGETS hsa_async_mem_copy RUNTIME DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}/tests/featuretests/profiler/apps COMPONENT tests)
target_link_libraries(hsa_async_mem_copy hsa-runtime64::hsa-runtime64 Threads::Threads dl stdc++fs)
@@ -111,6 +115,7 @@ hip_add_executable(multithreaded_testapp apps/multithreaded_testapp.cpp ../utils
target_include_directories(multithreaded_testapp PRIVATE ${PROJECT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/featuretests/profiler/apps)
target_link_libraries(multithreaded_testapp hsa-runtime64::hsa-runtime64 Threads::Threads dl stdc++fs amd_comgr)
set_target_properties(multithreaded_testapp PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/tests/featuretests/profiler/apps")
install(TARGETS multithreaded_testapp RUNTIME DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}/tests/featuretests/profiler/apps COMPONENT tests)
add_dependencies(tests multithreaded_testapp)
# Multi-Queue Dependency Test
@@ -132,6 +137,10 @@ set(GPU_LIST "gfx900" "gfx906" "gfx908" "gfx90a" "gfx1030")
foreach(target_id ${GPU_LIST})
## generate kernel bitcodes
generate_hsaco(${target_id} ${CMAKE_CURRENT_SOURCE_DIR}/apps/copy.cl ${target_id}_copy.hsaco)
# install(FILES "${PROJECT_BINARY_DIR}/tests/featuretests/profiler/${target_id}_copy.hsaco"
# DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}/tests"
# COMPONENT tests)
endforeach(target_id)
add_custom_target(hsaco_targets DEPENDS ${HSACO_TARGET_LIST})
@@ -142,7 +151,7 @@ add_custom_target(hsaco_targets DEPENDS ${HSACO_TARGET_LIST})
add_dependencies(multiqueue_testapp hsaco_targets)
add_dependencies(tests multiqueue_testapp )
set_target_properties(multiqueue_testapp PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/tests/featuretests/profiler/apps")
install(TARGETS multiqueue_testapp RUNTIME DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}/tests COMPONENT tests)
install(TARGETS multiqueue_testapp RUNTIME DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}/tests/featuretests/profiler/apps COMPONENT tests)
# add_executable(profiler_multiqueue_test discretetests/binary/multiqueue_test.cpp utils/csv_parser.cpp utils/test_utils.cpp)
# target_include_directories(profiler_multiqueue_test PRIVATE ${PROJECT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/tests/featuretests/profiler)
@@ -170,10 +179,15 @@ target_link_libraries(runFeatureTests PRIVATE ${ROCPROFILER_TARGET} ${ROCPROFIL
GTest::gtest GTest::gtest_main
Threads::Threads dl stdc++fs amd_comgr)
add_dependencies(tests runFeatureTests)
install(TARGETS runFeatureTests RUNTIME DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}/tests COMPONENT tests)
add_test(AllTests runFeatureTests)
# Copy scripts, input files to samples folder
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/apps/goldentraces/basic_metrics.txt ${PROJECT_BINARY_DIR}/tests/featuretests/profiler/apps COPYONLY)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/apps/goldentraces/input.txt ${PROJECT_BINARY_DIR}/tests/featuretests/profiler/apps COPYONLY)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/apps/mpi_run.sh ${PROJECT_BINARY_DIR}/tests/featuretests/profiler/apps/ COPYONLY)
install(
DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/apps/goldentraces/
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}/tests/featuretests/profiler/apps/goldentraces
COMPONENT tests)
+38 -3
Просмотреть файл
@@ -36,6 +36,10 @@ namespace fs = std::experimental::filesystem;
std::vector<hsa_agent_t> Device::all_devices;
std::string GetRunningPath(std::string string_to_erase);
static void init_test_path();
std::string test_app_path;
std::string hasco_path;
int main() {
hsa_status_t status;
@@ -48,11 +52,12 @@ int main() {
status = hsa_agent_get_info(gpu[0].agent, HSA_AGENT_INFO_NAME, agent_name);
ASSERT_EQ(status, HSA_STATUS_SUCCESS);
// set global test path for this test
init_test_path();
// Getting Current Path
std::string app_path = GetRunningPath("tests/featuretests/profiler/apps/multiqueue_testapp");
std::string app_path = GetRunningPath(test_app_path + "multiqueue_testapp");
// Getting hasco Path
std::string ko_path =
app_path + "tests/featuretests/profiler/" + std::string(agent_name) + "_copy.hsaco";
std::string ko_path = app_path + hasco_path + std::string(agent_name) + "_copy.hsaco";
MQDependencyTest::CodeObject code_object;
if (!obj.LoadCodeObject(ko_path, gpu[0].agent, code_object)) {
@@ -305,3 +310,33 @@ std::string GetRunningPath(std::string string_to_erase) {
}
return path;
}
bool is_installed_path() {
std::string path;
char* real_path;
Dl_info dl_info;
if (0 != dladdr(reinterpret_cast<void*>(main), &dl_info)) {
path = dl_info.dli_fname;
real_path = realpath(path.c_str(), NULL);
if (real_path == nullptr) {
throw(std::string("Error! in extracting real path"));
}
path.clear(); // reset path
path.append(real_path);
if (path.find("/opt") != std::string::npos) {
return true;
}
}
return false;
}
static void init_test_path() {
if (is_installed_path()) {
test_app_path = "share/rocprofiler/tests/featuretests/profiler/apps/";
hasco_path = "share/rocprofiler/tests/";
} else {
test_app_path = "tests/featuretests/profiler/apps/";
hasco_path = "tests/featuretests/profiler/";
}
}
+63 -37
Просмотреть файл
@@ -34,23 +34,53 @@ THE SOFTWARE.
#include "utils/test_utils.h"
#include "utils/csv_parser.h"
std::string running_path;
std::string lib_path;
std::string golden_trace_path;
std::string test_app_path;
std::string metrics_path;
std::string binary_path;
static void init_test_path() {
if (is_installed_path()) {
running_path = "share/rocprofiler/tests/runFeatureTests";
lib_path = "lib/librocprofiler_tool.so";
golden_trace_path = "share/rocprofiler/tests/featuretests/profiler/apps/goldentraces/";
test_app_path = "share/rocprofiler/tests/featuretests/profiler/apps/";
metrics_path = "lib/rocprofiler/gfx_metrics.xml";
binary_path = "bin/rocprofv2";
} else {
running_path = "tests/featuretests/profiler/runFeatureTests";
lib_path = "librocprofiler_tool.so";
golden_trace_path = "tests/featuretests/profiler/apps/goldentraces/";
test_app_path = "tests/featuretests/profiler/apps/";
metrics_path = "gfx_metrics.xml";
binary_path = "rocprofv2";
}
}
/**
* Sets application enviornment by seting HSA_TOOLS_LIB.
*/
void ApplicationParser::SetApplicationEnv(const char* app_name) {
std::string app_path = GetRunningPath("tests/featuretests/profiler/runFeatureTests");
std::string app_path;
// set global path
init_test_path();
app_path = GetRunningPath(running_path);
std::stringstream counter_path;
std::stringstream metrics_path;
counter_path << app_path << "tests/featuretests/profiler/apps/goldentraces/input.txt";
counter_path << app_path << golden_trace_path << "input.txt";
setenv("COUNTERS_PATH", counter_path.str().c_str(), true);
std::stringstream hsa_tools_lib_path;
hsa_tools_lib_path << app_path << "librocprofiler_tool.so";
hsa_tools_lib_path << app_path << lib_path;
setenv("LD_PRELOAD", hsa_tools_lib_path.str().c_str(), true);
std::stringstream os;
os << app_path << "tests/featuretests/profiler/apps/" << app_name;
os << app_path << test_app_path << app_name;
ProcessApplication(os);
}
@@ -111,9 +141,9 @@ void ApplicationParser::GetKernelInfoForRunningApplication(
void ApplicationParser::GetKernelInfoForGoldenOutput(const char* app_name, std::string file_name,
std::vector<KernelInfo>* kernel_info_output) {
std::string entry;
std::string path = GetRunningPath("runFeatureTests");
entry = path.append("apps/goldentraces/") + file_name;
// parse kernel info fields for golden output
std::string path = GetRunningPath(running_path);
entry = path.append(golden_trace_path) + file_name;
// parse kernel info fields for golden output
ParseKernelInfoFields(entry, kernel_info_output);
}
@@ -459,7 +489,7 @@ class MPITest : public ProfilerTest {
};
void MPITest::ProcessMPIApplication(const char* app_name) {
std::string app_path = GetRunningPath("tests/featuretests/profiler/runFeatureTests");
std::string app_path = GetRunningPath(running_path);
std::string lib_path = app_path;
std::stringstream hsa_tools_lib_path;
@@ -658,11 +688,6 @@ class ATTCollection : public ::testing::Test {
hipDeviceProp_t devProp;
hipGetDeviceProperties(&devProp, 0);
// std::cout << " System minor " << devProp.minor << std::endl;
// std::cout << " System major " << devProp.major << std::endl;
// std::cout << " agent prop name " << devProp.name << std::endl;
// std::cout << "hip Device prop succeeded " << std::endl;
int i;
int errors;
@@ -835,10 +860,14 @@ class ProfilerAPITest : public ::testing::Test {
};
TEST_F(ProfilerAPITest, WhenRunningMultipleThreadsProfilerAPIsWorkFine) {
std::string app_path = GetRunningPath("tests/featuretests/profiler/runFeatureTests");
std::stringstream metrics_path;
metrics_path << app_path << "gfx_metrics.xml";
setenv("ROCPROFILER_METRICS_PATH", metrics_path.str().c_str(), true);
// set global path
init_test_path();
std::string app_path = GetRunningPath(running_path);
std::stringstream gfx_path;
gfx_path << app_path << metrics_path;
setenv("ROCPROFILER_METRICS_PATH", gfx_path.str().c_str(), true);
// Get the system cores
int num_cpu_cores = GetNumberOfCores();
@@ -963,11 +992,6 @@ class ProfilerSPMTest : public ::testing::Test {
hipDeviceProp_t devProp;
hipGetDeviceProperties(&devProp, 0);
// std::cout << " System minor " << devProp.minor << std::endl;
// std::cout << " System major " << devProp.major << std::endl;
// std::cout << " agent prop name " << devProp.name << std::endl;
// std::cout << "hip Device prop succeeded " << std::endl;
int i;
int errors;
@@ -1100,7 +1124,7 @@ class MTBinaryTest : public ::testing::Test {
}
}
}
// clear entries
counter_map.clear();
@@ -1110,7 +1134,7 @@ class MTBinaryTest : public ::testing::Test {
return 0;
}
return 0; // Fix CSV parser, until return 0
return 0; // Fix CSV parser, until return 0
}
std::string ReadProfilerBuffer(const char* cmd) {
@@ -1129,11 +1153,12 @@ class MTBinaryTest : public ::testing::Test {
std::string InitCounterTest() {
std::string input_path;
std::string rocprofv2_path = GetRunningPath("tests/featuretests/profiler/runFeatureTests");
std::string app_path = GetRunningPath(running_path);
std::stringstream command;
input_path = rocprofv2_path + "tests/featuretests/profiler/apps/";
command << rocprofv2_path + "./rocprofv2 -i " << input_path + "basic_metrics.txt "
<< input_path + "multithreaded_testapp";
input_path = app_path + golden_trace_path;
command << app_path + binary_path + " -i " << input_path + "basic_metrics.txt "
<< app_path + test_app_path + "multithreaded_testapp";
std::string result = ReadProfilerBuffer(command.str().c_str());
return result;
}
@@ -1182,7 +1207,7 @@ class ProfilerMQTest : public ::testing::Test {
if (dispatch_counter == dispatch_count) {
return 0;
}
return 0; //Fix CSV parser, until return 0
return 0; // Fix CSV parser, until return 0
}
std::string ReadProfilerBuffer(const char* cmd) {
@@ -1200,20 +1225,21 @@ class ProfilerMQTest : public ::testing::Test {
}
std::string InitMultiQueueTest() {
std::string rocprofv2_path = GetRunningPath("tests/featuretests/profiler/runFeatureTests");
std::string app_path = GetRunningPath(running_path);
std::string input_path;
input_path = rocprofv2_path + "tests/featuretests/profiler/apps/";
input_path = app_path + "share/rocprofiler/tests/featuretests/profiler/apps/goldentraces/";
std::stringstream command;
command << rocprofv2_path + "./rocprofv2 -i " << input_path + "input.txt "
<< input_path + "multiqueue_testapp";
command << app_path + binary_path + " -i " << input_path + "basic_metrics.txt "
<< app_path + test_app_path + "multiqueue_testapp";
std::string result = ReadProfilerBuffer(command.str().c_str());
return result;
}
};
TEST_F(ProfilerMQTest, WhenRunningMultiProcessTestItPasses) {
TEST_F(ProfilerMQTest, DISBALED_WhenRunningMultiProcessTestItPasses) {
int test_status = -1;
std::string profiler_output;
@@ -1234,8 +1260,8 @@ TEST_F(ProfilerMQTest, WhenRunningMultiProcessTestItPasses) {
void KernelLaunch() {
// run empty kernel
//kernel<<<1, 1>>>(); //TODO: Check the hang
//hipDeviceSynchronize();
// kernel<<<1, 1>>>(); //TODO: Check the hang
// hipDeviceSynchronize();
}
TEST(ProfilerMPTest, WhenRunningMultiProcessTestItPasses) {
+28 -5
Просмотреть файл
@@ -28,10 +28,10 @@ namespace utility {
// This function returns the running path of executable
std::string GetRunningPath(std::string string_to_erase) {
std::string path;
char *real_path;
char* real_path;
Dl_info dl_info;
if (0 != dladdr(reinterpret_cast<void *>(main), &dl_info)) {
if (0 != dladdr(reinterpret_cast<void*>(main), &dl_info)) {
std::string to_erase = string_to_erase;
path = dl_info.dli_fname;
real_path = realpath(path.c_str(), NULL);
@@ -41,6 +41,9 @@ std::string GetRunningPath(std::string string_to_erase) {
path.clear(); // reset path
path.append(real_path);
//std::cout << path << std::endl;
size_t pos = path.find(to_erase);
if (pos != std::string::npos) path.erase(pos, to_erase.length());
} else {
@@ -53,12 +56,32 @@ std::string GetRunningPath(std::string string_to_erase) {
// available in system
int GetNumberOfCores() {
std::ifstream cpuinfo("/proc/cpuinfo");
const int num_cpu_cores = std::count(
std::istream_iterator<std::string>(cpuinfo),
std::istream_iterator<std::string>(), std::string("processor"));
const int num_cpu_cores =
std::count(std::istream_iterator<std::string>(cpuinfo), std::istream_iterator<std::string>(),
std::string("processor"));
return num_cpu_cores;
}
bool is_installed_path() {
std::string path;
char* real_path;
Dl_info dl_info;
if (0 != dladdr(reinterpret_cast<void*>(main), &dl_info)) {
path = dl_info.dli_fname;
real_path = realpath(path.c_str(), NULL);
if (real_path == nullptr) {
throw(std::string("Error! in extracting real path"));
}
path.clear(); // reset path
path.append(real_path);
if (path.find("/opt") != std::string::npos) {
return true;
}
}
return false;
}
} // namespace utility
} // namespace tests
} // namespace rocmtools
+3
Просмотреть файл
@@ -43,6 +43,8 @@ std::string GetRunningPath(std::string string_to_erase);
// Get Number of cores in the system
int GetNumberOfCores();
bool is_installed_path();
} // namespace utility
} // namespace tests
} // namespace rocmtools
@@ -53,5 +55,6 @@ int main(int argc, char** argv);
using rocmtools::tests::utility::GetNumberOfCores;
using rocmtools::tests::utility::GetRunningPath;
using rocmtools::tests::utility::is_installed_path;
#endif // TESTS_FEATURETESTS_PROFILER_UTILS_TEST_UTILS_H_