Velocità generazine nodi


Questa pagina ha una gerarchia - Pagina madre:Programmazione

Home Forum Programmazione Velocità generazine nodi

Questo argomento contiene 5 risposte, ha 4 partecipanti, ed è stato aggiornato da stegemma stegemma 1 anno fa.

Stai vedendo 6 articoli - dal 1 a 6 (di 6 totali)
  • Autore
    Articoli
  • #10652
    Luciano79
    Luciano79
    Membro

    Ciao a tutti,
    ho finito di trascrivere il programma da C# a C++. La differenza di performance è esagerata, sono passato da 6ply in 2 secondi a 7ply in un tempo leggermente inferiore e spero di poter ottimizzare ulteriormente (uso ancora solo il MiniMax).

    Per curiosità ho fatto il seguente esperimento, e son rimasto sconcertato dall’esito:
    Se disabilito la potatura la velocità di generazione dei nodi passa da 6.300K al secondo attuali a 24.0000K al secondo! Ho ripetuto più volte l’esperimento perchè la differenza è enorme, ma confermo i dati.

    Non sono sicuro di aver capito il motivo, ma sperando che non si tratti di un mio errore provo a darmi una spiegazione:
    la parte più lenta è la ricerca delle mosse. Nel momento in cui taglio un ramo, il tempo utilizzato per la ricerca di tutte le mosse di quel ramo è tempo sprecato.

    Ora faccio così:

    – Genera Lista Mosse (parte lenta?)
    – Inizio ciclo (Per ogni mossa)
    – PosizioniAnalizzate++
    – Muovi
    – MiniMax
    – Takeback
    – Verifica se tagliare
    – Fine ciclo

    Se quello che penso è vero, allora non devo generare subito la lista delle mosse, ma fare una cosa del tipo

    – Inizio ciclo
    – Cerca la prossima mossa
    – PosizioniAnalizzate++
    – Muovi
    – MiniMax
    – Takeback
    – Verifica se tagliare
    – Fine ciclo

    Avete già avuto esperienza in materia?

    #10653

    La parte di generazione delle mosse è generalmente più lenta dell’esecuzione delle stesse. In ricerca in genere si generano le mosse e poi ne analizzi solo alcune per arrivare al taglio quindi hai molte chiamate al generatore e meno alla funzione che esegue e rispristina le mosse. Eliminando i tagli il generatore viene chiamato poche volte mentre le più veloci funzioni di esecuzione e ripristino sono chiamate più volte.

    Quello che si usa fare è di creare 2 generatori: uno per le catture/promozioni e uno per le mosse quiete.
    In questa maniera allegerisci la generazione e migliori l’ordinamento visto che le mosse che causano tagli in ricerca sono perlopiù catture.

    Questo è un caso semplice ma per ottimizzare al meglio il codice un profiler può tornarti utile.

    Ciao

    #10656
    Luciano79
    Luciano79
    Membro

    Ottimo, per ora ordinavo solo le mosse per “guadagno”, non avevo pensato a fare in due step.
    Altra info:
    fino ad oggi ho sempre lavorato sul pc dell’azienda, anche da casa mi collegavo in remoto. E’ un Intel i7 3.40GHz e con le ultime modifiche sono arrivato ad una media di 10M di nodi al secondo.
    Mi sono fatto una copia sul mio portatile, uno dei primi AMD a 64bit di qualche anno fa e i tempi medi di analisi sono aumentati di 10 volte, 1M di nodi al secondo.
    Immagino quindi che nei tornei tutti i programmi debbano essere installati su uno stesso pc, altrimenti a parità di forza software vince chi spende più soldi per il computer. Corretto?

    #10657
    Luciano79
    Luciano79
    Membro

    Quello che si usa fare è di creare 2 generatori: uno per le catture/promozioni e uno per le mosse quiete.
    In questa maniera allegerisci la generazione e migliori l’ordinamento visto che le mosse che causano tagli in ricerca

    Grazie Fabio,
    con questo accorgimento son passato da 10M al secondo a 14M!!!
    Scusate se spammo con i post, mi sta tornando molto utile la vostra esperienza!

    Ciao
    Luciano

    #10659

    marco belli
    Membro

    Immagino quindi che nei tornei tutti i programmi debbano essere installati su uno stesso pc, altrimenti a parità di forza software vince chi spende più soldi per il computer. Corretto?

    dipende dal torneo, in alcuni tornei tipo il TCEC viene fatto una sfida fra programmi in un ambiente omogeneo, in altri casi ci sono tornei in cui ognuno usa il sistema che vuole.
    In generale ogni classifica che trovi su internet, tipo CCRL, IPON o altro è fatta con un hw di rieferimento in modo da poter avere risultati confrontabili e omogenei

    #10677
    stegemma
    stegemma
    Moderatore

    Il C# è il Basic dei programmatori C++ 😉 e i tuoi risultati lo confermano. Si dice che il C sia ancor più veloce ma questo credo che sia ormai una “diceria” equivalente alla superiorità del Mac sui sistemi Windows o… alla superiorità morale della sinistra! 🙂

    Scherzi a parte, mi sembra che i risultati che hai ottenuto siano notevoli, complimenti!

Stai vedendo 6 articoli - dal 1 a 6 (di 6 totali)

Devi essere loggato per rispondere a questa discussione.

© 2017 G 6 Tutti i diritti riservati - Buon divertimento!

By continuing to use the site, you agree to the use of cookies. more information

Questo sito utilizza i cookie per fonire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o clicchi su "Accetta" permetti al loro utilizzo.

Chiudi