LAPACK / LAPACKE с C ++ в LINUX — Компиляция, компоновка и запуск?

Вступление:
Я разработал приложение на C ++, которое использует LAPACK (LAPACKE) и MPI, все в Windows. В Windows работает нормально (компиляция и компоновка выполняются через Code :: Blocks IDE), но выполнение выполняется слишком медленно. Поэтому я хочу перенести код на наш маленький «суперкомпьютер», работающий под CentOS Linux, где мы уже установили GNU C ++, MPICH2 и LAPACK.

Вопросы:
Как скомпилировать / связать и запустить код C ++, который вызывает LAPACKE в Linux / CentOS? Должен ли я установить GNU Fortran на компьютере CentOS, чтобы скомпилировать / связать / запустить C ++ с LAPACK (LAPACKE)?

БОЛЬШОЕ СПАСИБО!!!

1

Решение

Я предполагаю, что мой Debian достаточно близок к вашему CentOS, чтобы эти трюки работали …

1) Убедитесь, что LAPACKE установлен на вашем компьютере.

  • Вы можете искать места, такие как /usr/include, /usr/local/include для файлов lapacke.h, lapacke_config.h, lapacke_mangling.h, lapacke_mangling_with_flags.h а также lapacke_utils.h,
  • Вы можете искать места, такие как /usr/lib или же /usr/local/lib для статической библиотеки lapacke.a или динамическая библиотека lapacke.so или же lapacke.so.3,

Если эти файлы отсутствуют, рассмотрите возможность установки пакетов liblapacke а также liblapacke-dev, В качестве альтернативы, (в частности, если у вас нет привилегий root), вы можете скачать исходные тексты пакетов с пакетами netlib и lapacke по адресу http://www.netlib.org/lapack/#_lapack_version_3_6_1 Чтобы скомпилировать LAPACKE, переименуйте make.inc.example в make.incзатем введите:

    make
make lapackelib

Включаемые файлы будут расположены в lapack-3.6.1/LAPACKE/include и библиотека будет в lapack-3.6.1, gcc а также gfortran Полезно перекомпилировать lapack и lapacke с нуля.

2) Давайте скомпилируем простой код, основанный на этот пример:

#include <iostream>
#include <string>
#include <fstream>

#include <stdlib.h>
#include <stdio.h>
#include <math.h>

#include <lapacke.h>
#include "mpi.h"
void print_matrix_rowmajor(const char* desc, lapack_int m, lapack_int n, double* a, lapack_int lda );

int main(int argc, char *argv[])
{
MPI_Init(&argc,&argv);
std::cout << "Start..." << std::endl;
//std::string fn_VALS;

/* Locals */
double A[5][3] = {1,1,1,2,3,4,3,5,2,4,2,5,5,4,3};
double b[5][2] = {-10,-3,12,14,14,12,16,16,18,16};
lapack_int info,m,n,lda,ldb,nrhs;

/* Initialization */
m = 5;
n = 3;
nrhs = 2;
lda = 3;
ldb = 2;

/* Print Entry Matrix */
print_matrix_rowmajor( "Entry Matrix A", m, n, *A, lda );
/* Print Right Rand Side */
print_matrix_rowmajor( "Right Hand Side b", n, nrhs, *b, ldb );
printf( "\n" );
/* Executable statements */
printf( "LAPACKE_dgels (row-major, high-level) Example Program Results\n" );
/* Solve least squares problem*/
info = LAPACKE_dgels(LAPACK_ROW_MAJOR,'N',m,n,nrhs,*A,lda,*b,ldb);

/* Print Solution */
print_matrix_rowmajor( "Solution", n, nrhs, *b, ldb );
printf( "\n" );std::cout << "info = " << info << std::endl;std::cout << "Done :-) !!!" <<std::endl;
MPI_Finalize();
return 0;
}////////////////////////////////////////////////////////* Auxiliary routine: printing a matrix */
void print_matrix_rowmajor(const char* desc, lapack_int m, lapack_int n, double* a, lapack_int lda )
{
lapack_int i, j;
printf( "\n %s\n", desc );
for( i = 0; i < m; i++ )
{
for( j = 0; j < n; j++ )
{
printf( " %6.2f", a[i*lda+j]);
}
printf( "\n" );
}
}
//=======================================

Команда для компиляции:

mpiCC main.cpp -o main -llapacke -llapack -lblas -lm -Wall

Если включаемые файлы находятся в определенной папке, используйте -I/usr/pathtolapackedoth, Аналогично, если библиотека находится в отдельной папке, попробуйте -L/usr/lib/pathtoliblapackedota,
В зависимости от того, как был установлен MPICH2, вероятно, что mpiCC обертывания g ++. Вы можете напечатать mpiCC --version Узнать больше. Чтобы запустить его, используя 2 процесса:

mpirun -np 2 main

Наконец, вам не нужно устанавливать GNU Fortran, установленный на компьютере CentOS, чтобы скомпилировать / связать / запустить C ++ с LAPACK (LAPACKE). Действительно, это требуется, только если вы хотите перекомпилировать LAPACK с нуля.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]