Как включить и связать как с коккосом, так и с собственнымC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как включить и связать как с коккосом, так и с собственным

Сообщение Anonymous »

Я начинаю с кодовой базы C++, которая зависит от Eigen, и пытаюсь выяснить, можно ли ее объединить с библиотекой Kokkos для добавления функциональности графического процессора, поэтому мне нужно, чтобы обе они были найдены и связаны с ними в CMake. файл.
Кроме того, моя собственная зависимость уже использовала BLAS и LAPACK.
Если я включу любую из этих зависимостей в target_link_libraries раздел, то все в порядке, однако если я включу оба сразу, компиляция завершится с ошибкой

Код: Выделить всё

In file included from /main.cpp:6:
In file included from /bask/apps/live/EL8-ice/software/Eigen/3.4.0-GCCcore-11.3.0/include/Eigen/Dense:7:
In file included from /bask/apps/live/EL8-ice/software/Eigen/3.4.0-GCCcore-11.3.0/include/Eigen/Eigenvalues:55:
/bask/apps/live/EL8-ice/software/Eigen/3.4.0-GCCcore-11.3.0/include/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h:80:1: error: __host__ function 'compute' cannot overload __host__ __device__ function 'compute'
80 | EIGEN_LAPACKE_EIG_SELFADJ(double,   double,                double, dsyev)
| ^
/bask/apps/live/EL8-ice/software/Eigen/3.4.0-GCCcore-11.3.0/include/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h:77:9: note: expanded from macro 'EIGEN_LAPACKE_EIG_SELFADJ'
77 |         EIGEN_LAPACKE_EIG_SELFADJ_2(EIGTYPE, LAPACKE_TYPE, LAPACKE_RTYPE, LAPACKE_NAME, ColMajor )  \
|         ^
/bask/apps/live/EL8-ice/software/Eigen/3.4.0-GCCcore-11.3.0/include/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h:43:72: note: expanded from macro 'EIGEN_LAPACKE_EIG_SELFADJ_2'
43 | SelfAdjointEigenSolver::compute(const EigenBase& matrix, int options) \
|                                                                        ^
/bask/apps/live/EL8-ice/software/Eigen/3.4.0-GCCcore-11.3.0/include/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h:216:29: note: previous declaration is here
216 |     SelfAdjointEigenSolver& compute(const EigenBase& matrix, int options = ComputeEigenvectors);
|                             ^
Похоже, эта ошибка подразумевает, что Эйген пытается использовать функциональность устройства (графического процессора?).
У меня здесь минимальное воспроизведение кода: один файл main.cpp и сценарий CMake:

Код: Выделить всё

main.cpp:
#define lapack_complex_float std::complex
#define lapack_complex_double std::complex
#define EIGEN_USE_BLAS
#define EIGEN_USE_LAPACKE
#include 

int main(void){
Eigen::Matrix3d::Zero()
}

Код: Выделить всё

CMakeList.txt:
cmake_minimum_required (VERSION 3.8)

set(CMAKE_CXX_STANDARD 20)

project ("trial")

find_package(Kokkos REQUIRED)
find_package(BLAS REQUIRED)
find_package(LAPACK REQUIRED)
find_package(Eigen3 REQUIRED NO_MODULE)

add_executable(main "main.cpp")

target_link_libraries(
main
Kokkos::kokkos
Eigen3::Eigen
BLAS::BLAS
LAPACK::LAPACK
)
Обратите внимание, что это предполагает, что Kokkos, BLAS и Eigen уже установлены и доступны для поиска.
Это будет работать, если я удалю ссылку на Kokkos, однако добавлю ссылка Kokkos::kokkos (даже без вызова кода Kokkos) приводит к сбою компиляции.
К вашему сведению, я использовал:
  • Кланг 18.1.8
  • CUDA/11.8.0
  • OpenBLAS-0.3.20
  • Eigen-3.4. 0
  • kokkos-4.3.01
  • openmp=libomp


Подробнее здесь: https://stackoverflow.com/questions/791 ... -and-eigen
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»