Mac chat


chest
 Share

Recommended Posts

  • Replies 22.6k
  • Created
  • Last Reply

Top Posters In This Topic

No faccio parte di quelli che non ha avuto la "fortuna" di avere un Xserve davanti o accanto...ma ho sempre letto che è paragonabile ad un trattore...

Il PowerMac G5 dal vivo mi ha impressionato per le dimensioni...decisamente di impatto...ma è indubbiamente bello, affascinante, superlativo direi...

Mickey

Link to comment
Share on other sites

Ok.

Tu avevi scritto nel tuo post

<FONT COLOR="ff0000">k[0] = 0

for i=0 to "1 milione" [

j = "random number tra 0 ed 1"

k[i+1] = k + j

]</FONT>

per cui l'idea era quella di avere molto traffico sul bus. Hai usato quindi degli array: j, k, così che, probabilmente pensavi, di fatto non so se pensavi bene, il sistema è obbligato a scambiare dati con la ram: nella L2 non ci sta tutto.

<FONT COLOR="119911">#include <stdio.h>

#include <stdlib.h>

#include <time.h></FONT>

Sono praticamente standard, le conosci già ("man stdio" e gli altri nel terminale penso sia sufficiente).

<FONT COLOR="119911"> int i, n;

float *j, *k;

if (argc != 2) [

fprintf(stderr, "Syntax: %s n\n", argv[0]);

return 1;

]

</FONT>

Inizializza le variabili e controlla la sintassi (devi avere scritto solo un argomento dopo il nome dell'eseguibile).

<FONT COLOR="119911"> n = atoi (argv[1]);

j = malloc (sizeof(float) * n);

k = malloc (sizeof(float) * (n + 1));

k[0] = 0;

srand(clock());

</FONT>

Converte l'argo,mento che hai passato in numero (erano caratteri generici), f spazio per le variabili (vettori) e inizializza K e il seme del generatore casuale di numeri.

<FONT COLOR="119911"> for (i = 0; i < n; i++) [

j = (float)rand() / RAND_MAX;

k[i + 1] = k + j;

]</FONT>

Il vero codice.

Per ogni ciclo genera un numero casuale (normalizzato) poi lo aggiunge al successivo campo del vettore k. Hai così due vettori che vengono scritti e che non stanno nella L2: tutto il codice genera per ciclo (for) 8 byte da mandare nella ram principale (ad occhio e croce).

Si possono quindi fare i conti sulle prestazioni della memoria... più o meno.

[nota: per la scrittura del codice mi sono fatto aiutare]

Per ulteriori info, "man".

Link to comment
Share on other sites

>Io sono curioso di vedere come faranno a farci stare un doppio drive da 5.25...

in quel case potrebbero farci stare comodamente anche la mia gatta.

Link to comment
Share on other sites

ok, scusate ma ieri sono andato a mangiare...

ecco il codice, ho solo fatto queste modifiche , 1 per l' ottimizzazione e 1 per non vedere più quei warning, considerato che uso c++; nn uso flag aggiuntivi come suggerirebbe shark (uno dei chud) e l' ottimizzazione è -O0

#include <iostream>

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

int main (int argc, char *argv[])

{

int i, n;

const float inverso = 1/RAND_MAX;

if (argc != 2) {

fprintf(stderr, "Syntax: %s n\n", argv[0]);

return 1;

n = atoi (argv[1]);

float* j = new float[n];

float* k = new float[n + 1];

k[0] = 0;

srand(clock());

for (i = 0; i < n; i++) {

j = (float)rand() *inverso;

k[i + 1] = k + j;

}

delete[] j;

delete[] k;

return 0;

}}

Link to comment
Share on other sites

ok, ho trovato l' errore. premetto che avevo fatto il copia incolla dal messaggio di olaf del 10 aprile. in effetti una delle parentesi graffe era nel posto sbagliato, cioè in fondo (e infatti ce n' erano 2) questa va spostata dopo return 1, altrimenti il resto del codice non viene mai eseguito. in effetti mi sembrava strano, rispetto al risultato di matteo e del g5... così ecco la versione definitiva del codice che uso:

#include <iostream>

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

int main (int argc, char *argv[])

{

int i, n;

const float inverso = 1/RAND_MAX;

if (argc != 2) {

fprintf(stderr, "Syntax: %s n\n", argv[0]);

return 1; }

n = atoi (argv[1]);

float* j = new float[n];

float* k = new float[n + 1];

k[0] = 0;

srand(clock());

for (i = 0; i < n; i++) {

j = (float)rand() *inverso;

k[i + 1] = k + j;

}

delete[] j;

delete[] k;

return 0;

}

e i ben più consoni risultati:

2.100u 0.470s 0:02.61 98.4% 0+0k 0+0io 0pf+0w

Link to comment
Share on other sites

Macteo: <FONT COLOR="119911">Camillo> guarda il profilo di Olaf... c'è scritto P4 a 1800 MHz...</FONT>

Oh, hai ragione.

<FONT COLOR="119911">Ma non me la prendo... mi basta che alla fine tu ammetta che il G5 è, effettivamente, il migliore! :D</FONT>

Il processore senz'altro. Il computer non saprei... è grande come un armadio e contiene appena un disco in più dell'iMac... :P

Olaf: <FONT COLOR="ff6000">Comunque, un tempo così basso per il G5 mi fa pensare ad ottimizzazioni... ricorda che non scrivere nulla è diverso da scrivere "-O0".</FONT>

Controlla la manpage, -O0 è il default almeno su alcune versioni di gcc.

<FONT COLOR="ff6000">Se ben ricordo, Chest faceva storie sull'impossibilità della frequenza della RAM.</FONT>

Allora il programma non è adatto. Non la tua implementazione, ma l'algoritmo di Chest. E' chiaramente CPU-bound, mentre servirebbe un programma RAM-bound.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share