Mostra notizie nelle discussioni
  • Avatar
    Scritto da
    Non Autenticato
    il 2009-01-25 14:38:00.0 alle 2009-01-25 14:38:00.0
    x chi conosce il C
    un applicativo che funziona ininterrottamente da anni su un pentium 233 con windows 2000, questo non fa altro che leggere in continuazione una matrice di 100x100 allocazioni di memoria dove scrive un driver di una scheda di acquisizione dati AD/DA e salva le variazioni su un file di log che ogni tanto ruota.
    Adesso ho cambiato HW e deve funzionare su uno Xeon X5470 3.33GHz Windows Server 2008, il problema è questo:

    il consumo di CPU sale anche al 30% su quel processo, mentre con il pentium stava a zero, ci sono 100 cicli annidati in cui ci sono altri 100 cicli per leggere la matrice di allocazioni, i cicli è vero sono stretti però con il pentium funzionava tutto, ho provato ad allentarli con qualche micro secondo di sleep, il consumo di CPU va a zero ma perdo decine di eventi.

    cosa faccio? In lacrime
    • Avatar
      Scritto da
      Non Autenticato
      il 2009-01-25 14:59:00.0 alle 2009-01-25 14:59:00.0
      Re: x chi conosce il C
      Ma perchè hai usato 100 cicli annidati?

      Per leggere una matrice bastano due cicli annidati che scorrono rispettivamente le righe e le colonne.

      A parte questo, potresti verificare se il driver genera un'interrupt quando scrive qualcosa. In questo modo la tua routine verrebbe attivata solo quando serve.

      Infine potresti provare a ricompilare il progamma con maggiori ottimizzazioni nel compilatore.

      > sono 100 cicli annidati in cui ci sono altri 100
      > cicli per leggere la matrice di allocazioni, i
      > cicli è vero sono stretti però con il pentium
      > funzionava tutto, ho provato ad allentarli con
      > qualche micro secondo di sleep, il consumo di CPU
      > va a zero ma perdo decine di
      > eventi.
      >
      > cosa faccio? In lacrime
      • Avatar
        Scritto da
        Non Autenticato
        il 2009-01-25 15:22:00.0 alle 2009-01-25 15:22:00.0
        Re: x chi conosce il C
        > Ma perchè hai usato 100 cicli annidati?
        >
        > Per leggere una matrice bastano due cicli
        > annidati che scorrono rispettivamente le righe e
        > le
        > colonne.

        sarebbe bello, però devo leggere un locazione corrispondente per capire se la lettura e' valida, sbloccarla e passare oltre

        > A parte questo, potresti verificare se il driver
        > genera un'interrupt quando scrive qualcosa. In
        > questo modo la tua routine verrebbe attivata solo
        > quando
        > serve.

        purtroppo no è una free run, costruita appositamente per leggere fino a 10M/s per canale

        >
        > Infine potresti provare a ricompilare il progamma
        > con maggiori ottimizzazioni nel
        > compilatore.

        già fatto, ma niente, se provo a far eseguire il processo ad una sola CPU il consumo cala drasticamente, idem se lascio linkato il debugger, però con una soluzione più elegante sarebbe meglio.


        Triste
<softv>

Pagina generata in 32 millisecondi

Utenti attivi: 26 nell'ultimo minuto, 58 negli ultimi cinque minuti, 156 negli ultimi 15 minuti