Installazione Lapack
- Alice_Kora
- Prode Principiante
- Messaggi: 8
- Iscrizione: giovedì 26 giugno 2014, 9:52
- Località: Bordeaux-France
Installazione Lapack
dopo mesi di abbandono sto avendo problemi a installare Lapack, non è che qualcuno abbia chiarezza su come farlo? Lavoro in C quindi non mi servono i make fortran
Grazie in anticipo
INRIA~IMB
Bordeaux-Talence
Bat.A 33 Bureau 168
- Vincenzo1968
- Scoppiettante Seguace
- Messaggi: 450
- Iscrizione: lunedì 14 gennaio 2013, 14:21
- Desktop: Unity
- Distribuzione: Ubuntu 18.04.3 LTS x86_64
- Località: Villabate(PA)
- Contatti:
Re: Installazione Lapack
Codice: Seleziona tutto
sudo apt-get install libblas-dev liblapack-dev liblapacke-dev
- scarica blas.tgz e cblas.tgz da qui: http://www.netlib.org/blas/
- scarica lapack-3.5.0.tgz da qui: http://www.netlib.org/lapack/
Installa blas e cblas seguendo questa procedura:
1) unpack:
Codice: Seleziona tutto
tar xvf blas.tgz
2) spostarsi all'interno della directory:
Codice: Seleziona tutto
cd BLAS
3) aprire il file make.inc e commentare la seguente linea di codice:
Codice: Seleziona tutto
# PLAT = _LINUX
4) sempre nel file make.inc modificare la linea
Codice: Seleziona tutto
BLASLIB = blas$(PLAT).a
in
BLASLIB = libblas$(PLAT).a
3) compilare:
Codice: Seleziona tutto
make
4) copiare la libreria:
Codice: Seleziona tutto
sudo cp libblas.a /usr/local/lib
5) spostarsi nella directory principale:
Codice: Seleziona tutto
cd ..
6) unpack cblas:
Codice: Seleziona tutto
tar xvf cblas.tgz
Codice: Seleziona tutto
cd CBLAS
aprire il file Makefile.in e commentare la seguente riga:
Codice: Seleziona tutto
#PLAT = LINUX
9) sempre nel file Makefile.in modificare la seguente riga:
Codice: Seleziona tutto
BLLIB = /Users/julie/Documents/Boulot/lapack-dev/lapack/trunk/blas_LINUX.a
in
BLLIB = /usr/local/lib/libblas.a
10) sempre nel file Makefile.in modificare la seguente riga:
Codice: Seleziona tutto
CBLIB = ../lib/cblas_$(PLAT).a
in
CBLIB = ../lib/libcblas$(PLAT).a
compilare:
Codice: Seleziona tutto
make
9) copiare la libreria:
Codice: Seleziona tutto
sudo cp lib/libcblas.a /usr/local/lib
10) copiare gli header:
Codice: Seleziona tutto
sudo cp include/*.h /usr/local/include
Installa lapack e lapacke seguendo questa procedura:
1) unpack:
Codice: Seleziona tutto
tar xvf lapack-3.5.0.tgz
2) spostarsi all'interno della directory:
Codice: Seleziona tutto
cd lapack-3.5.0
3) copiare il file:
Codice: Seleziona tutto
cp make.inc.example make.inc
4) aprire il file make.inc e cambiare la seguente riga:
Codice: Seleziona tutto
BLASLIB = ../../librefblas.a
in
BLASLIB = /usr/local/lib/libblas.a
5) compilare:
Codice: Seleziona tutto
make
6) spostarsi nella directory lapacke:
Codice: Seleziona tutto
cd lapacke
Codice: Seleziona tutto
make
spostarsi nella cartella principale:
Codice: Seleziona tutto
cd ..
9) copiare le librerie:
Codice: Seleziona tutto
sudo cp *.a /usr/local/lib
10) copiare gli header:
Codice: Seleziona tutto
sudo cp lapacke/include/*.h /usr/local/include
A questo punto possiamo provare con i file d'esempio del sito http://www.netlib.org/lapack/lapacke.html :
prova1.c
Codice: Seleziona tutto
/* Calling DGELS using row-major order */
#include <stdio.h>
#include <lapacke.h>
/*
gcc -Wall -W -pedantic -O2 -std=c99 prova1.c -o prova1 -llapacke -llapack -ltmglib -lblas -lm -lgfortran
*/
int main (int argc, const char * argv[])
{
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;
int i,j;
m = 5;
n = 3;
nrhs = 2;
lda = 3;
ldb = 2;
info = LAPACKE_dgels(LAPACK_ROW_MAJOR,'N',m,n,nrhs,*a,lda,*b,ldb);
for(i=0;i<n;i++)
{
for(j=0;j<nrhs;j++)
{
printf("%lf ",b[i][j]);
}
printf("\n");
}
return(info);
}
Codice: Seleziona tutto
/* Calling DGELS using column-major order */
#include <stdio.h>
#include <lapacke.h>
/*
gcc -Wall -W -pedantic -O2 -std=c99 prova2.c -o prova2 -llapacke -llapack -ltmglib -lblas -lm -lgfortran
*/
int main (int argc, const char * argv[])
{
double a[5*3] = {1,2,3,4,5,1,3,5,2,4,1,4,2,5,3};
double b[5*2] = {-10,12,14,16,18,-3,14,12,16,16};
lapack_int info,m,n,lda,ldb,nrhs;
int i,j;
m = 5;
n = 3;
nrhs = 2;
lda = 5;
ldb = 5;
info = LAPACKE_dgels(LAPACK_COL_MAJOR,'N',m,n,nrhs,a,lda,b,ldb);
for(i=0;i<n;i++)
{
for(j=0;j<nrhs;j++)
{
printf("%lf ",b[i+ldb*j]);
}
printf("\n");
}
return(info);
}
Codice: Seleziona tutto
/* Calling CGEQRF and CUNGQR to compute Q without workspace querying */
#include <stdio.h>
#include <stdlib.h>
#include <lapacke.h>
#include <cblas.h>
#define MIN(a,b) (((a)<(b))?(a):(b))
#define MAX(a,b) (((a)>(b))?(a):(b))
/*
gcc -Wall -W -pedantic -O2 -std=c99 prova3.c -o prova3 -llapacke -llapack -ltmglib -lblas -lcblas -lm -lgfortran
*/
int main (int argc, const char * argv[])
{
lapack_complex_float *a,*tau,*r,one,zero;
lapack_int info,m,n,lda;
int i,j;
float err=0.0;
m = 10; n = 5; lda = m;
one = lapack_make_complex_float(1.0,0.0);
zero= lapack_make_complex_float(0.0,0.0);
a = calloc(m*n,sizeof(lapack_complex_float));
r = calloc(n*n,sizeof(lapack_complex_float));
tau = calloc(m,sizeof(lapack_complex_float));
for(j=0;j<n;j++)
for(i=0;i<m;i++)
a[i+j*m] = lapack_make_complex_float(i+1,j+1);
info = LAPACKE_cgeqrf(LAPACK_COL_MAJOR,m,n,a,lda,tau);
info = LAPACKE_cungqr(LAPACK_COL_MAJOR,m,n,n,a,lda,tau);
for(j=0;j<n;j++)
for(i=0;i<n;i++)
r[i+j*n]=(i==j)?-one:zero;
cblas_cgemm(CblasColMajor,CblasConjTrans,CblasNoTrans,
n,n,m,&one,a,lda,a,lda,&one,r,n );
for(i=0;i<n;i++)
for(j=0;j<n;j++)
err=MAX(err,cabs(r[i+j*n]));
printf("error=%e\n",err);
free(tau);
free(r);
free(a);
return(info);
}
Codice: Seleziona tutto
/* Calling CGEQRF and CUNGQR to compute Q with workspace querying */
#include <stdio.h>
#include <stdlib.h>
#include <lapacke.h>
#include <cblas.h>
#define MIN(a,b) (((a)<(b))?(a):(b))
#define MAX(a,b) (((a)>(b))?(a):(b))
/*
gcc -Wall -W -pedantic -O2 -std=c99 prova4.c -o prova4 -llapacke -llapack -ltmglib -lblas -lcblas -lm -lgfortran
*/
int main (int argc, const char * argv[])
{
lapack_complex_float *a,*tau,*r,*work,one,zero,query;
lapack_int info,m,n,lda,lwork;
int i,j;
float err;
m = 10; n = 5; lda = m;
one = lapack_make_complex_float(1.0,0.0);
zero= lapack_make_complex_float(0.0,0.0);
a = calloc(m*n,sizeof(lapack_complex_float));
r = calloc(n*n,sizeof(lapack_complex_float));
tau = calloc(m,sizeof(lapack_complex_float));
for(j=0;j<n;j++)
for(i=0;i<m;i++)
a[i+j*m] = lapack_make_complex_float(i+1,j+1);
info = LAPACKE_cgeqrf_work(LAPACK_COL_MAJOR,m,n,a,lda,tau,&query,-1);
lwork = (lapack_int)query;
info = LAPACKE_cungqr_work(LAPACK_COL_MAJOR,m,n,n,a,lda,tau,&query,-1);
lwork = MAX(lwork,(lapack_int)query);
work = calloc(lwork,sizeof(lapack_complex_float));
info = LAPACKE_cgeqrf_work(LAPACK_COL_MAJOR,m,n,a,lda,tau,work,lwork);
info = LAPACKE_cungqr_work(LAPACK_COL_MAJOR,m,n,n,a,lda,tau,work,lwork);
for(j=0;j<n;j++)
for(i=0;i<n;i++)
r[i+j*n]=(i==j)?-one:zero;
cblas_cgemm(CblasColMajor,CblasConjTrans,CblasNoTrans,
n,n,m,&one,a,lda,a,lda,&one,r,n);
err=0.0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
err=MAX(err,cabs(r[i+j*n]));
printf("error=%e\n",err);
free(work);
free(tau);
free(r);
free(a);
return(info);
}
- Alice_Kora
- Prode Principiante
- Messaggi: 8
- Iscrizione: giovedì 26 giugno 2014, 9:52
- Località: Bordeaux-France
Re: Installazione Lapack
INRIA~IMB
Bordeaux-Talence
Bat.A 33 Bureau 168
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 5 ospiti