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: 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 ); . . . .
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 ) }; . . . .
float alpha = 1; float beta = 1; cblas_cgemv( CblasRowMajor, CblasNoTrans, 2, 2, & alpha, A, 2, X, 1, & beta, Y, 1 );
|
|
pekfos |
» 2015-07-30 13:12:05 |
|
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. |
|
pekfos |
» 2015-07-30 14:10:16 Próbuj 2 razy większych tablic. float X[ 4 ] = { creal( z3 ), cimag( z3 ), creal( z1 ), cimag( z1 ) };
|
|
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. |
|
« 1 » |