Thursday, February 12, 2009

Damnu sin, GSL!

Unu parto de ĉi tiu programon estas kalkuilo de ĉiu pianoklava laŭtalo. Ĝi utiligas 96 klavatonojn, kiu inkluzivas ĉiun pianen ludeblan tonon. Ĝi faras tion per krei matricon kiu enhavas Gaussian-normalan kurbojn. Ĝi aspektas kiel ĉi tio:

Figuro de meze C-a octavo. Notu ke la reala programo enhavos plenan pianan oktavaron.

Ĝi tiam multiplikas per la une dimensia matricon, kiu enhavas la valorojn de la frekvencingoj de Math::FFTW.

Ĉi tiu esence funkcias per kalkuili la sumon de ĉiu pianoklava atingopovo kiel ĝi okazas en la muzikeco.

Neeviteble la procezo uzas MULTAJN matricajn kalkuladojn inter GRANDEGAJ matricoj, kaj kreas multajn novmatricojn dum mallonga fojon, kiu tiam uzofinas ilin. Ĉi tiuj matricoj devas malekzisti post la funkcia regivanto.

Unue, mi elektis uzi la simplan matrican librejo, name Math::MatrixReal. Ĝi estis malrapida kaj mi devis skribi ĉirkaŭiron por kreado de la grandegaj matricoj. Ĝi verkis! ... sed ĝi estis M-A-L-R-A-P-I-D-A.

Mi elektis aliigi la programon uzi C-librejon kiu esperante plirapide kalkuli. Mi rave trovis Math::GSL, kiu havis specifikan funkciaron por matricoj per malmultaj malbezonaj komputoj. Ĝi havis vastan bazan linie algebran sistemon (BLAS) kiu faris ĉion mi devis fari! Kaj ankaŭ ĝi estis la santa GNU-a Scientifika Librejon! Jes!

Post la aliiĝi mi rimarkis ke dum la procezado de muziko, ĝi nun utiligis ~70 milionon batojn da storaĝo. Antaŭ ĝi estis utiliganta ~200 milionon batojn da storaĝo.

Ĉio ne estis bona. Nun mi havis problemon. Plu procezade la programo utiligis pli kaj pli storaĝon. Eventuale, ĝi utiligis 2 bilonon da batoj!

Mi eventuale sciiĝis la problemon. La GSL matricoj konsistas el du partoj: unu en Perl kaj unu en C. Kiam la Perl-a parto malekzistiĝis, la C-a parto survivis en storaĝo.

Bonŝance, mi legis la manlibrojn kaj sciiĝis ke oni devas fari ĉi tion:

use Math::GSL::Matrix qw/ :all /;

my $matrix = Math::GSL::Matrix->new($rows, $cols);

# ...

# purigu sin!
&gsl_matrix_free($matrix->raw);

Post tio, ĝi devas pli facile kuri.

No comments:

Post a Comment