[PATCH] D70065: [test-suite] Add sollve_vv external project.

Michael Kruse via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sun Nov 10 22:20:51 PST 2019


Meinersbur created this revision.
Meinersbur added reviewers: jdoerfert, MatzeB, homerdin, josemonsalve2, ddcc.
Herald added a subscriber: mgorny.
Herald added a project: LLVM.

sollve_vv <https://crpl.cis.udel.edu/ompvvsollve/> is the OpenMP Validation & Verification suite to test conformance to with the OpenMP specification.

It is included as an external benchmark, i.e. some work is required before it is enabled, for instance setting `TEST_SUITE_SOLLVEVV_ROOT` to the downloaded source repository. OpenMP is detected using CMake's `find_package(OpenMP)`.

Unfortunately, it does not detect additional flags required for offloading which have to be set manually. The current defaults are the ones I used to successfully offload to NVidia's V100 GPU with clang. I am open to discuss what the default should be or whether we should have a compiler/platform introspection. sollve_vv's own makefile use a default set of flags per compiler executable name.


Repository:
  rT test-suite

https://reviews.llvm.org/D70065

Files:
  CMakeLists.txt
  External/CMakeLists.txt
  External/sollve_vv/CMakeLists.txt


Index: External/sollve_vv/CMakeLists.txt
===================================================================
--- /dev/null
+++ External/sollve_vv/CMakeLists.txt
@@ -0,0 +1,67 @@
+# SOLLVE OpenMP Offloading Validation & Verification Suite
+# https://crpl.cis.udel.edu/ompvvsollve/
+
+set(TEST_SUITE_SOLLVEVV_OFFLOADING_CFLAGS "-fopenmp-targets=nvptx64-nvidia-cuda;-Xopenmp-target;-march=sm_70" CACHE STRING "Compiler arguments for OpenMP offloading")
+set(TEST_SUITE_SOLLVEVV_OFFLOADING_LDFLAGS "-fopenmp-targets=nvptx64-nvidia-cuda;-Xopenmp-target;-march=sm_70;-lopenmptarget" CACHE STRING "Linker arguments for OpenMP offloading")
+
+function (add_sollvevv LANG)
+  set(_includedir "${TEST_SUITE_SOLLVEVV_ROOT}/ompvv" )
+  
+  if (NOT OPENMP_${LANG}_FOUND) 
+    message(FATAL_ERROR "OpenMP for ${LANG} not found")
+    return ()
+  endif ()
+  
+  #if (OpenMP_${LANG}_VERSION VERSION_LESS "4.5")
+  #  message(FATAL_ERROR "OpenMP version ${OpenMP_${LANG}_VERSION} too old")
+  #endif ()
+  
+  if ("${LANG}" STREQUAL "C")
+    set(_langext ".c")
+  elseif ("${LANG}" STREQUAL "CXX")
+    set(_langext ".cpp")
+  else ()
+    message(FATAL_ERROR "Unsupported languge ${LANG}")
+  endif ()
+  
+  file(GLOB_RECURSE _tests_sources RELATIVE "${TEST_SUITE_SOLLVEVV_ROOT}/tests" "${TEST_SUITE_SOLLVEVV_ROOT}/tests/*${_langext}" )
+  foreach (_file IN LISTS _tests_sources)
+    get_filename_component(_ext "${_file}" EXT)
+    get_filename_component(_basename "${_file}" NAME_WE)
+    get_filename_component(_directory "${_file}" DIRECTORY)
+    string(REPLACE "." "" _ext "${_ext}")
+    string(REPLACE "/" "_" _directory "${_directory}")
+    string(REPLACE "." "" _directory "${_directory}")
+    set(_name "omptargetvv-${_basename}-${_directory}-${_ext}")
+
+    llvm_test_run()
+    
+    llvm_test_executable(${_name} "${TEST_SUITE_SOLLVEVV_ROOT}/tests/${_file}")
+    target_include_directories(${_name} PRIVATE "${_includedir}")
+    target_link_libraries(${_name} PUBLIC OpenMP::OpenMP_${_lang})
+
+    # Add -fopenmp to linker command line; for some reason this is not done by target_link_libraries.
+    target_link_options(${_name} PRIVATE ${OpenMP_${LANG}_FLAGS})
+
+    # CMake's find_package(OpenMP) currently does not not introspect flags necessary for offloading.
+    target_compile_options(${_name} PUBLIC ${TEST_SUITE_SOLLVEVV_OFFLOADING_CFLAGS})
+    target_link_options(${_name} PUBLIC ${TEST_SUITE_SOLLVEVV_OFFLOADING_LDFLAGS})
+  endforeach ()
+endfunction ()
+
+
+llvm_externals_find(TEST_SUITE_SOLLVEVV_ROOT "sollve_vv" "OpenMP Offloading Validation & Verification Suite")
+if (TEST_SUITE_SOLLVEVV_ROOT)
+  if (OPENMP_FOUND)
+    message(STATUS "Adding OpenMP Offloading Validiation & Verification")
+  else ()
+    message(STATUS "NOT using OpenMP Validiation & Verification because OpenMP was not found")
+    return ()
+  endif ()
+  
+  foreach (_lang in C CXX) 
+    if (CMAKE_${_lang}_COMPILER)
+      add_sollvevv(${_lang})
+    endif()
+  endforeach ()
+endif ()
Index: External/CMakeLists.txt
===================================================================
--- External/CMakeLists.txt
+++ External/CMakeLists.txt
@@ -4,3 +4,4 @@
 add_subdirectory(Povray)
 add_subdirectory(SPEC)
 add_subdirectory(skidmarks10)
+add_subdirectory(sollve_vv)
Index: CMakeLists.txt
===================================================================
--- CMakeLists.txt
+++ CMakeLists.txt
@@ -188,6 +188,7 @@
 include(TestSuite)
 include(SingleMultiSource)
 find_package(TCL)
+find_package(OpenMP)
 
 if(NOT DEFINED TARGET_OS)
   message(STATUS "Check target operating system - ${CMAKE_SYSTEM_NAME}")


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D70065.228632.patch
Type: text/x-patch
Size: 3614 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20191111/a2d227b5/attachment-0001.bin>


More information about the llvm-commits mailing list