Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
C
compass-github-pull
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Requirements
Requirements
List
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Operations
Operations
Environments
Packages & Registries
Packages & Registries
Package Registry
Container Registry
Analytics
Analytics
CI / CD
Insights
Issue
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Jobs
Commits
Open sidebar
steinbac
compass-github-pull
Commits
58768a49
Commit
58768a49
authored
Apr 30, 2018
by
steinbac
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added VC based detection of hardware
parent
2e289b88
Changes
4
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
623 additions
and
111 deletions
+623
-111
.gitignore
.gitignore
+7
-1
cmake/FindCPU_FEATURES.cmake
cmake/FindCPU_FEATURES.cmake
+53
-6
cmake/FindSSE.cmake
cmake/FindSSE.cmake
+0
-104
cmake/OptimizeForArchitecture.cmake
cmake/OptimizeForArchitecture.cmake
+563
-0
No files found.
.gitignore
View file @
58768a49
*~
*~
build
build/*
debug/*
*sln
*.vcxproj*
x64
x32
cmake
\ No newline at end of file
cmake/FindCPU_FEATURES.cmake
View file @
58768a49
...
@@ -226,6 +226,9 @@ ELSEIF(CMAKE_SYSTEM_NAME MATCHES "Darwin")
...
@@ -226,6 +226,9 @@ ELSEIF(CMAKE_SYSTEM_NAME MATCHES "Darwin")
ELSEIF
(
CMAKE_SYSTEM_NAME MATCHES
"Windows"
)
ELSEIF
(
CMAKE_SYSTEM_NAME MATCHES
"Windows"
)
#as an alternative to wmic, use
#get_filename_component(_vendor_id "[HKEY_LOCAL_MACHINE\\Hardware\\Description\\System\\CentralProcessor\\0;VendorIdentifier]" NAME CACHE)
#get_filename_component(_cpu_id "[HKEY_LOCAL_MACHINE\\Hardware\\Description\\System\\CentralProcessor\\0;Identifier]" NAME CACHE)
wmic_get
(
"Name"
MODEL_NAME
)
wmic_get
(
"Name"
MODEL_NAME
)
string
(
STRIP
${
MODEL_NAME
}
MODEL_NAME
)
string
(
STRIP
${
MODEL_NAME
}
MODEL_NAME
)
...
@@ -235,9 +238,57 @@ ELSEIF(CMAKE_SYSTEM_NAME MATCHES "Windows")
...
@@ -235,9 +238,57 @@ ELSEIF(CMAKE_SYSTEM_NAME MATCHES "Windows")
set
(
CPU_VENDOR
"
${
MODEL_VENDOR
}
"
CACHE STRING
"cpu model vendor"
)
set
(
CPU_VENDOR
"
${
MODEL_VENDOR
}
"
CACHE STRING
"cpu model vendor"
)
wmic_get
(
"L2CacheSize"
L2_CACHE_SIZE
)
wmic_get
(
"L2CacheSize"
L2_CACHE_SIZE
)
wmic_get
(
"NumberOfCores"
CPU_NPHYS_CORES
)
#dirty hack that I need to validate with other machines in Win7
if
(
${
CPU_NPHYS_CORES
}
GREATER 1
)
math
(
EXPR L2_CACHE_SIZE
"
${
L2_CACHE_SIZE
}
/
${
CPU_NPHYS_CORES
}
"
)
endif
()
set
(
CPU_L2_SIZE_KB
"
${
L2_CACHE_SIZE
}
"
CACHE STRING
"cpu L2 cache size in kB"
)
set
(
CPU_L2_SIZE_KB
"
${
L2_CACHE_SIZE
}
"
CACHE STRING
"cpu L2 cache size in kB"
)
set
(
SSE_FOUND false CACHE BOOL
"SSE available on host"
)
#thanks to the wonderful VC project (https://github.com/VcDevel/Vc)
include
(
OptimizeForArchitecture
)
OFA_AutodetectHostArchitecture
()
OFA_HandleX86Options
()
message
(
"++ _available_vector_units_list =
${
_available_vector_units_list
}
"
)
list
(
FIND _available_vector_units_list
"sse"
SSE_INDEX
)
list
(
FIND _available_vector_units_list
"sse2"
SSE2_INDEX
)
list
(
FIND _available_vector_units_list
"sse3"
SSE3_INDEX
)
list
(
FIND _available_vector_units_list
"ssse3"
SSSE3_INDEX
)
list
(
FIND _available_vector_units_list
"sse4.1"
SSE4_1_INDEX
)
list
(
FIND _available_vector_units_list
"sse4.2"
SSE4_2_INDEX
)
list
(
FIND _available_vector_units_list
"avx"
AVX_INDEX
)
list
(
FIND _available_vector_units_list
"avx2"
AVX2_INDEX
)
if
(
${
SSE_INDEX
}
GREATER -1
)
set
(
SSE_FOUND true CACHE BOOL
"SSE available on host"
)
endif
()
if
(
${
SSE2_INDEX
}
GREATER -1
)
set
(
SSE2_FOUND true CACHE BOOL
"SSE2 available on host"
)
endif
()
if
(
${
SSE3_INDEX
}
GREATER -1
)
set
(
SSE3_FOUND true CACHE BOOL
"SSE3 available on host"
)
endif
()
if
(
${
SSSE3_INDEX
}
GREATER -1
)
set
(
SSSE3_FOUND true CACHE BOOL
"SSSE3 available on host"
)
endif
()
if
(
${
SSE4_1_INDEX
}
GREATER -1
)
set
(
SSE4_1_FOUND true CACHE BOOL
"SSE4.1 available on host"
)
endif
()
if
(
${
SSE4_2_INDEX
}
GREATER -1
)
set
(
SSE4_2_FOUND true CACHE BOOL
"SSE4.2 available on host"
)
endif
()
if
(
${
AVX_INDEX
}
GREATER -1
)
set
(
AVX_FOUND true CACHE BOOL
"AVX available on host"
)
endif
()
if
(
${
AVX2_INDEX
}
GREATER -1
)
set
(
AVX2_FOUND true CACHE BOOL
"AVX2 available on host"
)
endif
()
set
(
SSE_FOUND true CACHE BOOL
"SSE available on host"
)
set
(
SSE2_FOUND false CACHE BOOL
"SSE2 available on host"
)
set
(
SSE2_FOUND false CACHE BOOL
"SSE2 available on host"
)
set
(
SSE3_FOUND false CACHE BOOL
"SSE3 available on host"
)
set
(
SSE3_FOUND false CACHE BOOL
"SSE3 available on host"
)
set
(
SSSE3_FOUND false CACHE BOOL
"SSSE3 available on host"
)
set
(
SSSE3_FOUND false CACHE BOOL
"SSSE3 available on host"
)
...
@@ -245,11 +296,7 @@ ELSEIF(CMAKE_SYSTEM_NAME MATCHES "Windows")
...
@@ -245,11 +296,7 @@ ELSEIF(CMAKE_SYSTEM_NAME MATCHES "Windows")
set
(
SSE4_2_FOUND false CACHE BOOL
"SSE4.2 available on host"
)
set
(
SSE4_2_FOUND false CACHE BOOL
"SSE4.2 available on host"
)
set
(
AVX_FOUND false CACHE BOOL
"AVX available on host"
)
set
(
AVX_FOUND false CACHE BOOL
"AVX available on host"
)
set
(
AVX2_FOUND false CACHE BOOL
"AVX2 available on host"
)
set
(
AVX2_FOUND false CACHE BOOL
"AVX2 available on host"
)
#ELSE(CMAKE_SYSTEM_NAME MATCHES "Linux")
# set(SSE2_FOUND true CACHE BOOL "SSE2 available on host")
# set(SSE3_FOUND false CACHE BOOL "SSE3 available on host")
# set(SSSE3_FOUND false CACHE BOOL "SSSE3 available on host")
# set(SSE4_1_FOUND false CACHE BOOL "SSE4.1 available on host")
ENDIF
(
CMAKE_SYSTEM_NAME MATCHES
"Linux"
)
ENDIF
(
CMAKE_SYSTEM_NAME MATCHES
"Linux"
)
message
(
STATUS
"found hardware:
${
CPU_VENDOR
}
${
CPU_MODEL_NAME
}
"
)
message
(
STATUS
"found hardware:
${
CPU_VENDOR
}
${
CPU_MODEL_NAME
}
"
)
...
...
cmake/FindSSE.cmake
deleted
100644 → 0
View file @
2e289b88
# Check if SSE instructions are available on the machine where
# the project is compiled.
IF
(
CMAKE_SYSTEM_NAME MATCHES
"Linux"
)
EXEC_PROGRAM
(
cat ARGS
"/proc/cpuinfo"
OUTPUT_VARIABLE CPUINFO
)
STRING
(
REGEX REPLACE
"^.*(sse2).*$"
"
\\
1"
SSE_THERE
${
CPUINFO
}
)
STRING
(
COMPARE EQUAL
"sse2"
"
${
SSE_THERE
}
"
SSE2_TRUE
)
IF
(
SSE2_TRUE
)
set
(
SSE2_FOUND true CACHE BOOL
"SSE2 available on host"
)
ELSE
(
SSE2_TRUE
)
set
(
SSE2_FOUND false CACHE BOOL
"SSE2 available on host"
)
ENDIF
(
SSE2_TRUE
)
# /proc/cpuinfo apparently omits sse3 :(
STRING
(
REGEX REPLACE
"^.*[^s](sse3).*$"
"
\\
1"
SSE_THERE
${
CPUINFO
}
)
STRING
(
COMPARE EQUAL
"sse3"
"
${
SSE_THERE
}
"
SSE3_TRUE
)
IF
(
NOT SSE3_TRUE
)
STRING
(
REGEX REPLACE
"^.*(T2300).*$"
"
\\
1"
SSE_THERE
${
CPUINFO
}
)
STRING
(
COMPARE EQUAL
"T2300"
"
${
SSE_THERE
}
"
SSE3_TRUE
)
ENDIF
(
NOT SSE3_TRUE
)
STRING
(
REGEX REPLACE
"^.*(ssse3).*$"
"
\\
1"
SSE_THERE
${
CPUINFO
}
)
STRING
(
COMPARE EQUAL
"ssse3"
"
${
SSE_THERE
}
"
SSSE3_TRUE
)
IF
(
SSE3_TRUE OR SSSE3_TRUE
)
set
(
SSE3_FOUND true CACHE BOOL
"SSE3 available on host"
)
ELSE
(
SSE3_TRUE OR SSSE3_TRUE
)
set
(
SSE3_FOUND false CACHE BOOL
"SSE3 available on host"
)
ENDIF
(
SSE3_TRUE OR SSSE3_TRUE
)
IF
(
SSSE3_TRUE
)
set
(
SSSE3_FOUND true CACHE BOOL
"SSSE3 available on host"
)
ELSE
(
SSSE3_TRUE
)
set
(
SSSE3_FOUND false CACHE BOOL
"SSSE3 available on host"
)
ENDIF
(
SSSE3_TRUE
)
STRING
(
REGEX REPLACE
"^.*(sse4_1).*$"
"
\\
1"
SSE_THERE
${
CPUINFO
}
)
STRING
(
COMPARE EQUAL
"sse4_1"
"
${
SSE_THERE
}
"
SSE41_TRUE
)
IF
(
SSE41_TRUE
)
set
(
SSE4_1_FOUND true CACHE BOOL
"SSE4.1 available on host"
)
ELSE
(
SSE41_TRUE
)
set
(
SSE4_1_FOUND false CACHE BOOL
"SSE4.1 available on host"
)
ENDIF
(
SSE41_TRUE
)
ELSEIF
(
CMAKE_SYSTEM_NAME MATCHES
"Darwin"
)
EXEC_PROGRAM
(
"/usr/sbin/sysctl -n machdep.cpu.features"
OUTPUT_VARIABLE
CPUINFO
)
STRING
(
REGEX REPLACE
"^.*[^S](SSE2).*$"
"
\\
1"
SSE_THERE
${
CPUINFO
}
)
STRING
(
COMPARE EQUAL
"SSE2"
"
${
SSE_THERE
}
"
SSE2_TRUE
)
IF
(
SSE2_TRUE
)
set
(
SSE2_FOUND true CACHE BOOL
"SSE2 available on host"
)
ELSE
(
SSE2_TRUE
)
set
(
SSE2_FOUND false CACHE BOOL
"SSE2 available on host"
)
ENDIF
(
SSE2_TRUE
)
STRING
(
REGEX REPLACE
"^.*[^S](SSE3).*$"
"
\\
1"
SSE_THERE
${
CPUINFO
}
)
STRING
(
COMPARE EQUAL
"SSE3"
"
${
SSE_THERE
}
"
SSE3_TRUE
)
IF
(
SSE3_TRUE
)
set
(
SSE3_FOUND true CACHE BOOL
"SSE3 available on host"
)
ELSE
(
SSE3_TRUE
)
set
(
SSE3_FOUND false CACHE BOOL
"SSE3 available on host"
)
ENDIF
(
SSE3_TRUE
)
STRING
(
REGEX REPLACE
"^.*(SSSE3).*$"
"
\\
1"
SSE_THERE
${
CPUINFO
}
)
STRING
(
COMPARE EQUAL
"SSSE3"
"
${
SSE_THERE
}
"
SSSE3_TRUE
)
IF
(
SSSE3_TRUE
)
set
(
SSSE3_FOUND true CACHE BOOL
"SSSE3 available on host"
)
ELSE
(
SSSE3_TRUE
)
set
(
SSSE3_FOUND false CACHE BOOL
"SSSE3 available on host"
)
ENDIF
(
SSSE3_TRUE
)
STRING
(
REGEX REPLACE
"^.*(SSE4.1).*$"
"
\\
1"
SSE_THERE
${
CPUINFO
}
)
STRING
(
COMPARE EQUAL
"SSE4.1"
"
${
SSE_THERE
}
"
SSE41_TRUE
)
IF
(
SSE41_TRUE
)
set
(
SSE4_1_FOUND true CACHE BOOL
"SSE4.1 available on host"
)
ELSE
(
SSE41_TRUE
)
set
(
SSE4_1_FOUND false CACHE BOOL
"SSE4.1 available on host"
)
ENDIF
(
SSE41_TRUE
)
ELSEIF
(
CMAKE_SYSTEM_NAME MATCHES
"Windows"
)
# TODO
set
(
SSE2_FOUND true CACHE BOOL
"SSE2 available on host"
)
set
(
SSE3_FOUND false CACHE BOOL
"SSE3 available on host"
)
set
(
SSSE3_FOUND false CACHE BOOL
"SSSE3 available on host"
)
set
(
SSE4_1_FOUND false CACHE BOOL
"SSE4.1 available on host"
)
ELSE
(
CMAKE_SYSTEM_NAME MATCHES
"Linux"
)
set
(
SSE2_FOUND true CACHE BOOL
"SSE2 available on host"
)
set
(
SSE3_FOUND false CACHE BOOL
"SSE3 available on host"
)
set
(
SSSE3_FOUND false CACHE BOOL
"SSSE3 available on host"
)
set
(
SSE4_1_FOUND false CACHE BOOL
"SSE4.1 available on host"
)
ENDIF
(
CMAKE_SYSTEM_NAME MATCHES
"Linux"
)
if
(
NOT SSE2_FOUND
)
MESSAGE
(
STATUS
"Could not find hardware support for SSE2 on this machine."
)
endif
(
NOT SSE2_FOUND
)
if
(
NOT SSE3_FOUND
)
MESSAGE
(
STATUS
"Could not find hardware support for SSE3 on this machine."
)
endif
(
NOT SSE3_FOUND
)
if
(
NOT SSSE3_FOUND
)
MESSAGE
(
STATUS
"Could not find hardware support for SSSE3 on this machine."
)
endif
(
NOT SSSE3_FOUND
)
if
(
NOT SSE4_1_FOUND
)
MESSAGE
(
STATUS
"Could not find hardware support for SSE4.1 on this machine."
)
endif
(
NOT SSE4_1_FOUND
)
mark_as_advanced
(
SSE2_FOUND SSE3_FOUND SSSE3_FOUND SSE4_1_FOUND
)
cmake/OptimizeForArchitecture.cmake
0 → 100644
View file @
58768a49
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment