diff --git a/projects/rocprofiler/tests/featuretests/gtests_main.cpp b/projects/rocprofiler/tests/featuretests/gtests_main.cpp index 646fb1142e..d36e22a9c5 100644 --- a/projects/rocprofiler/tests/featuretests/gtests_main.cpp +++ b/projects/rocprofiler/tests/featuretests/gtests_main.cpp @@ -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; }, diff --git a/projects/rocprofiler/tests/featuretests/profiler/CMakeLists.txt b/projects/rocprofiler/tests/featuretests/profiler/CMakeLists.txt index c6e7c0ecec..9730eb7c65 100644 --- a/projects/rocprofiler/tests/featuretests/profiler/CMakeLists.txt +++ b/projects/rocprofiler/tests/featuretests/profiler/CMakeLists.txt @@ -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) diff --git a/projects/rocprofiler/tests/featuretests/profiler/apps/multiqueue_testapp.cpp b/projects/rocprofiler/tests/featuretests/profiler/apps/multiqueue_testapp.cpp index 4c95bfc416..53b7e3e197 100644 --- a/projects/rocprofiler/tests/featuretests/profiler/apps/multiqueue_testapp.cpp +++ b/projects/rocprofiler/tests/featuretests/profiler/apps/multiqueue_testapp.cpp @@ -36,6 +36,10 @@ namespace fs = std::experimental::filesystem; std::vector 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(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/"; + } +} diff --git a/projects/rocprofiler/tests/featuretests/profiler/profiler_gtest.cpp b/projects/rocprofiler/tests/featuretests/profiler/profiler_gtest.cpp index 7f942359c6..ee91aee107 100644 --- a/projects/rocprofiler/tests/featuretests/profiler/profiler_gtest.cpp +++ b/projects/rocprofiler/tests/featuretests/profiler/profiler_gtest.cpp @@ -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* 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) { diff --git a/projects/rocprofiler/tests/featuretests/utils/test_utils.cpp b/projects/rocprofiler/tests/featuretests/utils/test_utils.cpp index 1057bb6a19..912ea9cb2e 100644 --- a/projects/rocprofiler/tests/featuretests/utils/test_utils.cpp +++ b/projects/rocprofiler/tests/featuretests/utils/test_utils.cpp @@ -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(main), &dl_info)) { + if (0 != dladdr(reinterpret_cast(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(cpuinfo), - std::istream_iterator(), std::string("processor")); + const int num_cpu_cores = + std::count(std::istream_iterator(cpuinfo), std::istream_iterator(), + 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(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 diff --git a/projects/rocprofiler/tests/featuretests/utils/test_utils.h b/projects/rocprofiler/tests/featuretests/utils/test_utils.h index 2388d93776..27c1ef4b35 100644 --- a/projects/rocprofiler/tests/featuretests/utils/test_utils.h +++ b/projects/rocprofiler/tests/featuretests/utils/test_utils.h @@ -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_