Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 800539 | Differences between
and this patch

Collapse All | Expand All

(-)a/cmake/OpenCVFindLAPACK.cmake (-1 / +19 lines)
Lines 51-56 macro(ocv_lapack_check) Link Here
51
    if(NOT "${OPENCV_CBLAS_H_PATH_${_lapack_impl}}" STREQUAL "${OPENCV_LAPACKE_H_PATH_${_lapack_impl}}")
51
    if(NOT "${OPENCV_CBLAS_H_PATH_${_lapack_impl}}" STREQUAL "${OPENCV_LAPACKE_H_PATH_${_lapack_impl}}")
52
      list(APPEND _lapack_content "#include \"${OPENCV_LAPACKE_H_PATH_${_lapack_impl}}\"")
52
      list(APPEND _lapack_content "#include \"${OPENCV_LAPACKE_H_PATH_${_lapack_impl}}\"")
53
    endif()
53
    endif()
54
    list(APPEND _lapack_content "
55
#ifdef OPENCV_USE_LAPACK_PREFIX
56
#define LAPACK_FUNC(f) LAPACK_##f
57
#else
58
#define LAPACK_FUNC(f) f##_
59
#endif
60
")
54
    if(${_lapack_add_extern_c})
61
    if(${_lapack_add_extern_c})
55
      list(APPEND _lapack_content "}")
62
      list(APPEND _lapack_content "}")
56
    endif()
63
    endif()
Lines 156-163 if(WITH_LAPACK) Link Here
156
    if(WIN32 AND NOT OPENCV_LAPACK_SHARED_LIBS)
163
    if(WIN32 AND NOT OPENCV_LAPACK_SHARED_LIBS)
157
      set(BLA_STATIC 1)
164
      set(BLA_STATIC 1)
158
    endif()
165
    endif()
159
    find_package(LAPACK)
166
    find_package(LAPACK CONFIG)
160
    if(LAPACK_FOUND)
167
    if(LAPACK_FOUND)
168
      set(USE_LAPACK_PREFIX_MIN_VERSION "3.9.1")
169
      if(LAPACK_VERSION VERSION_GREATER_EQUAL USE_LAPACK_PREFIX_MIN_VERSION)
170
        message(STATUS "Setting OPENCV_USE_LAPACK_PREFIX to ON as LAPACK_VERSION=${LAPACK_VERSION} >= USE_LAPACK_PREFIX_MIN_VERSION=${USE_LAPACK_PREFIX_MIN_VERSION}")
171
	set(OPENCV_USE_LAPACK_PREFIX ON)
172
      else()
173
        message(STATUS "Setting OPENCV_USE_LAPACK_PREFIX to OFF as LAPACK_VERSION=${LAPACK_VERSION} < USE_LAPACK_PREFIX_MIN_VERSION=${USE_LAPACK_PREFIX_MIN_VERSION}")
174
	set(OPENCV_USE_LAPACK_PREFIX OFF)
175
      endif()
161
      if(NOT DEFINED LAPACKE_INCLUDE_DIR)
176
      if(NOT DEFINED LAPACKE_INCLUDE_DIR)
162
        find_path(LAPACKE_INCLUDE_DIR "lapacke.h")
177
        find_path(LAPACKE_INCLUDE_DIR "lapacke.h")
163
      endif()
178
      endif()
Lines 210-213 if(WITH_LAPACK) Link Here
210
  set(LAPACK_LAPACKE_H   ${LAPACK_LAPACKE_H}   CACHE STRING "Alternative name of lapacke.h" FORCE)
225
  set(LAPACK_LAPACKE_H   ${LAPACK_LAPACKE_H}   CACHE STRING "Alternative name of lapacke.h" FORCE)
211
  set(LAPACK_LIBRARIES   ${LAPACK_LIBRARIES}   CACHE STRING "Names of BLAS & LAPACK binaries (.so, .dll, .a, .lib)" FORCE)
226
  set(LAPACK_LIBRARIES   ${LAPACK_LIBRARIES}   CACHE STRING "Names of BLAS & LAPACK binaries (.so, .dll, .a, .lib)" FORCE)
212
  set(LAPACK_IMPL        ${LAPACK_IMPL}        CACHE STRING "Lapack implementation id" FORCE)
227
  set(LAPACK_IMPL        ${LAPACK_IMPL}        CACHE STRING "Lapack implementation id" FORCE)
228
  if(OPENCV_USE_LAPACK_PREFIX)
229
    add_definitions(-DOPENCV_USE_LAPACK_PREFIX)
230
  endif()
213
endif()
231
endif()
(-)a/modules/core/src/hal_internal.cpp (-18 / +18 lines)
Lines 163-171 lapack_Cholesky(fptype* a, size_t a_step, int m, fptype* b, size_t b_step, int n Link Here
163
        if(n == 1 && b_step == sizeof(fptype))
163
        if(n == 1 && b_step == sizeof(fptype))
164
        {
164
        {
165
            if(typeid(fptype) == typeid(float))
165
            if(typeid(fptype) == typeid(float))
166
                sposv_(L, &m, &n, (float*)a, &lda, (float*)b, &m, &lapackStatus);
166
                LAPACK_FUNC(sposv)(L, &m, &n, (float*)a, &lda, (float*)b, &m, &lapackStatus);
167
            else if(typeid(fptype) == typeid(double))
167
            else if(typeid(fptype) == typeid(double))
168
                dposv_(L, &m, &n, (double*)a, &lda, (double*)b, &m, &lapackStatus);
168
                LAPACK_FUNC(dposv)(L, &m, &n, (double*)a, &lda, (double*)b, &m, &lapackStatus);
169
        }
169
        }
170
        else
170
        else
171
        {
171
        {
Lines 174-182 lapack_Cholesky(fptype* a, size_t a_step, int m, fptype* b, size_t b_step, int n Link Here
174
            transpose(b, ldb, tmpB, m, m, n);
174
            transpose(b, ldb, tmpB, m, m, n);
175
175
176
            if(typeid(fptype) == typeid(float))
176
            if(typeid(fptype) == typeid(float))
177
                sposv_(L, &m, &n, (float*)a, &lda, (float*)tmpB, &m, &lapackStatus);
177
                LAPACK_FUNC(sposv)(L, &m, &n, (float*)a, &lda, (float*)tmpB, &m, &lapackStatus);
178
            else if(typeid(fptype) == typeid(double))
178
            else if(typeid(fptype) == typeid(double))
179
                dposv_(L, &m, &n, (double*)a, &lda, (double*)tmpB, &m, &lapackStatus);
179
                LAPACK_FUNC(dposv)(L, &m, &n, (double*)a, &lda, (double*)tmpB, &m, &lapackStatus);
180
180
181
            transpose(tmpB, m, b, ldb, n, m);
181
            transpose(tmpB, m, b, ldb, n, m);
182
            delete[] tmpB;
182
            delete[] tmpB;
Lines 185-193 lapack_Cholesky(fptype* a, size_t a_step, int m, fptype* b, size_t b_step, int n Link Here
185
    else
185
    else
186
    {
186
    {
187
        if(typeid(fptype) == typeid(float))
187
        if(typeid(fptype) == typeid(float))
188
            spotrf_(L, &m, (float*)a, &lda, &lapackStatus);
188
            LAPACK_FUNC(spotrf)(L, &m, (float*)a, &lda, &lapackStatus);
189
        else if(typeid(fptype) == typeid(double))
189
        else if(typeid(fptype) == typeid(double))
190
            dpotrf_(L, &m, (double*)a, &lda, &lapackStatus);
190
            LAPACK_FUNC(dpotrf)(L, &m, (double*)a, &lda, &lapackStatus);
191
    }
191
    }
192
192
193
    if(lapackStatus == 0) *info = true;
193
    if(lapackStatus == 0) *info = true;
Lines 227-243 lapack_SVD(fptype* a, size_t a_step, fptype *w, fptype* u, size_t u_step, fptype Link Here
227
    }
227
    }
228
228
229
    if(typeid(fptype) == typeid(float))
229
    if(typeid(fptype) == typeid(float))
230
        sgesdd_(mode, &m, &n, (float*)a, &lda, (float*)w, (float*)u, &ldu, (float*)vt, &ldv, (float*)&work1, &lwork, iworkBuf, info);
230
        LAPACK_FUNC(sgesdd)(mode, &m, &n, (float*)a, &lda, (float*)w, (float*)u, &ldu, (float*)vt, &ldv, (float*)&work1, &lwork, iworkBuf, info);
231
    else if(typeid(fptype) == typeid(double))
231
    else if(typeid(fptype) == typeid(double))
232
        dgesdd_(mode, &m, &n, (double*)a, &lda, (double*)w, (double*)u, &ldu, (double*)vt, &ldv, (double*)&work1, &lwork, iworkBuf, info);
232
        LAPACK_FUNC(dgesdd)(mode, &m, &n, (double*)a, &lda, (double*)w, (double*)u, &ldu, (double*)vt, &ldv, (double*)&work1, &lwork, iworkBuf, info);
233
233
234
    lwork = (int)round(work1); //optimal buffer size
234
    lwork = (int)round(work1); //optimal buffer size
235
    fptype* buffer = new fptype[lwork + 1];
235
    fptype* buffer = new fptype[lwork + 1];
236
236
237
    if(typeid(fptype) == typeid(float))
237
    if(typeid(fptype) == typeid(float))
238
        sgesdd_(mode, &m, &n, (float*)a, &lda, (float*)w, (float*)u, &ldu, (float*)vt, &ldv, (float*)buffer, &lwork, iworkBuf, info);
238
        LAPACK_FUNC(sgesdd)(mode, &m, &n, (float*)a, &lda, (float*)w, (float*)u, &ldu, (float*)vt, &ldv, (float*)buffer, &lwork, iworkBuf, info);
239
    else if(typeid(fptype) == typeid(double))
239
    else if(typeid(fptype) == typeid(double))
240
        dgesdd_(mode, &m, &n, (double*)a, &lda, (double*)w, (double*)u, &ldu, (double*)vt, &ldv, (double*)buffer, &lwork, iworkBuf, info);
240
        LAPACK_FUNC(dgesdd)(mode, &m, &n, (double*)a, &lda, (double*)w, (double*)u, &ldu, (double*)vt, &ldv, (double*)buffer, &lwork, iworkBuf, info);
241
241
242
    if(!(flags & CV_HAL_SVD_NO_UV))
242
    if(!(flags & CV_HAL_SVD_NO_UV))
243
        transpose_square_inplace(vt, ldv, n);
243
        transpose_square_inplace(vt, ldv, n);
Lines 288-305 lapack_QR(fptype* a, size_t a_step, int m, int n, int k, fptype* b, size_t b_ste Link Here
288
        if (k == 1 && b_step == sizeof(fptype))
288
        if (k == 1 && b_step == sizeof(fptype))
289
        {
289
        {
290
            if (typeid(fptype) == typeid(float))
290
            if (typeid(fptype) == typeid(float))
291
                sgels_(mode, &m, &n, &k, (float*)tmpA, &ldtmpA, (float*)b, &m, (float*)&work1, &lwork, info);
291
                LAPACK_FUNC(sgels)(mode, &m, &n, &k, (float*)tmpA, &ldtmpA, (float*)b, &m, (float*)&work1, &lwork, info);
292
            else if (typeid(fptype) == typeid(double))
292
            else if (typeid(fptype) == typeid(double))
293
                dgels_(mode, &m, &n, &k, (double*)tmpA, &ldtmpA, (double*)b, &m, (double*)&work1, &lwork, info);
293
                LAPACK_FUNC(dgels)(mode, &m, &n, &k, (double*)tmpA, &ldtmpA, (double*)b, &m, (double*)&work1, &lwork, info);
294
294
295
            lwork = cvRound(work1); //optimal buffer size
295
            lwork = cvRound(work1); //optimal buffer size
296
            std::vector<fptype> workBufMemHolder(lwork + 1);
296
            std::vector<fptype> workBufMemHolder(lwork + 1);
297
            fptype* buffer = &workBufMemHolder.front();
297
            fptype* buffer = &workBufMemHolder.front();
298
298
299
            if (typeid(fptype) == typeid(float))
299
            if (typeid(fptype) == typeid(float))
300
                sgels_(mode, &m, &n, &k, (float*)tmpA, &ldtmpA, (float*)b, &m, (float*)buffer, &lwork, info);
300
                LAPACK_FUNC(sgels)(mode, &m, &n, &k, (float*)tmpA, &ldtmpA, (float*)b, &m, (float*)buffer, &lwork, info);
301
            else if (typeid(fptype) == typeid(double))
301
            else if (typeid(fptype) == typeid(double))
302
                dgels_(mode, &m, &n, &k, (double*)tmpA, &ldtmpA, (double*)b, &m, (double*)buffer, &lwork, info);
302
                LAPACK_FUNC(dgels)(mode, &m, &n, &k, (double*)tmpA, &ldtmpA, (double*)b, &m, (double*)buffer, &lwork, info);
303
        }
303
        }
304
        else
304
        else
305
        {
305
        {
Lines 309-326 lapack_QR(fptype* a, size_t a_step, int m, int n, int k, fptype* b, size_t b_ste Link Here
309
            transpose(b, ldb, tmpB, m, m, k);
309
            transpose(b, ldb, tmpB, m, m, k);
310
310
311
            if (typeid(fptype) == typeid(float))
311
            if (typeid(fptype) == typeid(float))
312
                sgels_(mode, &m, &n, &k, (float*)tmpA, &ldtmpA, (float*)tmpB, &m, (float*)&work1, &lwork, info);
312
                LAPACK_FUNC(sgels)(mode, &m, &n, &k, (float*)tmpA, &ldtmpA, (float*)tmpB, &m, (float*)&work1, &lwork, info);
313
            else if (typeid(fptype) == typeid(double))
313
            else if (typeid(fptype) == typeid(double))
314
                dgels_(mode, &m, &n, &k, (double*)tmpA, &ldtmpA, (double*)tmpB, &m, (double*)&work1, &lwork, info);
314
                LAPACK_FUNC(dgels)(mode, &m, &n, &k, (double*)tmpA, &ldtmpA, (double*)tmpB, &m, (double*)&work1, &lwork, info);
315
315
316
            lwork = cvRound(work1); //optimal buffer size
316
            lwork = cvRound(work1); //optimal buffer size
317
            std::vector<fptype> workBufMemHolder(lwork + 1);
317
            std::vector<fptype> workBufMemHolder(lwork + 1);
318
            fptype* buffer = &workBufMemHolder.front();
318
            fptype* buffer = &workBufMemHolder.front();
319
319
320
            if (typeid(fptype) == typeid(float))
320
            if (typeid(fptype) == typeid(float))
321
                sgels_(mode, &m, &n, &k, (float*)tmpA, &ldtmpA, (float*)tmpB, &m, (float*)buffer, &lwork, info);
321
                LAPACK_FUNC(sgels)(mode, &m, &n, &k, (float*)tmpA, &ldtmpA, (float*)tmpB, &m, (float*)buffer, &lwork, info);
322
            else if (typeid(fptype) == typeid(double))
322
            else if (typeid(fptype) == typeid(double))
323
                dgels_(mode, &m, &n, &k, (double*)tmpA, &ldtmpA, (double*)tmpB, &m, (double*)buffer, &lwork, info);
323
                LAPACK_FUNC(dgels)(mode, &m, &n, &k, (double*)tmpA, &ldtmpA, (double*)tmpB, &m, (double*)buffer, &lwork, info);
324
324
325
            transpose(tmpB, m, b, ldb, k, m);
325
            transpose(tmpB, m, b, ldb, k, m);
326
        }
326
        }

Return to bug 800539