eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › int 32, int 64, java
Ilość wypowiedzi w tym wątku: 12

  • 1. Data: 2009-08-02 11:05:44
    Temat: int 32, int 64, java
    Od: mgk <m...@w...pl>

    Przepraszam jesli wiadomość zamieszczam w złym miejscu lub robię coś
    nie tak. Dawno już nie korzystalem z grupy dyskusyjnej.

    Napisałem prosty test (kod poniżej) wykonujący po prostu miliard
    mnożeń liczby 32bitowej, oraz miliard mnożeń liczby 64bitowej. Czas
    obu operacji jest mierzony i wyświetlany. Testowałem go w środowisku
    32 oraz 64bit (oczywiście w środowisku 64bit była java 64bit).
    Testowałem na Linuxie oraz WIndowsie (czyli 4 testu w sumie Linux 32 i
    64bit, Windows 32 i 64 bit).
    Wyniki jakie dostałem dla linuxa 32bit sa zastanawiające, ale po
    kolej.

    Pod Windows 32bit wynik:
    time32: 1753 time64: 4880

    Pod Windows 64bit (i java 64) wynik:
    time32: 432 time64: 446

    Czyli jak mozna sie bylo spodziewac czas operacji w srodowisku 64bit
    jest praktycznie rowny. Chociaz dziwi troche ze czas wykonania
    operacji 32bitowej jest 3 razy szybszy...
    Ale teraz jeszcze ciekawsze. Wynik na Linuxie 32 bit (który jest
    prawie identyczny z linuxem 64bit):

    time32: 426 time64: 569

    Nie pomyliłem się. Do napisania tego testu zainspirowały mnie wyniki
    wydajności innego mojego programu (silnika szachowego) w którym jest
    identyczna zależność (wydajność w windows 32bit jest dużo slabsza niz
    na linux 32, 64 czy windows 64. I to nawet jak nie używam long-ow).

    Nie rozumiem dlaczego wyniki na Linuxie 32bit są tak dobre jak na
    Linux 64bit, czy Widnows 64 bit. Albo inaczej. Dlaczego w takim razie
    na Windows 32bit są tak słabe?

    Czy Linux 32bit potrafi jakoś wykorzystać 64bitowe rejestry?
    Czy to w Windows 32bit coś jest "zwalone"? A może w implementacji javy
    32bit pod windows jest problem? No bo gdyby tylko o rejestry chodziło
    to czemu mnożenie 32bitowych wartości wypada i tak 3 razy wolniej pod
    windows 32bit niż w pozostałych.

    A oto kod (tak wiem, ze jest brzydki. To tylko program testujacy):

    int k = 5;
    long time = System.currentTimeMillis();
    for (int i = 0; i < N; ++i)
    {
    k = k * 13 + 12345;
    }
    time = System.currentTimeMillis() - time;

    long l = 5;
    long time2 = System.currentTimeMillis();
    for (int i = 0; i < N; ++i)
    {
    l = l * 13 + 12345;
    }
    time2 = System.currentTimeMillis() - time2;

    System.out.println("k: " + k + " l: " + l);
    System.out.println("time32: " + time + " time64: " + time2);


  • 2. Data: 2009-08-02 12:15:02
    Temat: Re: int 32, int 64, java
    Od: mgk <m...@w...pl>

    Chcialem tylko jeszcze dodac ze test to byl program w Javie.

    W Javie long jest zawsze 64bit.


  • 3. Data: 2009-08-02 13:04:38
    Temat: Re: int 32, int 64, java
    Od: A.L. <a...@a...com>

    On Sun, 2 Aug 2009 05:15:02 -0700 (PDT), mgk <m...@w...pl> wrote:

    >Chcialem tylko jeszcze dodac ze test to byl program w Javie.
    >

    A jak mierzyles ten czas?...

    A.L.


  • 4. Data: 2009-08-02 13:28:51
    Temat: Re: int 32, int 64, java
    Od: "Mariusz Marszałkowski" <b...@N...gazeta.pl>

    mgk <m...@w...pl> napisał(a):

    > Czyli jak mozna sie bylo spodziewac czas operacji w srodowisku 64bit

    No właśnie, zrób lepszy pomiar czasu. Zmierz czas pracy procesora, a nie
    czas który upłynął od startu do zakończenia. Pod linuxem jest spacjalna
    komenda, chyba "times". Pod windowsem nie umiem nic doradzić.

    > Do napisania tego testu zainspirowa=B3y mnie wyniki wydajno=B6ci innego
    > mojego programu (silnika szachowego) w kt=F3rym jest

    Może to przypadkiem silnik "Nesik" o którym rozmawialiśmy ostatnio na
    progszach?

    Pozdrawiam


    --
    Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/


  • 5. Data: 2009-08-02 13:47:55
    Temat: Re: int 32, int 64, java
    Od: A.L. <a...@a...com>

    On Sun, 2 Aug 2009 13:28:51 +0000 (UTC), "Mariusz Marszałkowski"
    <b...@N...gazeta.pl> wrote:

    >mgk <m...@w...pl> napisał(a):
    >
    >> Czyli jak mozna sie bylo spodziewac czas operacji w srodowisku 64bit
    >
    >No właśnie, zrób lepszy pomiar czasu. Zmierz czas pracy procesora, a nie
    >czas który upłynął od startu do zakończenia. Pod linuxem jest spacjalna
    >komenda, chyba "times". Pod windowsem nie umiem nic doradzić.

    Lava ma metode System.nanoTime() podajaca czas z rozdzielczoscai
    nanosekundowa. Wszystkie inne sposoby licznie czasu sa funta klakow
    niewarte

    A.L.


  • 6. Data: 2009-08-02 14:10:52
    Temat: Re: int 32, int 64, java
    Od: A.L. <a...@a...com>

    On Sun, 02 Aug 2009 08:47:55 -0500, A.L. <a...@a...com> wrote:

    >On Sun, 2 Aug 2009 13:28:51 +0000 (UTC), "Mariusz Marszałkowski"
    ><b...@N...gazeta.pl> wrote:
    >
    >>mgk <m...@w...pl> napisał(a):
    >>
    >>> Czyli jak mozna sie bylo spodziewac czas operacji w srodowisku 64bit
    >>
    >>No właśnie, zrób lepszy pomiar czasu. Zmierz czas pracy procesora, a nie
    >>czas który upłynął od startu do zakończenia. Pod linuxem jest spacjalna
    >>komenda, chyba "times". Pod windowsem nie umiem nic doradzić.
    >
    >Lava ma metode

    Java

    A.L.


  • 7. Data: 2009-08-02 14:13:17
    Temat: Re: int 32, int 64, java
    Od: Mateusz Loskot <s...@s...net>

    A.L. wrote:
    > On Sun, 2 Aug 2009 13:28:51 +0000 (UTC), "Mariusz Marszałkowski"
    > <b...@N...gazeta.pl> wrote:
    >
    >> mgk <m...@w...pl> napisał(a):
    >>
    >>> Czyli jak mozna sie bylo spodziewac czas operacji w srodowisku 64bit
    >> No właśnie, zrób lepszy pomiar czasu. Zmierz czas pracy procesora, a nie
    >> czas który upłynął od startu do zakończenia. Pod linuxem jest spacjalna
    >> komenda, chyba "times". Pod windowsem nie umiem nic doradzić.
    >
    > Lava ma metode System.nanoTime() podajaca czas z rozdzielczoscai
    > nanosekundowa.

    O ile implementacja nanoTime() bazuje na odpowiednim API systemowym.

    Sun pisze [1]

    System.nanoTime() is implemented using the
    QueryPerformanceCounter/QueryPerformanceFrequency API (if available,
    else it returns currentTimeMillis*10^6

    [1] http://blogs.sun.com/dholmes/entry/inside_the_hotspo
    t_vm_clocks

    Pozdrawiam
    --
    Mateusz Loskot, http://mateusz.loskot.net
    Charter Member of OSGeo, http://osgeo.org


  • 8. Data: 2009-08-02 14:50:46
    Temat: Re: int 32, int 64, java
    Od: A.L. <a...@a...com>

    On Sun, 02 Aug 2009 15:13:17 +0100, Mateusz Loskot
    <s...@s...net> wrote:

    >A.L. wrote:
    >> On Sun, 2 Aug 2009 13:28:51 +0000 (UTC), "Mariusz Marszałkowski"
    >> <b...@N...gazeta.pl> wrote:
    >>
    >>> mgk <m...@w...pl> napisał(a):
    >>>
    >>>> Czyli jak mozna sie bylo spodziewac czas operacji w srodowisku 64bit
    >>> No właśnie, zrób lepszy pomiar czasu. Zmierz czas pracy procesora, a nie
    >>> czas który upłynął od startu do zakończenia. Pod linuxem jest spacjalna
    >>> komenda, chyba "times". Pod windowsem nie umiem nic doradzić.
    >>
    >> Lava ma metode System.nanoTime() podajaca czas z rozdzielczoscai
    >> nanosekundowa.
    >
    >O ile implementacja nanoTime() bazuje na odpowiednim API systemowym.

    O ile znam Linuksa, to Linuks na pewno w takie duperele sie nie bawi

    A.L.


  • 9. Data: 2009-08-02 15:02:32
    Temat: Re: int 32, int 64, java
    Od: A.L. <a...@a...com>

    On Sun, 02 Aug 2009 15:13:17 +0100, Mateusz Loskot
    <s...@s...net> wrote:

    >A.L. wrote:
    >> On Sun, 2 Aug 2009 13:28:51 +0000 (UTC), "Mariusz Marszałkowski"
    >> <b...@N...gazeta.pl> wrote:
    >>
    >>> mgk <m...@w...pl> napisał(a):
    >>>
    >>>> Czyli jak mozna sie bylo spodziewac czas operacji w srodowisku 64bit
    >>> No właśnie, zrób lepszy pomiar czasu. Zmierz czas pracy procesora, a nie
    >>> czas który upłynął od startu do zakończenia. Pod linuxem jest spacjalna
    >>> komenda, chyba "times". Pod windowsem nie umiem nic doradzić.
    >>
    >> Lava ma metode System.nanoTime() podajaca czas z rozdzielczoscai
    >> nanosekundowa.
    >
    >O ile implementacja nanoTime() bazuje na odpowiednim API systemowym.
    >
    >Sun pisze [1]
    >
    >System.nanoTime() is implemented using the
    >QueryPerformanceCounter/QueryPerformanceFrequency API (if available,
    >else it returns currentTimeMillis*10^6
    >
    >[1] http://blogs.sun.com/dholmes/entry/inside_the_hotspo
    t_vm_clocks
    >

    "If you are interested in measuring/calculating elapsed time, then
    always use System.nanoTime(). On most systems it will give a
    resolution on the order of microseconds. Be aware though, this call
    can also take microseconds to execute on some platforms."

    A.L.


  • 10. Data: 2009-08-02 15:04:20
    Temat: Re: int 32, int 64, java
    Od: Mateusz Loskot <s...@s...net>

    A.L. wrote:
    > On Sun, 02 Aug 2009 15:13:17 +0100, Mateusz Loskot
    > <s...@s...net> wrote:
    >
    >> A.L. wrote:
    >>> On Sun, 2 Aug 2009 13:28:51 +0000 (UTC), "Mariusz Marszałkowski"
    >>> <b...@N...gazeta.pl> wrote:
    >>>
    >>>> mgk <m...@w...pl> napisał(a):
    >>>>
    >>>>> Czyli jak mozna sie bylo spodziewac czas operacji w srodowisku 64bit
    >>>> No właśnie, zrób lepszy pomiar czasu. Zmierz czas pracy procesora, a nie
    >>>> czas który upłynął od startu do zakończenia. Pod linuxem jest spacjalna
    >>>> komenda, chyba "times". Pod windowsem nie umiem nic doradzić.
    >>> Lava ma metode System.nanoTime() podajaca czas z rozdzielczoscai
    >>> nanosekundowa.
    >> O ile implementacja nanoTime() bazuje na odpowiednim API systemowym.
    >>
    >> Sun pisze [1]
    >>
    >> System.nanoTime() is implemented using the
    >> QueryPerformanceCounter/QueryPerformanceFrequency API (if available,
    >> else it returns currentTimeMillis*10^6
    >>
    >> [1] http://blogs.sun.com/dholmes/entry/inside_the_hotspo
    t_vm_clocks
    >>
    >
    > "If you are interested in measuring/calculating elapsed time, then
    > always use System.nanoTime(). On most systems it will give a
    > resolution on the order of microseconds. Be aware though, this call
    > can also take microseconds to execute on some platforms."

    Tak, właśnie o tym pisałem, że przed użyciem warto
    zweryfikować czy "black box" nanoTime() na danej platformie
    robi to, czego się oczekuje.

    Pozdrawiam,
    --
    Mateusz Loskot, http://mateusz.loskot.net
    Charter Member of OSGeo, http://osgeo.org

strony : [ 1 ] . 2


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: