2010-04-01 16 views
8

Si prega di avvisare gentilmente i benchmark utilizzati per testare un allocatore C e C++? Benchmark che soddisfano una delle seguenti aspetti sono considerati:Benchmark utilizzati per testare un allocatore C e C++?

  1. Velocità
  2. frammentazione
  3. Concurrency

Grazie!

+0

Quale aspetto di testare, velocità, frammentazione ecc.? –

+0

Ho modificato per vostro suggerimento. Grazie. – Viet

risposta

4

Se si chiede un allocatore generale per un programma C/C++, ho trovato questo documento Hoard: A Scalable Memory Allocator for Multithreaded Applications che considera questa domanda. Questa è una citazione da questo documento

Non v'è ancora alcuna suite standard di parametri di riferimento per valutare allocatori multithread. Sappiamo di nessun parametro che sottolinea in modo specifico le prestazioni multithread del server come i server di database 1 e i gestori di database . Abbiamo scelto benchmark descritti in altri documenti e altrimenti pubblicate (benchmark Larson da Larson e Krishnan [22] e il benchmark shbench da MicroQuill, Inc. [26]), due applicazioni multithread che comprendono benchmark (BEMengine [7] e barnes-hut [1, 2]) e ha scritto alcuni dei nostri microbenchmark diversi aspetti dell'allocazione della memoria prestazioni (threadtest, active-false, passive-false).

Questo documento è un po 'vecchio. Tuttavia, recentemente ho visto un allocatore per HP-UX (MallocNextGen) e HP non può garantire che sia valido per tutte le possibili applicazioni. Dice:

Il nuovo allocatore è generalmente dovrebbe migliorare le prestazioni delle applicazioni . Tuttavia, potrebbero essere disponibili alcune applicazioni per le quali le prestazioni di potrebbero peggiorare. Quindi gli utenti sono invitati a punto di riferimento i loro applicazioni con la memoria predefinita allocator in libc e con la allocatore in libmallocng prima di utilizzare la nuova allocatore in un ambiente di produzione .

Per quanto riguarda la velocità e la concorrenza, la mia esperienza è che è necessario misurare le prestazioni del proprio programma per confrontare due diversi allocatori. Se parliamo di Linux puoi usare LD_PRELOAD per caricare diversi allocatori.

+0

+1. Sì, se non ci sono benchmark standard, quindi su quale terreno dovremmo percepire e interpretare i risultati? – Viet

+0

Per quanto ne so, un'idea è misurare le proprie prestazioni dell'applicazione. D'altra parte è possibile scegliere un set di programmi reali e propri test per confrontare gli allocatori. –

5

È possibile scaricare nedmalloc e provare a confrontare l'allocatore con esso. Ha un test chiamato test.c con il codice sorgente, che è possibile riscrivere in base al proprio allocatore.

+0

+1 Grazie AraK! – Viet

5

Ho provato diversi allocatori alcuni anni fa e la mia esperienza è che i risultati dipendono dal tipo di test.Se si desidera scrivere alcuni benchmark te stesso, considerare le seguenti situazioni:

  • allocare molta memoria di un unico formato, quindi liberi tutto
  • allocare molta memoria di dimensioni diverse, quindi liberi tutto
  • allocare solo alcuni blocchi di memoria, liberarli e ripetere questo ciclo più volte (ripetere per blocchi di dimensioni uguali e blocchi di dimensioni diverse)
  • allocare molta memoria di dimensioni diverse, metà libera di esso (ad es. allocazioni), quindi allocare e liberare memoria in un ciclo
  • uso due fili di allocare memoria in parallelo
  • uso tre, quattro, cinque, ... thread da allocare la memoria in parallelo

Si noterà che i risultati saranno differenti per ogni prova. Gli allocatori che sono molto bravi in ​​una situazione, possono essere cattivi in ​​altre situazioni.

In pratica ciò significa che è meglio testarlo nella propria applicazione, in una situazione dal vivo/realistica.

+0

+1 suona bene Patrick. – Viet

Problemi correlati