Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Bibliteka OpenBlas

Ostatnio zmodyfikowano 2015-07-31 11:57
Autor Wiadomość
Anim
Temat założony przez niniejszego użytkownika
Bibliteka OpenBlas
» 2015-07-30 12:03:20
cześć :)

Czy ktoś może korzystał z tej biblioteki ?  W szczególności chodzi mi o funkcję cblas_cgemv. Otóż problem polega na tym, że jest to funkcja mnożąca macierze zespolone. Jednak sama funkcja żąda macierzy typu float ... Jak przekazać liczby zespolone ? lub inaczej, jak w sumie działa ta funkcja? skoro przyjmuje tylko liczby typu float, to w którym momencie porządkuje sobie liczby na część zespoloną i rzeczywistą ?

Mam coś takiego:

C/C++
//deklaracja liczb zespolonych
openblas_complex_float z1;
z1 = openblas_make_complex_float( 1.0, 1.0 );
openblas_complex_float z2;
z2 = openblas_make_complex_float( 0.0, 0.0 );
openblas_complex_float z3;
z3 = openblas_make_complex_float( 1.0, 0.0 );
.
.
.
.
// deklaracja tablic -> niestety to nie jest dobry sposób
float X[ 2 ] = { creal( z3 ) + cimag( z3 ), creal( z1 ) + cimag( z1 ) };
float Y[ 2 ] = { creal( z2 ) + cimag( z2 ), creal( z2 ) + cimag( z2 ) };
float A[ 4 ] = { creal( z1 ) + cimag( z1 ), creal( z2 ) + cimag( z2 ), creal( z2 ) + cimag( z2 ), creal( z1 ) + cimag( z1 ) };
.
.
.
.
//wywołanie funkcji cgemv
float alpha = 1;
float beta = 1;
cblas_cgemv( CblasRowMajor, CblasNoTrans, 2, 2, & alpha, A, 2, X, 1, & beta, Y, 1 );
P-135433
pekfos
» 2015-07-30 13:12:05
P-135437
Anim
Temat założony przez niniejszego użytkownika
» 2015-07-30 14:01:01
Przeglądałem te linki wielokrotnie... Natomiast problem jest tego typu, że w poprzedniej wersji Blasa - fortranowej można było przekazać do funkcji cgemv tablice z klasy complex <float>....natomiast w C++ biblioteka ta wymaga tablicy typu FLOAT dla funkcji cblas_cgemv...przy czym, gdy przekażę takową tablicę to niestety funkcja wyrzuca jakieś śmieciowe wyniki (braku składnika zespolonego nie traktuje jako 0,a gdy jest składnik zespolony, to wyrzuca cannot convert complex float to float), i nie wiem właśnie co dzieje się w środku tej funkcji, niestety dokumentacja opisująca funkcje jest uboga. Nadmienię, że wszystkie wartości do funkcji podaję poprawnie (a wiem to stąd, że przy innych funkcjach tego typu wszystko jest w porządku, np. cblas_dgemv). Nie ma problemu z funkcjami s-single precision, ani d -double precision <w tych funkcjach nie ma problemu przekazania floatów>, problem jest z c - complex,single precision.
P-135442
pekfos
» 2015-07-30 14:10:16
Próbuj 2 razy większych tablic.
C/C++
float X[ 4 ] = { creal( z3 ), cimag( z3 ), creal( z1 ), cimag( z1 ) };
P-135447
Anim
Temat założony przez niniejszego użytkownika
» 2015-07-31 11:57:50
Niestety również nie działa....hm...szkoda, że nie można znaleźć dobrej dokumentacji do tej biblioteki.
P-135521
« 1 »
  Strona 1 z 1