🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.java
Article #141811

Re: Szybkość Javy wg Horstmanna a testy...

#141811
From: jarekr
Date: Wed, 22 Oct 2008 19:51
59 lines
4847 bytes
On 22 Paź, 20:52, Marcin Mielżyński <l...@gazeta.pl> wrote:

>
> Tu nie ma żadnego jni i wcale niewiele się zmieni w 7ce. Metody typu
> "arraycopy", "indexOf", "hashCode" etc, to są tzw intrinsics
> (vmSymbols.hpp) (Nawet InvokeDynamic bazuje na intrinsics a nie na
> dodatkowym rozkazie, np MethodHandle, AnonymousClassLoader, czy pool
> patchery). One są bezpośrednio stubowane w natywny kod, ale przedtem ich
> argumenty podlegają takim samym optymalizacjom jak np. GVN na grafie
> SSA/MachNode jak normalny kod (przy "arraycopy" następuje nawet
> eliminacja sprawdzeń zasięgu dla tablic, czy src > 0 itp).

Dokładnie o tym napisałem. Jeszcze w kodzie mustanga
(library_calls.cpp) - to był niezły syf  i dopisanie własnego
intrinsica było co najmniej toporne -  a w 7ce zostało całkiem ładnie
uporządkowane - więc już się zmieniło,
bo mogę sobie choćby na potrzeby testów o wiele łatwiej coś dopisać.
(trochę requestów jest o dopisanie "native wrapperów" przy kilku
funkcjach (z Arrays choćby) widziałem) .


> W przypadku tego benchmarku pechowy jest OSR, czyli rekompilacja w locie
> (w czasie działania pętli) i resynchronizacja ramki interpretera i stosu
> natywnego.

U siebie ten czynnik wyeliminowałem od razu - dokładnie poprzez
wprowadzenie małych metod (wywaliłem też bitset). I  doszedłem do kodu
prawie tak szybkiego jak w C++ (na 100 razy większym n - żeby miało
sens mierzenie). (gdzieś na początku tej dyskusji chyba listing tak
przerobiony z dodaniem warmupu podałem)

Generalnie udało mi się uzyskać wersję w javie działającą na 7.5
sekundy (tablica boolean zamiast bitset, wydzielone metody. warmup) -
przy czym na tym samym sprzęcie  wersja GCC dawało mi 5.5sekundy
(około).

I na koniec dziś porównywałem listingi  +PrintOptoAssembly z wersją z
gcc.
Niestety nie starczyło mi czasu na analizę juz - ale chyba problem
jest w zupełnie śmiesznym miejscu.
Skubaniec (C2) nie wyłączył range_check na tablicach. i wrzuca w
każdym przebiegu pętli sprawdzenie górnego zakresu. .

                         while(k<=n)
                        {
                                b.clear(k); (u mnie tu przerzuciłem
na b[k] = false; (żeby wywalić bitset)
                                k = k + i;
                        }

Zachodzi podejrzenie - (cokolwiek wydaje mi się dziwne) - że to może
być ten narzut( ale to jest bardzo jeszcze niesprawdzone).  Niestety
nie wiem czy będę miał czas żeby to dokładnie sprawdzić.
Przede wszystkim  nie bardzo rozumiem dlaczego nie wywalił range
checka - chcę to zdebugować (nie wiem jakie są zasady dokładne
eliminacji range_check ale kod (JVM) w tym miejscu jest dość
przejrzysty  -więc się dowiem) .
--
jarekr
Technical Details
Message-ID: <5d422fb7-c7f6-4f2a-9f1c-250ab2ed14d4@a70g2000hsh.googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.nask.pl!news.nask.org.pl!newsfeed00.sul.t-online.de!t-online.de!border2.nntp.dca.giganews.com!nntp.giganews.com!postnews.google.com!a70g2000hsh.googlegroups.com!not-for-mail
References: <gdg318$g5g$1@nemesis.news.neostrada.pl> <gdi45f$ohu$1@inews.gazeta.pl> <ed72be02-c2b9-469d-a6b4-f53f5d7eda3a@w1g2000prk.googlegroups.com> <gdi51u$slu$1@inews.gazeta.pl> <248a2f73-1b18-47d4-83cf-5bd9899b37b4@i20g2000prf.googlegroups.com> <gdi736$8me$3@inews.gazeta.pl> <ea528cd6-ddb9-4f02-bd8d-813de51b4133@g17g2000prg.googlegroups.com> <gdimls$fpn$1@atlantis.news.neostrada.pl> <26ba6ecf-b028-4c46-b9c1-9238ed508cdd@v13g2000pro.googlegroups.com> <gdiq18$nrg$1@atlantis.news.neostrada.pl> <861b478a-95cc-4062-829c-ee5e144c6f0a@t39g2000prh.googlegroups.com> <gdj1qo$61e$1@nemesis.news.neostrada.pl> <1b9a2fd1-3d19-43e1-ad98-ce4387fb5c61@34g2000hsh.googlegroups.com> <48fe291a$1@news.home.net.pl> <deca15ae-9182-4236-a18a-419917183628@l62g2000hse.googlegroups.com> <gdnspv$mml$1@news.onet.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.nask.pl!news.nask.org.pl!newsfeed00.sul.t-online.de!t-online.de!border2.nntp.dca.giganews.com!nntp.giganews.com!postnews.google.com!a70g2000hsh.googlegroups.com!not-for-mail
From: jarekr <jratajski@gmail.com>
Newsgroups: pl.comp.lang.java
Subject: Re: Szybkość Javy wg Horstmanna a testy...
Date: Wed, 22 Oct 2008 12:51:19 -0700 (PDT)
Organization: http://groups.google.com
Lines: 66
Message-ID: <5d422fb7-c7f6-4f2a-9f1c-250ab2ed14d4@a70g2000hsh.googlegroups.com>
References: <gdg318$g5g$1@nemesis.news.neostrada.pl> <gdi45f$ohu$1@inews.gazeta.pl>  <ed72be02-c2b9-469d-a6b4-f53f5d7eda3a@w1g2000prk.googlegroups.com>  <gdi51u$slu$1@inews.gazeta.pl> <248a2f73-1b18-47d4-83cf-5bd9899b37b4@i20g2000prf.googlegroups.com>  <gdi736$8me$3@inews.gazeta.pl> <ea528cd6-ddb9-4f02-bd8d-813de51b4133@g17g2000prg.googlegroups.com>  <gdimls$fpn$1@atlantis.news.neostrada.pl> <26ba6ecf-b028-4c46-b9c1-9238ed508cdd@v13g2000pro.googlegroups.com>  <gdiq18$nrg$1@atlantis.news.neostrada.pl> <861b478a-95cc-4062-829c-ee5e144c6f0a@t39g2000prh.googlegroups.com>  <gdj1qo$61e$1@nemesis.news.neostrada.pl> <1b9a2fd1-3d19-43e1-ad98-ce4387fb5c61@34g2000hsh.googlegroups.com>  <48fe291a$1@news.home.net.pl> <deca15ae-9182-4236-a18a-419917183628@l62g2000hse.googlegroups.com>  <gdnspv$mml$1@news.onet.pl>
NNTP-Posting-Host: 77.113.200.218
Mime-Version: 1.0
X-Trace: posting.google.com 1224705080 2277 127.0.0.1 (22 Oct 2008 19:51:20 GMT)
X-Complaints-To: groups-abuse@google.com
NNTP-Posting-Date: Wed, 22 Oct 2008 19:51:20 +0000 (UTC)
Complaints-To: groups-abuse@google.com
Injection-Info: a70g2000hsh.googlegroups.com; posting-host=77.113.200.218;  posting-account=8VcG5goAAAABOIouhSJEZq2WqNug-5DI
User-Agent: G2/1.0
X-HTTP-UserAgent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.17)  Gecko/20080829 Firefox/2.0.0.17 (.NET CLR 3.5.30729),gzip(gfe),gzip(gfe)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit