/perf/kseta

To get this branch, use:
bzr branch http://darksoft.org/webbzr/perf/kseta

« back to all changes in this revision

Viewing changes to sources/cmake/FindOpenCL.cmake

  • Committer: Suren A. Chilingaryan
  • Date: 2013-09-30 06:47:09 UTC
  • Revision ID: csa@dside.dyndns.org-20130930064709-55cde0k5ci76t8z5
Simple matrix multiplication

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# - Try to find OpenCL
 
2
# This module tries to find an OpenCL implementation on your system. It supports
 
3
# AMD / ATI, Apple and NVIDIA implementations, but shoudl work, too.
 
4
#
 
5
# Once done this will define
 
6
#  OPENCL_FOUND        - system has OpenCL
 
7
#  OPENCL_INCLUDE_DIRS - the OpenCL include directory
 
8
#  OPENCL_LIBRARIES    - link these to use OpenCL
 
9
#  OPENCL_VENDOR
 
10
# WIN32 should work, but is untested
 
11
 
 
12
FIND_PACKAGE( PackageHandleStandardArgs )
 
13
 
 
14
SET (OPENCL_VERSION_STRING "0.1.0")
 
15
SET (OPENCL_VERSION_MAJOR 0)
 
16
SET (OPENCL_VERSION_MINOR 1)
 
17
SET (OPENCL_VERSION_PATCH 0)
 
18
 
 
19
SET(OPENCL_VENDOR "ANY" CACHE STRING "Choose OpenCL Vendor")
 
20
SET_PROPERTY(CACHE OPENCL_VENDOR PROPERTY STRINGS ANY NVIDIA ATI INTEL)
 
21
 
 
22
SET(OPENCL_VENDOR_INTERNAL "ANY" CACHE STRING "")
 
23
if (NOT OPENCL_VENDOR_INTERNAL MATCHES ${OPENCL_VENDOR})
 
24
    SET(OPENCL_INCLUDE_DIRS NOTFOUND CACHE PATH "" FORCE)
 
25
    SET(OPENCL_LIBRARIES NOTFOUND CACHE FILEPATH "" FORCE)
 
26
endif()
 
27
SET(OPENCL_VENDOR_INTERNAL ${OPENCL_VENDOR} CACHE STRING "" FORCE)
 
28
 
 
29
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
 
30
  set(OPENCL_CUDA_ARCHEXT "64")
 
31
  set(OPENCL_ATI_ARCHLIB "x86_64")
 
32
  set(OPENCL_ATI_ARCHEXT "64")
 
33
else(CMAKE_SIZEOF_VOID_P EQUAL 8)
 
34
  set(OPENCL_CUDA_ARCHEXT "")
 
35
  set(OPENCL_ATI_ARCHLIB "x86")
 
36
  set(OPENCL_ATI_ARCHEXT "32")
 
37
endif(CMAKE_SIZEOF_VOID_P EQUAL 8)
 
38
 
 
39
 
 
40
IF (APPLE)
 
41
 
 
42
  FIND_LIBRARY(OPENCL_LIBRARIES OpenCL DOC "OpenCL lib for OSX")
 
43
  FIND_PATH(OPENCL_INCLUDE_DIRS OpenCL/cl.h DOC "Include for OpenCL on OSX")
 
44
  FIND_PATH(_OPENCL_CPP_INCLUDE_DIRS OpenCL/cl.hpp DOC "Include for OpenCL CPP bindings on OSX")
 
45
 
 
46
ELSEIF (WIN32)
 
47
            FIND_PATH(OPENCL_INCLUDE_DIRS CL/cl.h)
 
48
            FIND_PATH(_OPENCL_CPP_INCLUDE_DIRS CL/cl.hpp)
 
49
        
 
50
            # The AMD SDK currently installs both x86 and x86_64 libraries
 
51
            # This is only a hack to find out architecture
 
52
            IF( ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "AMD64" )
 
53
                SET(OPENCL_LIB_DIR "$ENV{ATISTREAMSDKROOT}/lib/x86_64")
 
54
            ELSE (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "AMD64")
 
55
                SET(OPENCL_LIB_DIR "$ENV{ATISTREAMSDKROOT}/lib/x86")
 
56
            ENDIF( ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "AMD64" )
 
57
            FIND_LIBRARY(OPENCL_LIBRARIES OpenCL.lib ${OPENCL_LIB_DIR})
 
58
            
 
59
            GET_FILENAME_COMPONENT(_OPENCL_INC_CAND ${OPENCL_LIB_DIR}/../../include ABSOLUTE)
 
60
            
 
61
            # On Win32 search relative to the library
 
62
            FIND_PATH(OPENCL_INCLUDE_DIRS CL/cl.h PATHS "${_OPENCL_INC_CAND}")
 
63
            FIND_PATH(_OPENCL_CPP_INCLUDE_DIRS CL/cl.hpp PATHS "${_OPENCL_INC_CAND}")
 
64
        
 
65
ELSE ()
 
66
    # Unix style platforms
 
67
    SET(OPENCL_PLATFORMS)
 
68
    SET(OPENCL_CPU_SUPPORT FALSE)
 
69
    SET(OPENCL_GPU_SUPPORT FALSE)
 
70
 
 
71
    SET(OPENCL_INCLUDE_SEARCH_PATH)
 
72
    SET(OPENCL_LIBRARY_SEARCH_PATH)
 
73
            
 
74
    IF (NOT DISABLE_HWCHECK AND EXISTS /usr/sbin/lspci)
 
75
        EXECUTE_PROCESS(
 
76
            COMMAND /usr/sbin/lspci
 
77
            RESULT_VARIABLE LSPCI_RESULT
 
78
            OUTPUT_VARIABLE LSPCI_OUTPUT
 
79
        )
 
80
    ELSE ()
 
81
        SET(LSPCI_RESULT -1)
 
82
    ENDIF()
 
83
 
 
84
    IF ((OPENCL_VENDOR MATCHES "ANY") OR (OPENCL_VENDOR MATCHES "NVIDIA"))
 
85
        IF (CUDA_FOUND AND CUDA_CUDART_LIBRARY)
 
86
            SET(OPENCL_PLATFORMS ${OPENCL_PLATFORMS} CUDA)
 
87
 
 
88
            if (LSPCI_RESULT EQUAL 0)
 
89
                string(TOUPPER ${LSPCI_OUTPUT} LSPCI_OUTPUT_UC)
 
90
                if (LSPCI_OUTPUT_UC MATCHES "(GEFORCE|TESLA|VGA.*NVIDIA)")
 
91
                    SET(OPENCL_GPU_SUPPORT TRUE)
 
92
                endif()
 
93
            else()
 
94
                # Assuming yes
 
95
                SET(OPENCL_GPU_SUPPORT TRUE)
 
96
            endif()
 
97
 
 
98
            GET_FILENAME_COMPONENT(OPENCL_CUDA_LIB_DIR ${CUDA_CUDART_LIBRARY} PATH)
 
99
 
 
100
            SET(OPENCL_LIBRARY_SEARCH_PATH
 
101
                ${OPENCL_LIBRARY_SEARCH_PATH}
 
102
                ${OPENCL_CUDA_LIB_DIR}
 
103
            )
 
104
            
 
105
            SET(OPENCL_INCLUDE_SEARCH_PATH
 
106
                ${OPENCL_INCLUDE_SEARCH_PATH}
 
107
                ${CUDA_TOOLKIT_ROOT_DIR}/include
 
108
            )
 
109
        ENDIF()
 
110
    ENDIF()
 
111
 
 
112
    IF ((OPENCL_VENDOR MATCHES "ANY") OR (OPENCL_VENDOR MATCHES "ATI"))
 
113
        IF (ATI_TOOLKIT_FOUND AND ATI_TOOLKIT_LIBRARIES)
 
114
            SET(OPENCL_PLATFORMS ${OPENCL_PLATFORMS} ATI)
 
115
                
 
116
            SET(OPENCL_CPU_SUPPORT TRUE)
 
117
            if (LSPCI_RESULT EQUAL 0)
 
118
                if (LSPCI_OUTPUT MATCHES ATI)
 
119
                    SET(OPENCL_GPU_SUPPORT TRUE)
 
120
                endif()
 
121
            else()
 
122
                # Assuming yes
 
123
                SET(OPENCL_GPU_SUPPORT TRUE)
 
124
            endif()
 
125
                
 
126
            GET_FILENAME_COMPONENT(OPENCL_ATI_LIB_DIR ${ATI_TOOLKIT_LIBRARIES} PATH)
 
127
 
 
128
            SET(OPENCL_LIBRARY_SEARCH_PATH
 
129
                ${OPENCL_LIBRARY_SEARCH_PATH}
 
130
                ${OPENCL_ATI_LIB_DIR}
 
131
            )
 
132
 
 
133
            SET(OPENCL_INCLUDE_SEARCH_PATH
 
134
                ${OPENCL_INCLUDE_SEARCH_PATH}
 
135
                ${ATI_TOOLKIT_ROOT_DIR}/include
 
136
            )
 
137
 
 
138
        ENDIF()
 
139
    ENDIF()
 
140
 
 
141
    IF ((OPENCL_VENDOR MATCHES "ANY") OR (OPENCL_VENDOR MATCHES "INTEL"))
 
142
        IF (INTEL_OPENCL_TOOLKIT_FOUND AND INTEL_OPENCL_TOOLKIT_LIBRARIES)
 
143
            SET(OPENCL_PLATFORMS ${OPENCL_PLATFORMS} INTEL)
 
144
                
 
145
            SET(OPENCL_CPU_SUPPORT TRUE)
 
146
                
 
147
            GET_FILENAME_COMPONENT(OPENCL_INTEL_LIB_DIR ${INTEL_OPENCL_TOOLKIT_LIBRARIES} PATH)
 
148
 
 
149
            SET(OPENCL_LIBRARY_SEARCH_PATH
 
150
                ${OPENCL_LIBRARY_SEARCH_PATH}
 
151
                ${OPENCL_INTEL_LIB_DIR}
 
152
            )
 
153
 
 
154
            SET(OPENCL_INCLUDE_SEARCH_PATH
 
155
                ${OPENCL_INCLUDE_SEARCH_PATH}
 
156
                ${INTEL_OPENCL_TOOLKIT_ROOT_DIR}/include
 
157
            )
 
158
        ENDIF()
 
159
    ENDIF()
 
160
 
 
161
    if (OPENCL_VENDOR MATCHES "ANY") 
 
162
        SET(OPENCL_LIBRARY_SEARCH_PATH
 
163
            ${OPENCL_LIBRARY_SEARCH_PATH}
 
164
            ENV LD_LIBRARY_PATH
 
165
        )
 
166
        SET(OPENCL_INCLUDE_SEARCH_PATH
 
167
            ${OPENCL_INCLUDE_SEARCH_PATH}
 
168
            /usr/include 
 
169
            /usr/local/include
 
170
        )
 
171
    endif ()
 
172
 
 
173
    FIND_LIBRARY(OPENCL_LIBRARIES
 
174
        NAMES OpenCL
 
175
        PATHS ${OPENCL_LIBRARY_SEARCH_PATH}
 
176
    )
 
177
    
 
178
    IF (OPENCL_LIBRARIES)
 
179
        GET_FILENAME_COMPONENT(OPENCL_LIB_DIR ${OPENCL_LIBRARIES} PATH)
 
180
        GET_FILENAME_COMPONENT(OPENCL_RELATIVE_INCLUDE_DIR  ${OPENCL_LIB_DIR}/../../include ABSOLUTE)
 
181
        SET(OPENCL_INCLUDE_SEARCH_PATH ${OPENCL_INCLUDE_SEARCH_PATH} ${OPENCL_RELATIVE_INCLUDE_DIR})
 
182
        
 
183
        FIND_PATH(OPENCL_INCLUDE_DIRS CL/cl.h PATHS ${OPENCL_INCLUDE_SEARCH_PATH}) 
 
184
        FIND_PATH(_OPENCL_CPP_INCLUDE_DIRS CL/cl.hpp PATHS ${OPENCL_INCLUDE_SEARCH_PATH})
 
185
    ENDIF (OPENCL_LIBRARIES)
 
186
ENDIF ()
 
187
 
 
188
FIND_PACKAGE_HANDLE_STANDARD_ARGS( OpenCL DEFAULT_MSG OPENCL_LIBRARIES OPENCL_INCLUDE_DIRS )
 
189
 
 
190
IF( _OPENCL_CPP_INCLUDE_DIRS )
 
191
        SET( OPENCL_HAS_CPP_BINDINGS TRUE )
 
192
        LIST( APPEND OPENCL_INCLUDE_DIRS ${_OPENCL_CPP_INCLUDE_DIRS} )
 
193
        # This is often the same, so clean up
 
194
        LIST( REMOVE_DUPLICATES OPENCL_INCLUDE_DIRS )
 
195
ENDIF( _OPENCL_CPP_INCLUDE_DIRS )
 
196
 
 
197
MARK_AS_ADVANCED(
 
198
  OPENCL_LIBRARIES
 
199
  OPENCL_INCLUDE_DIRS
 
200
  OPENCL_ATI_LIBRARIES
 
201
  _OPENCL_CPP_INCLUDE_DIRS
 
202
  OPENCL_VENDOR_INTERNAL
 
203
)