pytorch

Форк
0
/
FindZVECTOR.cmake 
55 строк · 2.1 Кб
1

2
IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
3
  message("-- <FindZVECTOR>")
4
  set(Z_ARCH_LIST "")
5
  #firstly, tries to add the arch of the platform
6
  EXEC_PROGRAM(LD_SHOW_AUXV=1 ARGS "/bin/true" OUTPUT_VARIABLE bintrue)
7
  if(bintrue MATCHES "AT_PLATFORM:[ \\t\\n\\r]*([a-zA-Z0-9_]+)[ \\t\\n\\r]*")
8
    if(CMAKE_MATCH_COUNT GREATER 0)
9
      string(TOLOWER ${CMAKE_MATCH_1} platform)
10
      if(${platform} MATCHES "^z(14|15|16)")
11
        message("-- Z ARCH Platform: ${platform}")
12
        list( APPEND Z_ARCH_LIST  "${platform}" )
13
      endif()
14
    endif()
15
  endif()
16
  #adds other archs in descending order. as its cached nothing will be checked  twice
17
  list( APPEND Z_ARCH_LIST  "z16" )
18
  list( APPEND Z_ARCH_LIST  "z15" )
19
  list( APPEND Z_ARCH_LIST  "z14" )
20

21
  SET(VECTORIZATION_CODE  "
22
    #include <vecintrin.h>
23
    using vuint32  =  __attribute__ ((vector_size (16)))  unsigned  int;
24
    using vfloat32 =  __attribute__ ((vector_size (16)))  float;
25
    vfloat32 vsel_ext(vuint32 o, vfloat32 x, vfloat32 y)
26
    {
27
        return vec_sel(y, x, o);
28
    }
29
    int main(){
30
        vfloat32 h1 ={3.f, 4.f, 5.f, 6.f};
31
        vfloat32 h2 = {9.f, 8.f, 11.f, 12.f};
32
        vuint32  selector= {0xFFFFFFFF, 0, 0xFFFFFFFF, 0xFFFFFFFF};
33
        vfloat32 hf = vsel_ext(selector, h1,h2);
34
        int ret = (int)(hf[0]*1000+hf[1]*100+hf[2]*10+hf[3]);
35
        return ret==3856;
36
    }
37
   ")
38

39
  foreach(Z_ARCH  ${Z_ARCH_LIST})
40
    SET(ARCH_SIMD_TEST_FLAGS_${Z_ARCH} " -mvx -mzvector -march=${Z_ARCH} -mtune=${Z_ARCH}")
41
    message("-- check ${Z_ARCH}")
42
    SET(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS})
43
    SET(CMAKE_REQUIRED_FLAGS "${ARCH_SIMD_TEST_FLAGS_${Z_ARCH}}")
44
    set(VECTORIZATION_CODE_${Z_ARCH} "${VECTORIZATION_CODE}")
45
    CHECK_CXX_SOURCE_COMPILES("${VECTORIZATION_CODE_${Z_ARCH}}"  COMPILE_OUT_${Z_ARCH})
46
    SET(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE})
47
    if(COMPILE_OUT_${Z_ARCH})
48
      message("-- ${Z_ARCH} SIMD flags were set.")
49
      set(CXX_ZVECTOR_FOUND TRUE)
50
      SET(CXX_ZVECTOR_FLAGS  "${ARCH_SIMD_TEST_FLAGS_${Z_ARCH}}" )
51
      break()
52
    endif()
53
  endforeach()
54
  message("-- </FindZVECTOR>")
55

56
endif()
57

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.