|
From: Bernardo I. <be...@de...> - 2002-07-01 07:49:53
|
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Salve, ho visto che poiu ha modificato particles per supportare diversi tipi di effetti. A parte il fatto che qua da me crasha tutto, ho dato un'occhiata al codice ed ho visto che adesso ogni particella viene allocata dinamicamente anziche' essere copiata di peso dentro il buffer circolare. L'uso del buffer allocato una sola volta serviva a non dover sostenere a run-time l'overhead dell'allocazione e della liberazione della memoria. A occhio e cazzotto, l'allocazione di una struttura di pochi byte dovrebbe avere un costo molto superiore a quello dei calcoli che si fanno sulle particelle. Inoltre, e' naturale aspettarsi che l'allocatore abbia un overhead di qualche byte su ogni allocazione, percio' rispetto ad un array di strutture compatto aumenta l'uso di memoria e diminuisce la localita' delle cache della CPU. Prima di prendere una posizione, ho pensato di fare un piccolo benchmark per stimare questo overhead. Ho aggiunto un loop nel main del gioco che alloca e libera 3 milioni di piccole strutture. Come al solito ho sottovalutato la mostruosa potenza delle CPU moderne. Questi sono i risultati sulla mia macchina (Athlon 1GHz, Linux con glibc 2.2.90): sizeof(test_struct) = 16 allocation time: 1.350 distance1: 24 distance2: 24 distance3: 24 freeing time: 1.010 Si evince che: - allocare la memoria ha un costo ridicolo (ma probabilmente i calcoli che facciamo sulle particelle avvengono in un tempo ancora piu' piccolo) - liberare la memoria e' ancora piu' veloce che allocarla; - l'overhead per ogni allocazione e' di 8byte. Se si aumenta la dimensione della struttura a 20 byte, l'overhead scende a 4byte (che probabilmente contengono per la dimensione del blocco da passare a free(). - new e delete sono veloci esattamente quanto malloc() e free(); Mi piacerebbe vedere che risultati si ottengono su Windows, in cui l'implementazione dell'allocatore e' completamente diversa. - -- // Bernardo Innocenti - Develer S.r.l., R&D dept. \X/ http://www.develer.com/ - ---------------------------------------------------------------------- Try our multiplatform arcade classic: http://www.sf.net/projects/dlab/ - ---------------------------------------------------------------------- -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.0.7 (GNU/Linux) iD8DBQE9IAmXltU4TfxqZsoRArmZAJ42/V7YAp5vK5nLxEQkFxvgA0f9WQCfQM5Z mLJWMvigMMZ0qbOr3tYrztE= =85pQ -----END PGP SIGNATURE----- |