Mostra notizie nelle discussioni
  • Avatar
    ☺
    Scritto da
    il 2010-11-16 18:37:00.0 alle 2010-11-16 18:37:00.0
    Trollate totali: 4459
    alex,tg ha ragione e sassofono no
    Inizio divisioni: 1289928957
    Divisioni: 22
    Inizio lookups: 1289928979
    Lookups: 19


    su un pentium III a 700 mhzRotola dal ridereGeek
    • Avatar
      Scritto da
      Non Autenticato
      il 2010-11-16 18:40:00.0 alle 2010-11-16 18:40:00.0
      Re: alex,tg ha ragione e sassofono no
      - Scritto da: Caccola
      >
      Inizio divisioni: 1289928957
      > Divisioni: 22
      > Inizio lookups: 1289928979
      > Lookups: 19

      >
      > su un pentium III a 700 mhzRotola dal ridereGeek

      compilatore?

      abbiamo già appurato in chat che gcc ottimizza via la divisione con moltiplicazioni e shift. Risultato: il lookup è circa il 40% più lento su un core2 duo 3 Ghz
      • Avatar
        ☺
        Scritto da
        il 2010-11-16 18:50:00.0 alle 2010-11-16 18:50:00.0
        Trollate totali: 3444
        Re: alex,tg ha ragione e sassofono no
        > abbiamo già appurato in chat che gcc ottimizza
        > via la divisione con moltiplicazioni e shift.

        Cosi` non vale. Io mi riferivo alla divisione intera "dura e pura". Se il divisore era inottimizzabile ce lo volevo vedere il gcc. Con la lingua fuori
        • Avatar
          ☺
          Scritto da
          avvelentani
          Cubicolario
          il 2010-11-16 21:46:00.0 alle 2010-11-16 21:46:00.0
          Trollate totali: 18184
          Re: alex,tg ha ragione e sassofono no

          - Scritto da: alex.tg
          > > abbiamo già appurato in chat che gcc ottimizza
          > > via la divisione con moltiplicazioni e shift.
          >
          > Cosi` non vale. Io mi riferivo alla divisione
          > intera "dura e pura". Se il divisore era
          > inottimizzabile ce lo volevo vedere il gcc.
          > Con la lingua fuori

          L'ottimizzazione in questione, a quanto ho capito, e` un constant folding dell'algoritmo della divisione, lo puoi fare per qualunque divisore, purche' il divisore sia sempre lo stesso (ma se il divisore e` sempre diverso come fai a precalcolare la tabella di lookup?)
          I think happiness is love
          - Vladimir Putin
          • Avatar
            ☺
            Scritto da
            il 2010-11-16 22:15:00.0 alle 2010-11-16 22:15:00.0
            Trollate totali: 3444
            Re: alex,tg ha ragione e sassofono no
            > > > abbiamo già appurato in chat che gcc ottimizza
            > > > via la divisione con moltiplicazioni e shift.
            > >
            > > Cosi` non vale. Io mi riferivo alla divisione
            > > intera "dura e pura". Se il divisore era
            > > inottimizzabile ce lo volevo vedere il gcc.
            > > Con la lingua fuori
            >
            > L'ottimizzazione in questione, a quanto ho
            > capito, e` un constant folding dell'algoritmo
            > della divisione, lo puoi fare per qualunque
            > divisore, purche' il divisore sia sempre lo
            > stesso (ma se il divisore e` sempre diverso come
            > fai a precalcolare la tabella di
            > lookup?)

            Si`, infatti avevo torto e me ne sono reso conto dopo. Pero` ho proseguito a vedere un po' cosa risultava dall'insistere sull'idea della tabella di lookup. La curiosita` era vedere di quanto era penalizzata la tabella dalla lentezza degli accessi alla memoria.

            Non ho provato a replicare in Linoleum la scomposizione della divisione in moltiplicazione per 100 e shift di due bits a destra, ma quasi certamente sarebbe piu` veloce della tabella, anche perche` saprei in anticipo che la moltiplicazione di un massimo di 65535 per 100 non causa overflows in registri e variabili di 32 bit.

            Um... pero` anche la moltiplicazione richiede alcuni cicli su varie CPU derivate dal Pentium (10, mi pare, di contro ai 42 della divisione, se non ricordo male) e non dovrebbe essere accoppiabile. Il lookup, se l'accesso alla memoria non generasse ritardi, prenderebbe 4 cicli.

            Boh. Non so. Bisognerebbe provare.
            • Avatar
              ☺
              Scritto da
              avvelentani
              Cubicolario
              il 2010-11-16 22:22:00.0 alle 2010-11-16 22:22:00.0
              Trollate totali: 18184
              Re: alex,tg ha ragione e sassofono no

              - Scritto da: alex.tg
              > > > > abbiamo già appurato in chat che gcc
              > ottimizza
              > > > > via la divisione con moltiplicazioni e
              > shift.
              > > >
              > > > Cosi` non vale. Io mi riferivo alla divisione
              > > > intera "dura e pura". Se il divisore era
              > > > inottimizzabile ce lo volevo vedere il gcc.
              > > > Con la lingua fuori
              > >
              > > L'ottimizzazione in questione, a quanto ho
              > > capito, e` un constant folding dell'algoritmo
              > > della divisione, lo puoi fare per qualunque
              > > divisore, purche' il divisore sia sempre lo
              > > stesso (ma se il divisore e` sempre diverso come
              > > fai a precalcolare la tabella di
              > > lookup?)
              >
              > Si`, infatti avevo torto e me ne sono reso conto
              > dopo. Pero` ho proseguito a vedere un po' cosa
              > risultava dall'insistere sull'idea della tabella
              > di lookup. La curiosita` era vedere di quanto era
              > penalizzata la tabella dalla lentezza degli
              > accessi alla
              > memoria.
              >
              > Non ho provato a replicare in Linoleum la
              > scomposizione della divisione in moltiplicazione
              > per 100 e shift di due bits a destra, ma quasi
              > certamente sarebbe piu` veloce della tabella,
              > anche perche` saprei in anticipo che la
              > moltiplicazione di un massimo di 65535 per 100
              > non causa overflows in registri e variabili di 32
              > bit.
              >
              > Um... pero` anche la moltiplicazione richiede
              > alcuni cicli su varie CPU derivate dal Pentium
              > (10, mi pare, di contro ai 42 della divisione, se
              > non ricordo male) e non dovrebbe essere
              > accoppiabile. Il lookup, se l'accesso alla
              > memoria non generasse ritardi, prenderebbe 4
              > cicli.
              >
              > Boh. Non so. Bisognerebbe provare.

              Prova a compilare il codice C e eseguirlo sul tuo computer, poi lo compariamo alla tua versione linoleum.
              I think happiness is love
              - Vladimir Putin
              • Avatar
                ☺
                Scritto da
                il 2010-11-16 22:26:00.0 alle 2010-11-16 22:26:00.0
                Trollate totali: 3444
                Re: alex,tg ha ragione e sassofono no
                > Prova a compilare il codice C e eseguirlo sul tuo
                > computer, poi lo compariamo alla tua versione
                > linoleum.

                Mi tocca installare gpp, insomma? Triste
                • Avatar
                  ☺
                  Scritto da
                  avvelentani
                  Cubicolario
                  il 2010-11-16 22:36:00.0 alle 2010-11-16 22:36:00.0
                  Trollate totali: 18184
                  Re: alex,tg ha ragione e sassofono no

                  - Scritto da: alex.tg
                  > > Prova a compilare il codice C e eseguirlo sul
                  > tuo
                  > > computer, poi lo compariamo alla tua versione
                  > > linoleum.
                  >
                  > Mi tocca installare gpp, insomma? Triste

                  non hai un compilatore c installato?! A bocca storta
                  I think happiness is love
                  - Vladimir Putin
                  • Avatar
                    ☺
                    Scritto da
                    il 2010-11-16 22:42:00.0 alle 2010-11-16 22:42:00.0
                    Trollate totali: 3444
                    Re: alex,tg ha ragione e sassofono no
                    > > > Prova a compilare il codice C e eseguirlo sul
                    > > tuo
                    > > > computer, poi lo compariamo alla tua versione
                    > > > linoleum.
                    > >
                    > > Mi tocca installare gpp, insomma? Triste
                    >
                    > non hai un compilatore c installato?! A bocca storta

                    Non quello, ho solo il vecchio Borland per ragioni di retrocompatibilita` con certi vecchissimi lavori. Deluso

                    Ma perderebbe senza dubbio, e` arcistupido.
                    Pero` se vuoi provo lo stesso.
                    • Avatar
                      ☺
                      Scritto da
                      avvelentani
                      Cubicolario
                      il 2010-11-16 22:48:00.0 alle 2010-11-16 22:48:00.0
                      Trollate totali: 18184
                      Re: alex,tg ha ragione e sassofono no

                      - Scritto da: alex.tg
                      > > > > Prova a compilare il codice C e eseguirlo
                      > sul
                      > > > tuo
                      > > > > computer, poi lo compariamo alla tua
                      > versione
                      > > > > linoleum.
                      > > >
                      > > > Mi tocca installare gpp, insomma? Triste
                      > >
                      > > non hai un compilatore c installato?! A bocca storta
                      >
                      > Non quello, ho solo il vecchio Borland per
                      > ragioni di retrocompatibilita` con certi
                      > vecchissimi lavori.
                      > Deluso
                      >
                      > Ma perderebbe senza dubbio, e` arcistupido.
                      > Pero` se vuoi provo lo stesso.

                      Installa mingw, shell compresa. Magari ti piace e passi a linux.
                      I think happiness is love
                      - Vladimir Putin
                      • Avatar
                        ☺
                        Scritto da
                        il 2010-11-16 22:52:00.0 alle 2010-11-16 22:52:00.0
                        Trollate totali: 3444
                        Re: alex,tg ha ragione e sassofono no
                        > Installa mingw, shell compresa. Magari ti piace e
                        > passi a
                        > linux.

                        Sto installando la versione per Winzozz tramite prompt, aspe'...
                        • Avatar
                          ☺
                          Scritto da
                          il 2010-11-16 22:55:00.0 alle 2010-11-16 22:55:00.0
                          Trollate totali: 3444
                          Re: alex,tg ha ragione e sassofono no
                          > > Installa mingw, shell compresa. Magari ti piace
                          > e
                          > > passi a
                          > > linux.
                          >
                          > Sto installando la versione per Winzozz tramite
                          > prompt,
                          > aspe'...

                          Mavaff... quello che chiamano RHIDE vuole inizializzare un modo testo e Vista gli risponde picche.

                          Cheppalle Vista.
                          • Avatar
                            ☺
                            Scritto da
                            avvelentani
                            Cubicolario
                            il 2010-11-16 22:57:00.0 alle 2010-11-16 22:57:00.0
                            Trollate totali: 18184
                            Re: alex,tg ha ragione e sassofono no

                            - Scritto da: alex.tg
                            > > > Installa mingw, shell compresa. Magari ti
                            > piace
                            > > e
                            > > > passi a
                            > > > linux.
                            > >
                            > > Sto installando la versione per Winzozz tramite
                            > > prompt,
                            > > aspe'...
                            >
                            > Mavaff... quello che chiamano RHIDE vuole
                            > inizializzare un modo testo e Vista gli risponde
                            > picche.
                            >
                            > Cheppalle Vista.

                            Lascia perdere RHIDE
                            I think happiness is love
                            - Vladimir Putin
                            • Avatar
                              ☺
                              Scritto da
                              il 2010-11-16 23:00:00.0 alle 2010-11-16 23:00:00.0
                              Trollate totali: 3444
                              Re: alex,tg ha ragione e sassofono no
                              Ok sto installando MinchiaW.
                              • Avatar
                                ☺
                                Scritto da
                                il 2010-11-16 23:04:00.0 alle 2010-11-16 23:04:00.0
                                Trollate totali: 3444
                                Re: alex,tg ha ragione e sassofono no
                                > Ok sto installando MinchiaW.

                                Oh ecco.
                                Mi dice:

                                Alex@IMAC-ALEX ~
                                $


                                E ora? Newbie, inesperto
                                • Avatar
                                  ☺
                                  Scritto da
                                  il 2010-11-16 23:06:00.0 alle 2010-11-16 23:06:00.0
                                  Trollate totali: 3444
                                  Re: alex,tg ha ragione e sassofono no
                                  A chiedergli "ls" si direbbe nella cartella utenti/Alex.
                                  Mah, e come si compila?
                                  • Avatar
                                    ☺
                                    Scritto da
                                    il 2010-11-16 23:08:00.0 alle 2010-11-16 23:08:00.0
                                    Trollate totali: 3444
                                    Re: alex,tg ha ragione e sassofono no
                                    um... allora, ~ era la directory home.
                                    / la root.

                                    Nella root c'e` una bin ma non mi pare contenga tracce di compilatori. Suppongo si riferisca al sistema emulato. E il compilatore dove sara`?
                                    • Avatar
                                      Scritto da
                                      Non Autenticato
                                      il 2010-11-16 23:11:00.0 alle 2010-11-16 23:11:00.0
                                      Re: alex,tg ha ragione e sassofono no
                                      - Scritto da: alex.tg
                                      > um... allora, ~ era la directory home.
                                      > / la root.
                                      >
                                      > Nella root c'e` una bin ma non mi pare contenga
                                      > tracce di compilatori. Suppongo si riferisca al
                                      > sistema emulato. E il compilatore dove
                                      > sara`?

                                      forse in /usr/bin/gcc

                                      per compilare: gcc -O3 -o file file.c

                                      dove -O3 specifica il livello di ottimizzazione
                                      • Avatar
                                        ☺
                                        Scritto da
                                        il 2010-11-16 23:13:00.0 alle 2010-11-16 23:13:00.0
                                        Trollate totali: 3444
                                        Re: alex,tg ha ragione e sassofono no
                                        > > Nella root c'e` una bin ma non mi pare contenga
                                        > > tracce di compilatori. Suppongo si riferisca al
                                        > > sistema emulato. E il compilatore dove
                                        > > sara`?
                                        >
                                        > forse in /usr/bin/gcc

                                        gcc l'ho trovato in /C/MinGW/bin

                                        > per compilare: gcc -O3 -o file file.c
                                        >
                                        > dove -O3 specifica il livello di ottimizzazione

                                        ora provo...
                                        • Avatar
                                          ☺
                                          Scritto da
                                          il 2010-11-16 23:17:00.0 alle 2010-11-16 23:17:00.0
                                          Trollate totali: 3444
                                          Re: alex,tg ha ragione e sassofono no
                                          > > > Nella root c'e` una bin ma non mi pare
                                          > contenga
                                          > > > tracce di compilatori. Suppongo si riferisca
                                          > al
                                          > > > sistema emulato. E il compilatore dove
                                          > > > sara`?
                                          > >
                                          > > forse in /usr/bin/gcc
                                          >
                                          > gcc l'ho trovato in /C/MinGW/bin
                                          >
                                          > > per compilare: gcc -O3 -o file file.c
                                          > >
                                          > > dove -O3 specifica il livello di ottimizzazione
                                          >
                                          > ora provo...

                                          Alex@IMAC-ALEX /C/MinGW/bin
                                          $ gcc -O3 -o ../stuff/prova ../stuff/prova.cpp
                                          ../stuff/prova.cpp: In function 'int main()':
                                          ../stuff/prova.cpp:16:53: error: 'rand' was not declared in this scope


                                          Palle.
                                          Forse non e` gcc quello che serve.
                                          Provero` con gli altri...
                                          • Avatar
                                            ☺
                                            Scritto da
                                            il 2010-11-16 23:19:00.0 alle 2010-11-16 23:19:00.0
                                            Trollate totali: 3444
                                            Re: alex,tg ha ragione e sassofono no
                                            ah ecco, rand era in stdlib.
                                            O almeno se l'aspettava li`.
                                            Ho incluso stdlib.h e ha compilato.
                                            • Avatar
                                              ☺
                                              Scritto da
                                              il 2010-11-16 23:20:00.0 alle 2010-11-16 23:20:00.0
                                              Trollate totali: 3444
                                              Re: alex,tg ha ragione e sassofono no
                                              Alex@IMAC-ALEX /C/MinGW/stuff
                                              $ prova.exe
                                              Inizio divisioni: 1289946023
                                              Divisioni: 1
                                              Inizio lookups: 1289946024
                                              Lookups: 2
                                              
                                              Alex@IMAC-ALEX /C/MinGW/stuff
                                              $


                                              1 e 2?
                                              Mah, sara` meglio aumentare i repeats.
                                              • Avatar
                                                ☺
                                                Scritto da
                                                avvelentani
                                                Cubicolario
                                                il 2010-11-16 23:25:00.0 alle 2010-11-16 23:25:00.0
                                                Trollate totali: 18184
                                                Re: alex,tg ha ragione e sassofono no

                                                - Scritto da: alex.tg
                                                >
                                                Alex@IMAC-ALEX /C/MinGW/stuff
                                                > $ prova.exe
                                                > Inizio divisioni: 1289946023
                                                > Divisioni: 1
                                                > Inizio lookups: 1289946024
                                                > Lookups: 2
                                                > 
                                                > Alex@IMAC-ALEX /C/MinGW/stuff
                                                > $

                                                >
                                                > 1 e 2?
                                                > Mah, sara` meglio aumentare i repeats.

                                                c'e` una versione con gettimeofday:

                                                #include<stdio.h>
                                                #include<time.h>
                                                #include<limits.h>
                                                #include <sys/time.h>
                                                
                                                
                                                #define M 10000000
                                                #define REP 50
                                                
                                                int source[M];
                                                int dest[M];
                                                int divtab[65536];
                                                
                                                long int gtod(void)
                                                {
                                                        struct timeval tv;
                                                        gettimeofday(&tv, NULL);
                                                        return tv.tv_sec * 1000000 + tv.tv_usec;
                                                }
                                                
                                                int main(void) {
                                                  int i, m;
                                                  long int start;
                                                
                                                  for (i = 0; i < M; ++i)
                                                          source[i] = ((double)rand() / INT_MAX) * 65535;
                                                
                                                  for (i = 0; i < 65536; ++i)
                                                          divtab[i] = i / 25;
                                                
                                                  start = gtod();
                                                
                                                //  printf("Inizio divisioni: %ld\n", start);
                                                
                                                  for (m = 0; m < REP; ++m)
                                                          for (i = 0; i < M; ++i) dest[i] = source[i] / 25;
                                                
                                                  printf("Divisioni: %ld\n", gtod() - start);
                                                
                                                  start = gtod();
                                                
                                                //  printf("Inizio lookups: %ld\n", start);
                                                
                                                  for (m = 0; m < REP; ++m)
                                                          for (i = 0; i < M; ++i) dest[i] = divtab[source[i]];
                                                
                                                  printf("Lookups: %ld\n", gtod() - start);
                                                
                                                  return 0;
                                                }
                                                


                                                Avete tutti il computer piu` veloce del mio Triste
                                                I think happiness is love
                                                - Vladimir Putin
                                                • Avatar
                                                  ☺
                                                  Scritto da
                                                  il 2010-11-16 23:28:00.0 alle 2010-11-16 23:28:00.0
                                                  Trollate totali: 3444
                                                  Re: alex,tg ha ragione e sassofono no
                                                  Questa restituisce:

                                                  Alex@IMAC-ALEX /C/MinGW/stuff
                                                  $ prova2
                                                  Divisioni: 1063000
                                                  Lookups: 1073000
                                                  • Avatar
                                                    ☺
                                                    Scritto da
                                                    il 2010-11-16 23:29:00.0 alle 2010-11-16 23:29:00.0
                                                    Trollate totali: 3444
                                                    Re: alex,tg ha ragione e sassofono no
                                                    E` in microsecondi?
                                                    Sarebbe 1,063 secondi e 1,073? Newbie, inesperto
                                                    • Avatar
                                                      ☺
                                                      Scritto da
                                                      avvelentani
                                                      Cubicolario
                                                      il 2010-11-16 23:31:00.0 alle 2010-11-16 23:31:00.0
                                                      Trollate totali: 18184
                                                      Re: alex,tg ha ragione e sassofono no

                                                      - Scritto da: alex.tg
                                                      > E` in microsecondi?
                                                      > Sarebbe 1,063 secondi e 1,073? Newbie, inesperto

                                                      Si`, stai ottenendo risultati diversi rispetto ai miei e a quelli di frenchi.
                                                      I think happiness is love
                                                      - Vladimir Putin
                                                      • Avatar
                                                        ☺
                                                        Scritto da
                                                        il 2010-11-16 23:32:00.0 alle 2010-11-16 23:32:00.0
                                                        Trollate totali: 3444
                                                        Re: alex,tg ha ragione e sassofono no
                                                        > > E` in microsecondi?
                                                        > > Sarebbe 1,063 secondi e 1,073? Newbie, inesperto
                                                        >
                                                        > Si`, stai ottenendo risultati diversi rispetto ai
                                                        > miei e a quelli di
                                                        > frenchi.

                                                        Dev'essere Windoze che incasina tutto nei bassifondi, e bara anche sui tempi. Qualunque cosa succeda, e` sempre colpa sua. Regola fondamentale. Ficoso
                                                        • Avatar
                                                          ☺
                                                          Scritto da
                                                          il 2010-11-16 23:36:00.0 alle 2010-11-16 23:36:00.0
                                                          Trollate totali: 3444
                                                          Re: alex,tg ha ragione e sassofono no
                                                          > > > E` in microsecondi?
                                                          > > > Sarebbe 1,063 secondi e 1,073? Newbie, inesperto

                                                          Comunque, 1,063 diviso 50milioni fa:

                                                          0,00000002126 secondi per divisione.

                                                          Di contro a:

                                                          0,000000056s per divisione (listato C su ARM);
                                                          0,00000000235s per divisione (listato Linoleum su questo Core2 Duo).

                                                          C'e` uno zero di piu` dopo la virgola e un ordine di grandezza in meno in favore di Linoleum. O i tempi vengono misurati male o il compilatore si fa le seghe mentali.
                                                          • Avatar
                                                            ☺
                                                            Scritto da
                                                            il 2010-11-16 23:47:00.0 alle 2010-11-16 23:47:00.0
                                                            Trollate totali: 3444
                                                            Re: alex,tg ha ragione e sassofono no
                                                            > 0,000000056s per divisione (listato C su ARM);
                                                            > 0,00000000235s per divisione (listato Linoleum su
                                                            > questo Core2
                                                            > Duo).
                                                            >
                                                            > C'e` uno zero di piu` dopo la virgola e un ordine
                                                            > di grandezza in meno in favore di Linoleum. O i
                                                            > tempi vengono misurati male o il compilatore si
                                                            > fa le seghe
                                                            > mentali.

                                                            Pero` l'altra versione, che usava time_t in secondi, fatta girare per 10 miliardi di divisioni (REP 1000), dava 22 secondi, il che significherebbe 0,0000000022 secondi per divisione, che e` perfino un pochino meno del listato Linoleum (0,0000000235). Ora provo a misurare meglio il listato Lino comunque, implementando anch'io un bel REP che equalizzi le condizioni.
                                                            • Avatar
                                                              ☺
                                                              Scritto da
                                                              il 2010-11-16 23:54:00.0 alle 2010-11-16 23:54:00.0
                                                              Trollate totali: 3444
                                                              Re: alex,tg ha ragione e sassofono no
                                                              Ok fatto.
                                                              Nuovo listato:

                                                              "libraries"
                                                              
                                                                  hmi/conout;
                                                                  math/random;
                                                                  utils/msecs24;
                                                              
                                                              "directors"
                                                              
                                                                  unit = 32;
                                                                  display status = engage;
                                                              
                                                              "constants"
                                                              
                                                                  k = 10 000 000;    (di elementi)
                                                                  rep = 1000;    (ripetizioni)
                                                              
                                                              "variables"
                                                              
                                                                  t filling source range = { filling_source_range...\lf } : 8;
                                                                  t filling lookup table = { filling_lookup_table...\lf } : 8;
                                                                  t testing integer maths = { testing_integer_maths...\lf } : 8;
                                                                  t testing lookups = { testing_lookups...\lf } : 8;
                                                                  t elapsed maths time = { elapsed_maths_time:_ } : 8;
                                                                  t elapsed lookups time = { elapsed_lookups_time:_ } : 8;
                                                                  t lf = { \lf } : 8;
                                                              
                                                              "workspace"
                                                              
                                                                  r source * k;
                                                                  r target * k;
                                                                  r lookup * [65536 multiplied 16] as bit size;    (65536 valori di 16 bit)
                                                              
                                                                  n to go;
                                                                  n start time;
                                                                  n stop time;
                                                              
                                                              "programme"
                                                              
                                                                  mt . sgenrand: 12345;
                                                              
                                                                  conout . t say: t filling source range;
                                                              
                                                                      a # a;
                                                                      b = k;
                                                                      
                                                                      "filling source range"
                                                              
                                                                          [r source [a]] <- mt . i rnd;
                                                                          [r source [a]] & ffffh;
                                                              
                                                                          + a;
                                                              
                                                                      ? b ^ filling source range;
                                                              
                                                                  conout . t say: t filling lookup table;
                                                              
                                                                      a # a;
                                                                      b # b;
                                                                      c = 65536 div 2;
                                                              
                                                                      "filling lookup table"
                                                              
                                                                          as,
                                                              
                                                                              d = a;
                                                                              d / 25;
                                                              
                                                                          [r lookup [b]] = d;
                                                              
                                                                          + a;
                                                              
                                                                          as,
                                                              
                                                                              d = a;
                                                                              d / 25;
                                                                          @    d < 16;
                                                                          
                                                                          [r lookup [b]] | d;
                                                              
                                                                          + a;
                                                                          + b;
                                                              
                                                                      ? c ^ filling lookup table;
                                                              
                                                                  conout . t say: t testing integer maths;
                                                              
                                                                  [n to go] = rep;
                                                                  [n start time] <- msecs 24;
                                                              
                                                                  "repeating integer maths"
                                                              
                                                                      a # a;
                                                                      b = k;
                                                              
                                                                      "testing integer maths"
                                                              
                                                                          as,
                                                              
                                                                              c = [r source [a]];
                                                                              c / 25;
                                                              
                                                                          [r target [a]] = c;
                                                              
                                                                          + a;
                                                              
                                                                      ? b ^ testing integer maths;
                                                              
                                                                  ? [n to go] ^ repeating integer maths;
                                                              
                                                                  [n stop time] <- msecs 24;
                                                                  [n stop time] - [n start time];
                                                              
                                                                  conout . t say: t elapsed maths time;
                                                                  conout . n say: [n stop time];
                                                                  conout . t say: t lf;
                                                              
                                                                  conout . t say: t testing lookups;
                                                              
                                                                  [n to go] = rep;
                                                                  [n start time] <- msecs 24;
                                                              
                                                                  "repeating lookups"
                                                              
                                                                      a # a;
                                                                      b = k;
                                                              
                                                                      "testing lookups"
                                                              
                                                                          as,
                                                              
                                                                              c = [r source [a]];
                                                                              d = c;
                                                              
                                                                          '    d > 1;
                                                                              c & 1;
                                                              
                                                                          @    c < 4;
                                                                              e = [r lookup [d]];
                                                                              
                                                                          @    e > c;
                                                                              + a;
                                                              
                                                                              e & ffffh;
                                                                              - b;
                                                              
                                                                          [r target [a minus 1]] = e;
                                                              
                                                                      ? b ! zero > testing lookups;
                                                              
                                                                  ? [n to go] ^ repeating lookups;
                                                              
                                                                  [n stop time] <- msecs 24;
                                                                  [n stop time] - [n start time];
                                                              
                                                                  conout . t say: t elapsed lookups time;
                                                                  conout . n say: [n stop time];
                                                                  conout . t say: t lf;
                                                              
                                                                  as,
                                                              
                                                                      [thread command] = suspend thread;
                                                                      [thread suspend timeout] = 10 000 (milliseconds);
                                                              
                                                                  isocall;
                                                              
                                                                  end;


                                                              Risultati:

                                                              filling source range...
                                                              filling lookup table...
                                                              testing integer maths...
                                                              elapsed maths time: 38475
                                                              testing lookups...
                                                              elapsed lookups time: 27043


                                                              Danno ragione al gcc con:

                                                              0,0000000027043 contro
                                                              0,0000000022

                                                              Voglio vedere che succede a cestinare la considerazione sui 16 bit per valore e allinearli a un'unita` di memoria di 32 bit.
                                                              • Avatar
                                                                ☺
                                                                Scritto da
                                                                il 2010-11-17 00:10:00.0 alle 2010-11-17 00:10:00.0
                                                                Trollate totali: 3444
                                                                Re: alex,tg ha ragione e sassofono no
                                                                E` peggio, infatti.

                                                                "libraries"
                                                                
                                                                    hmi/conout;
                                                                    math/random;
                                                                    utils/msecs24;
                                                                
                                                                "directors"
                                                                
                                                                    unit = 32;
                                                                    display status = engage;
                                                                
                                                                "constants"
                                                                
                                                                    k = 10 000 000;    (di elementi)
                                                                    rep = 50;    (ripetizioni)
                                                                
                                                                "variables"
                                                                
                                                                    t filling source range = { filling_source_range...\lf } : 8;
                                                                    t filling lookup table = { filling_lookup_table...\lf } : 8;
                                                                    t testing integer maths = { testing_integer_maths...\lf } : 8;
                                                                    t testing lookups = { testing_lookups...\lf } : 8;
                                                                    t elapsed maths time = { elapsed_maths_time:_ } : 8;
                                                                    t elapsed lookups time = { elapsed_lookups_time:_ } : 8;
                                                                    t lf = { \lf } : 8;
                                                                
                                                                "workspace"
                                                                
                                                                    r source * k;
                                                                    r target * k;
                                                                    r lookup * 65536;    (65536 risultati in tabella)
                                                                
                                                                    n to go;
                                                                    n start time;
                                                                    n stop time;
                                                                
                                                                "programme"
                                                                
                                                                    mt . sgenrand: 12345;
                                                                
                                                                    conout . t say: t filling source range;
                                                                
                                                                        a # a;
                                                                        b = k;
                                                                        
                                                                        "filling source range"
                                                                
                                                                            [r source [a]] <- mt . i rnd;
                                                                            [r source [a]] & ffffh;
                                                                
                                                                            + a;
                                                                
                                                                        ? b ^ filling source range;
                                                                
                                                                    conout . t say: t filling lookup table;
                                                                
                                                                        a # a;
                                                                        b = 65536;
                                                                
                                                                        "filling lookup table"
                                                                
                                                                            as,
                                                                
                                                                                c = a;
                                                                                c / 25;
                                                                
                                                                            [r lookup [a]] = c;
                                                                
                                                                            + a;
                                                                
                                                                        ? b ^ filling lookup table;
                                                                
                                                                    conout . t say: t testing integer maths;
                                                                
                                                                    [n to go] = rep;
                                                                    [n start time] <- msecs 24;
                                                                
                                                                    "repeating integer maths"
                                                                
                                                                        a # a;
                                                                        b = k;
                                                                
                                                                        "testing integer maths"
                                                                
                                                                            as,
                                                                
                                                                                c = [r source [a]];
                                                                                c / 25;
                                                                
                                                                            [r target [a]] = c;
                                                                
                                                                            + a;
                                                                
                                                                        ? b ^ testing integer maths;
                                                                
                                                                    ? [n to go] ^ repeating integer maths;
                                                                
                                                                    [n stop time] <- msecs 24;
                                                                    [n stop time] - [n start time];
                                                                
                                                                    conout . t say: t elapsed maths time;
                                                                    conout . n say: [n stop time];
                                                                    conout . t say: t lf;
                                                                
                                                                    conout . t say: t testing lookups;
                                                                
                                                                    [n to go] = rep;
                                                                    [n start time] <- msecs 24;
                                                                
                                                                    "repeating lookups"
                                                                
                                                                        a # a;
                                                                
                                                                        "testing lookups"
                                                                
                                                                            as,
                                                                
                                                                                c = [r source [a]];
                                                                
                                                                            [r target [a]] = [r lookup [c]];
                                                                
                                                                            + a;
                                                                
                                                                        ? a ! k > testing lookups;
                                                                
                                                                    ? [n to go] ^ repeating lookups;
                                                                
                                                                    [n stop time] <- msecs 24;
                                                                    [n stop time] - [n start time];
                                                                
                                                                    conout . t say: t elapsed lookups time;
                                                                    conout . n say: [n stop time];
                                                                    conout . t say: t lf;
                                                                
                                                                    as,
                                                                
                                                                        [thread command] = suspend thread;
                                                                        [thread suspend timeout] = 10 000 (milliseconds);
                                                                
                                                                    isocall;
                                                                
                                                                    end;


                                                                Piu` semplice ma piu` lento: 0,0000000032 per divisione.
                                              • Avatar
                                                ☺
                                                Scritto da
                                                il 2010-11-16 23:25:00.0 alle 2010-11-16 23:25:00.0
                                                Trollate totali: 3444
                                                Re: alex,tg ha ragione e sassofono no
                                                Alex@IMAC-ALEX /C/MinGW/stuff
                                                $ prova
                                                Inizio divisioni: 1289946180
                                                Divisioni: 22
                                                Inizio lookups: 1289946202
                                                Lookups: 22


                                                Ho portato REP a 1000 e ci mette 22 secondi.

                                                Ma chissa` se sta facendo le cose per bene... i tempi col REP 50 sono brevissimi. O il mio processore e` un mostro o quello che usavi era uno scassone. Ma avevi specificato che era un Core2 Duo.

                                                Boh.
                                                O i tempi non erano in secondi?
                                                • Avatar
                                                  ☺
                                                  Scritto da
                                                  avvelentani
                                                  Cubicolario
                                                  il 2010-11-16 23:29:00.0 alle 2010-11-16 23:29:00.0
                                                  Trollate totali: 18184
                                                  Re: alex,tg ha ragione e sassofono no

                                                  - Scritto da: alex.tg
                                                  >
                                                  Alex@IMAC-ALEX /C/MinGW/stuff
                                                  > $ prova
                                                  > Inizio divisioni: 1289946180
                                                  > Divisioni: 22
                                                  > Inizio lookups: 1289946202
                                                  > Lookups: 22

                                                  >
                                                  > Ho portato REP a 1000 e ci mette 22 secondi.
                                                  >
                                                  > Ma chissa` se sta facendo le cose per bene... i
                                                  > tempi col REP 50 sono brevissimi. O il mio
                                                  > processore e` un mostro o quello che usavi era
                                                  > uno scassone. Ma avevi specificato che era un
                                                  > Core2
                                                  > Duo.
                                                  >
                                                  > Boh.
                                                  > O i tempi non erano in secondi?

                                                  Il mio MacBook late 2008 con Core 2 Duo REP=200 ci mette 9 secondi per le divisioni, 13 per i lookup.
                                                  I think happiness is love
                                                  - Vladimir Putin
                                          • Avatar
                                            ☺
                                            Scritto da
                                            avvelentani
                                            Cubicolario
                                            il 2010-11-16 23:20:00.0 alle 2010-11-16 23:20:00.0
                                            Trollate totali: 18184
                                            Re: alex,tg ha ragione e sassofono no

                                            - Scritto da: alex.tg
                                            > > > > Nella root c'e` una bin ma non mi pare
                                            > > contenga
                                            > > > > tracce di compilatori. Suppongo si riferisca
                                            > > al
                                            > > > > sistema emulato. E il compilatore dove
                                            > > > > sara`?
                                            > > >
                                            > > > forse in /usr/bin/gcc
                                            > >
                                            > > gcc l'ho trovato in /C/MinGW/bin
                                            > >
                                            > > > per compilare: gcc -O3 -o file file.c
                                            > > >
                                            > > > dove -O3 specifica il livello di
                                            > ottimizzazione
                                            > >
                                            > > ora provo...
                                            >
                                            >
                                            Alex@IMAC-ALEX /C/MinGW/bin
                                            > $ gcc -O3 -o ../stuff/prova ../stuff/prova.cpp
                                            > ../stuff/prova.cpp: In function 'int main()':
                                            > ../stuff/prova.cpp:16:53: error: 'rand' was not
                                            > declared in this
                                            > scope

                                            >
                                            > Palle.
                                            > Forse non e` gcc quello che serve.
                                            > Provero` con gli altri...

                                            Aggiungi:

                                            #include <stdlib.h>
                                            
                                            I think happiness is love
                                            - Vladimir Putin
      • Avatar
        ☺
        Scritto da
        il 2010-11-16 19:29:00.0 alle 2010-11-16 19:29:00.0
        Trollate totali: 4459
        Re: alex,tg ha ragione e sassofono no

        - Scritto da:
        > - Scritto da: Caccola
        > >
        Inizio divisioni: 1289928957
        > > Divisioni: 22
        > > Inizio lookups: 1289928979
        > > Lookups: 19

        > >
        > > su un pentium III a 700 mhzRotola dal ridereGeek
        >
        > compilatore?
        >

        mingsticazzi? quello del dev c++

        > abbiamo già appurato in chat che gcc ottimizza
        > via la divisione con moltiplicazioni e shift.
        > Risultato: il lookup è circa il 40% più lento su
        > un core2 duo 3
        > Ghz

        ficco Sorpresa quando al proffe gli racconterò tutte queste cose su un esercizio di merda come quello, come minimo penserà...













































        CLEM CLEM!

















        d'oh!Immagine postata dall'utente
        • Avatar
          Scritto da
          Non Autenticato
          il 2010-11-16 19:35:00.0 alle 2010-11-16 19:35:00.0
          Re: alex,tg ha ragione e sassofono no
          - Scritto da: Caccola
          >
          > - Scritto da:
          > > - Scritto da: Caccola
          > > >
          Inizio divisioni: 1289928957
          > > > Divisioni: 22
          > > > Inizio lookups: 1289928979
          > > > Lookups: 19

          > > >
          > > > su un pentium III a 700 mhzRotola dal ridereGeek
          > >
          > > compilatore?
          > >
          >
          > mingsticazzi? quello del dev c++
          >
          > > abbiamo già appurato in chat che gcc ottimizza
          > > via la divisione con moltiplicazioni e shift.
          > > Risultato: il lookup è circa il 40% più lento su
          > > un core2 duo 3
          > > Ghz
          >
          > ficco Sorpresa quando al proffe gli racconterò tutte
          > queste cose su un esercizio di merda come quello,
          > come minimo
          > penserà...
          >
          > CLEM CLEM!
          >
          > d'oh![img]http://indietravelpodcast.com/wp-content

          gli rivelerai che frequenti il FDT? Newbie, inesperto
          • Avatar
            ☺
            Scritto da
            il 2010-11-16 19:46:00.0 alle 2010-11-16 19:46:00.0
            Trollate totali: 4459
            Re: alex,tg ha ragione e sassofono no

            - Scritto da:
            > - Scritto da: Caccola
            > >
            > > - Scritto da:
            > > > - Scritto da: Caccola
            > > > >
            Inizio divisioni: 1289928957
            > > > > Divisioni: 22
            > > > > Inizio lookups: 1289928979
            > > > > Lookups: 19

            > > > >
            > > > > su un pentium III a 700 mhzRotola dal ridereGeek
            > > >
            > > > compilatore?
            > > >
            > >
            > > mingsticazzi? quello del dev c++
            > >
            > > > abbiamo già appurato in chat che gcc ottimizza
            > > > via la divisione con moltiplicazioni e shift.
            > > > Risultato: il lookup è circa il 40% più lento
            > su
            > > > un core2 duo 3
            > > > Ghz
            > >
            > > ficco Sorpresa quando al proffe gli racconterò tutte
            > > queste cose su un esercizio di merda come
            > quello,
            > > come minimo
            > > penserà...
            > >
            > > CLEM CLEM!
            > >
            > >
            > d'oh![img]http://indietravelpodcast.com/wp-content
            >
            > gli rivelerai che frequenti il FDT? Newbie, inesperto

            ovviamente no, mi prendo il merito di tutto, gli dico anche che ho inventato un assembler multipiattaforma.
            • Avatar
              Scritto da
              Non Autenticato
              il 2010-11-16 20:19:00.0 alle 2010-11-16 20:19:00.0
              Re: alex,tg ha ragione e sassofono no

              - Scritto da: Caccola
              >
              > - Scritto da:
              > > - Scritto da: Caccola
              > > >
              > > > - Scritto da:
              > > > > - Scritto da: Caccola
              > > > > >
              Inizio divisioni: 1289928957
              > > > > > Divisioni: 22
              > > > > > Inizio lookups: 1289928979
              > > > > > Lookups: 19

              > > > > >
              > > > > > su un pentium III a 700 mhzRotola dal ridereGeek
              > > > >
              > > > > compilatore?
              > > > >
              > > >
              > > > mingsticazzi? quello del dev c++
              > > >
              > > > > abbiamo già appurato in chat che gcc
              > ottimizza
              > > > > via la divisione con moltiplicazioni e
              > shift.
              > > > > Risultato: il lookup è circa il 40% più
              > lento
              > > su
              > > > > un core2 duo 3
              > > > > Ghz
              > > >
              > > > ficco Sorpresa quando al proffe gli racconterò
              > tutte
              > > > queste cose su un esercizio di merda come
              > > quello,
              > > > come minimo
              > > > penserà...
              > > >
              > > > CLEM CLEM!
              > > >
              > > >
              > >
              > d'oh![img]http://indietravelpodcast.com/wp-content
              > >
              > > gli rivelerai che frequenti il FDT? Newbie, inesperto
              >
              > ovviamente no, mi prendo il merito di tutto, gli
              > dico anche che ho inventato un assembler
              > multipiattaforma.

              Quindi quando hai presentato quell'esercizio di sin4x al prof Gatto Selvaggio non è stato nemmeno nominato? Triste
              • Avatar
                ☺
                Scritto da
                il 2010-11-16 20:38:00.0 alle 2010-11-16 20:38:00.0
                Trollate totali: 4459
                Re: alex,tg ha ragione e sassofono no

                - Scritto da:
                >
                > - Scritto da: Caccola
                > >
                > > - Scritto da:
                > > > - Scritto da: Caccola
                > > > >
                > > > > - Scritto da:
                > > > > > - Scritto da: Caccola
                > > > > > >
                Inizio divisioni: 1289928957
                > > > > > > Divisioni: 22
                > > > > > > Inizio lookups: 1289928979
                > > > > > > Lookups: 19

                > > > > > >
                > > > > > > su un pentium III a 700 mhzRotola dal ridereGeek
                > > > > >
                > > > > > compilatore?
                > > > > >
                > > > >
                > > > > mingsticazzi? quello del dev c++
                > > > >
                > > > > > abbiamo già appurato in chat che gcc
                > > ottimizza
                > > > > > via la divisione con moltiplicazioni e
                > > shift.
                > > > > > Risultato: il lookup è circa il 40% più
                > > lento
                > > > su
                > > > > > un core2 duo 3
                > > > > > Ghz
                > > > >
                > > > > ficco Sorpresa quando al proffe gli racconterò
                > > tutte
                > > > > queste cose su un esercizio di merda come
                > > > quello,
                > > > > come minimo
                > > > > penserà...
                > > > >
                > > > > CLEM CLEM!
                > > > >
                > > > >
                > > >
                > >
                > d'oh![img]http://indietravelpodcast.com/wp-content
                > > >
                > > > gli rivelerai che frequenti il FDT? Newbie, inesperto
                > >
                > > ovviamente no, mi prendo il merito di tutto, gli
                > > dico anche che ho inventato un assembler
                > > multipiattaforma.
                >
                > Quindi quando hai presentato quell'esercizio di
                > sin4x al prof Gatto Selvaggio non è stato nemmeno
                > nominato?
                > Triste

                mai presentato, e non perché mi sono ritirato, ma perché non era un esercizio da presentare al prof: si trattava solo di una "triviale dimostrazione lasciata al lettore" nella quale mi sono imbattuto mentre studiavo In lacrime
      • Avatar
        Scritto da
        Non Autenticato
        il 2010-11-16 20:26:00.0 alle 2010-11-16 20:26:00.0
        Re: alex,tg ha ragione e sassofono no

        - Scritto da:
        > - Scritto da: Caccola
        > >
        Inizio divisioni: 1289928957
        > > Divisioni: 22
        > > Inizio lookups: 1289928979
        > > Lookups: 19

        > >
        > > su un pentium III a 700 mhzRotola dal ridereGeek
        >
        > compilatore?
        >
        > abbiamo già appurato in chat che gcc ottimizza
        > via la divisione con moltiplicazioni e shift.
        > Risultato: il lookup è circa il 40% più lento su
        > un core2 duo 3
        > Ghz

        Se glielo chiedi "per favore", il gcc ti sbroglia anche i loop, gonfiando però a dismisura il codice generato che rischia quindi di finire fuori dalla cache delle istruzioni.
        • Avatar
          Scritto da
          Non Autenticato
          il 2010-11-16 20:27:00.0 alle 2010-11-16 20:27:00.0
          Re: alex,tg ha ragione e sassofono no
          - Scritto da:
          >
          > - Scritto da:
          > > - Scritto da: Caccola
          > > >
          Inizio divisioni: 1289928957
          > > > Divisioni: 22
          > > > Inizio lookups: 1289928979
          > > > Lookups: 19

          > > >
          > > > su un pentium III a 700 mhzRotola dal ridereGeek
          > >
          > > compilatore?
          > >
          > > abbiamo già appurato in chat che gcc ottimizza
          > > via la divisione con moltiplicazioni e shift.
          > > Risultato: il lookup è circa il 40% più lento su
          > > un core2 duo 3
          > > Ghz
          >
          > Se glielo chiedi "per favore", il gcc ti
          > sbroglia anche i loop, gonfiando però a dismisura
          > il codice generato che rischia quindi di finire
          > fuori dalla cache delle
          > istruzioni.

          lo fa di default con -O0
          • Avatar
            Scritto da
            Non Autenticato
            il 2010-11-16 20:31:00.0 alle 2010-11-16 20:31:00.0
            Re: alex,tg ha ragione e sassofono no

            - Scritto da:
            > - Scritto da:
            > >
            > > - Scritto da:
            > > > - Scritto da: Caccola
            > > > >
            Inizio divisioni: 1289928957
            > > > > Divisioni: 22
            > > > > Inizio lookups: 1289928979
            > > > > Lookups: 19

            > > > >
            > > > > su un pentium III a 700 mhzRotola dal ridereGeek
            > > >
            > > > compilatore?
            > > >
            > > > abbiamo già appurato in chat che gcc ottimizza
            > > > via la divisione con moltiplicazioni e shift.
            > > > Risultato: il lookup è circa il 40% più lento
            > su
            > > > un core2 duo 3
            > > > Ghz
            > >
            > > Se glielo chiedi "per favore", il gcc ti
            > > sbroglia anche i loop, gonfiando però a
            > dismisura
            > > il codice generato che rischia quindi di finire
            > > fuori dalla cache delle
            > > istruzioni.
            >
            > lo fa di default con -O0

            Deluso

            Sul serio?
            -O0 attiva -funroll-loops?
            Se lo fa è una cazzata (anche perché -O0 è impostato di default se non viene specificato un altro livello), ma ammetto di non conoscere a memoria la manpage del gcc.
            • Avatar
              Scritto da
              Non Autenticato
              il 2010-11-16 20:32:00.0 alle 2010-11-16 20:32:00.0
              Re: alex,tg ha ragione e sassofono no
              - Scritto da:
              >
              > - Scritto da:
              > > - Scritto da:
              > > >
              > > > - Scritto da:
              > > > > - Scritto da: Caccola
              > > > > >
              Inizio divisioni: 1289928957
              > > > > > Divisioni: 22
              > > > > > Inizio lookups: 1289928979
              > > > > > Lookups: 19

              > > > > >
              > > > > > su un pentium III a 700 mhzRotola dal ridereGeek
              > > > >
              > > > > compilatore?
              > > > >
              > > > > abbiamo già appurato in chat che gcc
              > ottimizza
              > > > > via la divisione con moltiplicazioni e
              > shift.
              > > > > Risultato: il lookup è circa il 40% più
              > lento
              > > su
              > > > > un core2 duo 3
              > > > > Ghz
              > > >
              > > > Se glielo chiedi "per favore", il gcc ti
              > > > sbroglia anche i loop, gonfiando però a
              > > dismisura
              > > > il codice generato che rischia quindi di
              > finire
              > > > fuori dalla cache delle
              > > > istruzioni.
              > >
              > > lo fa di default con -O0
              >
              > Deluso
              >
              > Sul serio?
              > -O0 attiva -funroll-loops?
              > Se lo fa è una cazzata (anche perché -O0 è
              > impostato di default se non viene specificato un
              > altro livello), ma ammetto di non conoscere a
              > memoria la manpage del
              > gcc.

              l'ottimizzazione di cui sopra, cioè dividere per 25
<softv>

Pagina generata in 550 millisecondi

Utenti attivi: 7 nell'ultimo minuto, 19 negli ultimi cinque minuti, 54 negli ultimi 15 minuti