niedziela, marca 10, 2013

GCJ mnie przerosło ;-)

Trzeba przyznać, opanowanie GCJ mnie przerosło.

Mam na RPi dwa programy w Java'ie które robią dziwne rzeczy.
Jeden co 10 minut zagląda na Google+ w poszukiwaniu postów z tagiem #toBlogger (coraz rzadziej go używam, ale jakbym chciał użyć to mam narzędzie ;-)) i w razie jakieś znajdzie w moim strumieniu to je repostuje tutaj na bloga.
Drugi liczy podobne posty.

Ten do podobnych postów potrzebuje 2-3 godzin na wykonanie... już go próbowałem przyspieszyć przy pomocy zamiany całej arytmetyki ze zmiennoprzecinkowej na stałoprzecinkową... pomogło ale nie aż tak.
No to teraz chciałbym spróbować z przekompilowaniem tego na GCJ, testy wykazały że arytmetyka stałoprzecinkowa jest o wiele szybsza w programach skompilowanych do kodu natywnego przy pomocy GCJ niż wykonywanych przez OpenJDK na RPi (na x86 z maszyną od Sun/Oracle to prawda nie będzie).

Dla porównania program liczący numerycznie całkę z e-x2 od -10 do 10 w 10000 kroków potrzebuje na wykonanie około 40 ms gdy używa się OpenJDK i tylko 9 gdy jest skompilowany przy pomocy GCJ. To są akurat wyniki dla liczb zmiennoprzecinkowych, ale  dla stałoprzecinkowych jest podobnie.

I jest tylko 1 problem ;-)
Nie umiem zmusić GCJ do skompilowania programu złożonego z więcej niż 1 klasy :-)

Niby proste:
gcj --main=Speed -O2 -o speed Speed.java

działa, ale kompiluje pojedynczą klasę.

Próbowałem różnych ataków, zastępując nawet sourcepath z javaca przy pomocy classpath i nic...

Potrafię skompilować pojedynczą klasę,  więcej nie umiem :-) szukałem po sieci, ale jak na razie chyba źle pytałem bo nie znalazłem niczego pomocnego....

I tak GCJ mnie przerosło ;-)


Podobne postybeta
Java i Chrome OS część 2 :-)
C# i Java okazały się szybsza od Pythona :-) [było Java okazała się szybsza od C# i Pythona]
32 bity vs. 64 bity, tym razem C++ ;-)
Język Go dla Windows :-)
Java na Raspberry Pi zaskakuje ;-)