• Opret dig
  • Glemt adgangskode

User account menu

  • Artikler
  • Forside
  • Forum
  • Nyheder
  • Log ind
Hjem
LinuxIN.dk

Snak med

Opret dig!

Af trafikselskabet | 03.12.2013 11:16

Fedora og BLAS

Programmering
Hej Alle

Jeg roder med noget C++ kode hvor jeg skal anvende BLAS biblioteket for at lave nogle matrix/vector operationer effektivt. Det virker overhovedet ikke på Fedora, men fint på alt andet (Ubuntu, Mac, Windows). Er der en med Fedora der kan prøve at compilere følgende program:

#include
#include
#include
int stuff ( ) {
enum CBLAS_ORDER order;
enum CBLAS_TRANSPOSE transa;

double *a, *x, *y;
double alpha, beta;
int m, n, lda, incx, incy, i;

order = CblasColMajor;
transa = CblasNoTrans;

m = 4; /* Size of Column ( the number of rows ) */
n = 4; /* Size of Row ( the number of columns ) */
lda = 4; /* Leading dimension of 5 * 4 matrix is 5 */
incx = 1;
incy = 1;
alpha = 1;
beta = 0;

a = (double *)malloc(sizeof(double)*m*n);
x = (double *)malloc(sizeof(double)*n);
y = (double *)malloc(sizeof(double)*n);
/* The elements of the first column */
a[0] = 1;
a[1] = 2;
a[2] = 3;
a[3] = 4;
/* The elements of the second column */
a[m] = 1;
a[m+1] = 1;
a[m+2] = 1;
a[m+3] = 1;
/* The elements of the third column */
a[m*2] = 3;
a[m*2+1] = 4;
a[m*2+2] = 5;
a[m*2+3] = 6;
/* The elements of the fourth column */
a[m*3] = 5;
a[m*3+1] = 6;
a[m*3+2] = 7;
a[m*3+3] = 8;
/* The elemetns of x and y */
x[0] = 1;
x[1] = 2;
x[2] = 1;
x[3] = 1;
y[0] = 0;
y[1] = 0;
y[2] = 0;
y[3] = 0;

// Denne er den eneste der betyder noget. Alt andet end "undefined refence to" fejl
// er meget interesante!
cblas_dgemv( order, transa, m, n, alpha, a, lda, x, incx, beta, y, incy );
/* Print y */
for( i = 0; i < n; i++ )
printf(" y%d = %f\n", i, y[i]);
free(a);
free(x);
free(y);
return 1;
}


Filen kan kompileres med følgende kommando:

gcc filnavn.cpp -L/usr/lib64 -L/usr/lib64/atlas -lstdc++ -lm -lcblas -lblas -latlas -o output


Jeg vil mene at følgende er tilstrækkeligt for YUM

sudo yum install gcc blas blas-devel atlas atlas-devel


Husk at installerede pakker kan fjernes igen hvis man ikke ønsker dem længere med
sudo yum history
sudo yum history undo NR_SOM_OVERSTÅENDE_KOMMANDO_GAV


Det underlige ved fejlen er at bliver inkluderet og at compileren kender syntaxen for kommandoen - det er som om det er implementationen af funktionerne der ikke kan findes, men de skulle da gerne følge med blas-devel osv.
Jeg har sakset overstående kode fra en pålidelig kilde, så det er ikke syntax fejl og lignende. Min compiler kan ikke finde implementationen af cblas_dgemv funktionen.

Er der nogen der har mod på at tage et kig? Eventuelt folk med openSUSE, jeg ved ikke om det måske er rpm pakkerne der giver problemer.
  • Log ind eller opret dig for at tilføje kommentarer

Kommentarer11

# 1

11 år 6 måneder siden

Permalink

Indsendt af Looop den 3. december 2013 kl. 15:29

Permalink

Når jeg prøver at

Når jeg prøver at kompilere på Fedora, får jeg for det først af vide at der ikk er en udbyder af atlas
og en komipleringsfejl:
gcc: error trying exec 'cclplus': execvp: No such file or directory
  • Log ind eller opret dig for at tilføje kommentarer

# 2

11 år 6 måneder siden

Permalink

Indsendt af frugtoase den 3. december 2013 kl. 18:39

Permalink

#0 #1 Er pakken gcc-c++

#0 #1 Er pakken gcc-c++ installeret?
  • Log ind eller opret dig for at tilføje kommentarer

# 3

11 år 6 måneder siden

Permalink

Indsendt af Looop den 3. december 2013 kl. 20:07

Permalink

#2 på mit Fedora ja

#2 på mit Fedora ja
  • Log ind eller opret dig for at tilføje kommentarer

# 4

11 år 6 måneder siden

Permalink

Indsendt af trafikselskabet den 3. december 2013 kl. 22:03

Permalink

gcc-c++

hmmm... underligt. Har du prøvet med
yum install gcc-c++
?
  • Log ind eller opret dig for at tilføje kommentarer

# 5

11 år 6 måneder siden

Permalink

Indsendt af Looop den 3. december 2013 kl. 23:11

Permalink

#4 Ja! jeg koder selv C og

#4 Ja! jeg koder selv C og C++ hver dag :) så den er installeret
  • Log ind eller opret dig for at tilføje kommentarer

# 6

11 år 6 måneder siden

Permalink

Indsendt af trafikselskabet den 4. december 2013 kl. 10:51

Permalink

Atlas skulle gerne være

Atlas skulle gerne være tilgængeligt fra YUM fra update repo. Din kompilerings fejl er jeg fuldstændig blank over :/

Hjælper det hvis du omdøber stuff() funktionen til main () ?
  • Log ind eller opret dig for at tilføje kommentarer

# 7

11 år 6 måneder siden

Permalink

Indsendt af mrbrown79 den 4. december 2013 kl. 15:50

Permalink

Er der en med Fedora der

#0: Er der en med Fedora der kan prøve at compilere følgende program

På Fedora 18...

$ gcc filnavn.cpp -L/usr/lib64 -L/usr/lib64/atlas -lstdc++ -lm -lcblas -lblas -latlas -o output
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../lib64/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
/tmp/cc4ZHApM.o: In function `stuff()':
filnavn.cpp:(.text+0x390): undefined reference to `cblas_dgemv(CBLAS_ORDER, CBLAS_TRANSPOSE, int, int, double, double const*, int, double const*, int, double, double*, int)'
collect2: error: ld returned 1 exit status

  • Log ind eller opret dig for at tilføje kommentarer

# 8

11 år 6 måneder siden

Permalink

Indsendt af trafikselskabet den 4. december 2013 kl. 20:45

Permalink

Mr Brown

Det er min fejl. Omdøb stuff() funktionen til main(). Dvs. skift linje 4 fra

int stuff ( ) {

til

int main() {


Jeg sætter stor pris på Jeres indsats :)
  • Log ind eller opret dig for at tilføje kommentarer

# 9

11 år 6 måneder siden

Permalink

Indsendt af trafikselskabet den 4. december 2013 kl. 20:46

Permalink

Hov

Hov, undskyld. Det var bare en af fejlene. Du får helt samme fejl som jeg.

undefined reference to `cblas_dgemv(CBLAS_ORDER, CBLAS_TRANSPOSE, int, int, double, double const*, int, double const*, int, double, double*, int)'


Verdammt!
  • Log ind eller opret dig for at tilføje kommentarer

# 10

11 år 6 måneder siden

Permalink

Indsendt af zity den 10. december 2013 kl. 19:52

Permalink

Det ser ud til at linkeren

Det ser ud til at linkeren ikke kan få fat i det rigtige bibliotek. Prøv evt. at bruge -lsatlas i stedet for -latlas

Noget helt andet er, at hvis du vil have en god ydelse så SKAL du selv kompilere atlas, så biblioteket bliver optimeret til den computer det kører på.

EDIT: Alternativt kan du prøve at linke den op mod GSL ved at bruge -lgslcblas. Du skal muligvis også bruge

#include

i kildekoden i stedet.
  • Log ind eller opret dig for at tilføje kommentarer

# 11

11 år 6 måneder siden

Permalink

Indsendt af pawsen den 11. december 2013 kl. 18:45

Permalink

Openblas

I stedet for at kompilere Atlas selv, anbefaler jeg du skifter til Openblas. Openblas er hurtigere, meget nemmere at kompilere og understøtter mpi "out of the box".

Openblas
  • Log ind eller opret dig for at tilføje kommentarer

Svar søges

llumos Unix-operativsystem, 0
Den er go 0
14. februar = I Love Free Software Day 0
Lokal fil-deling - for de dovne. 0
Linux fra begynder til professionel af O'Reilly 0

Seneste aktivitet

PCLinuxOS 24
Gode anmeldelser Zorin OS 17.3 2
"Intet realistisk alternativ" - mig i r*ven 15
Nulstilling af adgangskode 3
Ingen Mint 5
Linux App Store Flathub når 3 milliarder downloads 2
Digitaliseringsministeriet sætter gang i pilotprojekt om digital suverænitet 3
Mest sikker webbrowser 5
Firefox 2
Privatbeskeder 7
Backup/synkronisering? 3
BigLinux 5
Chatgpt satire 1
Læsning af databasefil i Firefox 2
Vanilla OS 15
Pepsi Challenge 4
Linuxin er nu migreret til Drupal 11 13
Et Dansk alternativ til Facebook 18
Ekstern Blu-ray-brænder, der fungerer med PCLinuxOS 3
Københavns og Aarhus Kommune dropper MS 9

© 2025 Linuxin og de respektive skribenter

Oprettet og drevet af nørder siden 2004 !