Я предполагаю, что мой 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
. С другой стороны, (в частности, если вы не имеете прав администратора), вы можете скачать источник LAPACK 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
полезны для перекомпиляции лапаков и лапаков с нуля.
2) Составим простой код, основанный на this example:
#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 с нуля.
Большое спасибо. Позвольте мне поработать над этим, и я опубликую то, что я сделал. – Boki
Во-первых, я искал установку LAPACK (E): – Boki
Typing ** locate lapack ** дал мне следующий (только часть списка) – Boki