Microsoft Excel e GPU

Anonimo
2020-04-29T15:59:22+00:00

Ho il seguente problema:

utilizzo Excel programmato in VBA per eseguire una serie di calcoli che vengono effettuati su più cartelle, ciascuna delle quali ha una dimensione di circa 35000 Kb, esse prendono i dati da elaborare (circa 60000 per ciascuna cartella) e forniscono un risultato che viene trasferito in una cartella che alla fine estrapola un unico risultato che si presenta come un foglio dove vengono esplicitate le istruzioni che devono essere eseguite nel corso delle 4 ore successive.

Per far tutto ciò Excel impiega circa 25 minuti con un PC con una CPU speed max di 3.30 GHz.

Per accelerare il tutto pensavo di passare ad un PC che fosse in grado di effettuare il GPU computing impiegando, oltre la CPU (ad esempio una Intel i9), una o più schede grafiche (ad esempio le Nvidia GForce), ma ho i seguenti dubbi:

  1. Excel ne può beneficiare?
  2. che tipologia di PC dovrei usare?
  3. saranno necessari anche altri programmi o Windows 10 è sufficiente?

Se qualcuno mi può aiutare gli sarei infinitamen te grato

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2020-05-01T10:36:57+00:00

Quando si lavora con più file in excel per velocizzare sono fondamentali alcune operazioni:

  1. Application.ScreenUpdating = False
  2. il ricalcolo va fatto manualmente

Application.Calculation = xlCalculationManual

ActiveSheet.Calculate quando serve

2bis) se il ricalcolo non serve di tutto il foglio ma solo di alcune celle, non va proprio fatto, soprattutto se il foglio contiene parecchi calcoli da fare, piuttosto quei calcoli vanno fatti all'interno di vba.

  1. Creare un tipo di dato congruo ai dati con cui lavori per il punto 4
  2. Non aprire mai più di quel che serve un foglio, se sono 50 fogli, devono essere aperti 50 volte e basta, se vi e' necessita di quei dati, vanno salvati in memoria mediante il tipo di dato congruo.
  3. Se stai aprendo più volte gli stessi file stai sbagliando, se stai tenendo aperto il file per rileggere più volte le stesse celle da esso, stai sbagliando. Seguendo il punto 4, non lasciare i file aperti se non servono, rallentano il processo. Salvare i dati necessari in memoria tramite il punto 3.

6 avanzato) Cache, se i dati letti non vengono modificati spesso, vanno messi in cache, si deve ripensare alle funzioni, la cache può essere generata anche da un singolo file che contiene tutti quelli che non vengono modificati.

Inoltre quell'application.wait va eliminato, in qualche modo, soprattutto se viene richiamato più di una volta. Di nuovo, non vedendo il codice non posso aiutarti.

Per quanto riguarda CUDA: VBA non usa CUDA, CUDA e' usato in C++, Excel e' scritto in C++ e utilizza l'accelerazione hardware per mostrare a video forme, disegni etc.

VBA usa la CPU.

La GPU non e' più veloce della CPU e non ha l'accesso diretto alla ram.

La GPU ha solo più core e più fare più cose contemporaneamente, ma VBA non supporta il multi-thread.

La GPU e' specifica più per lavori ripetitivi piuttosto che calcoli matematici complessi.

Ovvio se compri un i9 9900k con un ssd NVME M.2 velocizzerai l'esecuzione, ma non aspettarti di portarla a pochi secondi o di avere grandi miglioramenti, la spesa vale la resa? O e' meglio rivedere il codice?

Spero di esserti stato utile, un saluto.

La risposta è stata utile?

3 persone hanno trovato utile questa risposta.
0 commenti Nessun commento

11 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2020-04-29T16:27:47+00:00

    Ciao,

    bentrovato nella community Microsoft, piacere di aiutarti, sono Daniele un consulente indipendente,

    Excel fa largo uso della CPU, la GPU non e' contemplata nell'elaborazione di VBA. Piu che cambiare computer si potrebbe riscrivere il codice in modo da renderlo piu veloce. Ma e' difficile da dire senza avere dei dati sottomano.

    Potresti provare su un PC piu performante, sicuramente migliorerebbe la computazione, forse guadagneresti qualche minuto, difficilmente arriveresti a pochi minuti, ma il problema penso derivi da come e' stato scritto quel programmino.

    Vedi inoltre quanta CPU viene utilizzata al momento dell'esecuzione per rendertene conto, da Gestione Attivita.

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2020-04-30T09:25:38+00:00

    Ps chiariscimi i termini usati considerando quanti segue

    Cartella: Contenitore di Windows contenente più file.

    File Excel: File con estensione xlsx o xlsm relativo ad Excel.

    Foglio di Excel: Foglio contenuto all’interno del file Excel, possono essere 1 o più per ogni file Excel.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2020-04-30T09:22:49+00:00

    Dubito fortemente che nonostante la dimensione abbastanza grande, ci possano volere, con un SSD, 120secondi per aprire un file da soli 30mb, considerando soprattutto che Excel impiega tempo solo alla prima apertura c’è qualcosa che non va nel codice.

    Puoi mostrare solo il codice?
    Se sono dati sensibili, I file non sono importanti.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2020-04-30T09:07:15+00:00

    Grazie per avermi risposto.

    Ti riassumo qui di seguito alcune cose:

    • Il programma impiega 28' e 32" per ultimare i suoi calcoli
    • solo per aprire e chiudere ciascuna delle cartelle impiega da 27" ad 1' e 53" a seconda della cartella; le cartelle hanno le seguenti dimensioni (minimo 16500 Kb massimo 34000 Kb) ed ho notato che il tempo di apertura e ricalcolo si allunga non proporzionalmente alle dimensioni, ma al numero di fogli coinvolti nei calcoli di ciascuna cartella, mi spego: alcune cartelle sono organizzate su più fogli il primo esegue dei calcoli e passa i suoi risultati al secondo che a sua volta, dopo aver eseguito i suoi calcoli li passa alterzo che, dopo aver eseguito i suoi calcoli li ripassa al primo per concludere i propri calcoli (alcune cartelle sono organizzate sino a 9 fogli, in questi casi tutti i fogli sono indipendenti tranne il primo che raccoglie i risultati degli altri
    • durante l'esecuzione impiega sino all'85% della CPU 
    • la maggioranza del tempo impiegato viene speso per aprire e chiudere le cartelle, vi è da dire che nella fase di apertura vengono ristabiliti i collegamenti alle banche dati e si svolge anche il calcolo vero e proprio; non è possibile accorpare più cartelle, perchè si rischia di impegare tempi ancora più lunghi per la loro apertura e salvataggio
    • so che se riscrivessi il programma potrei guadagnare almeno 6-8 minuti, ma non vorrei rinunciare ad una parte di programma che non è essenziale, ma rende più semplice e rapido il lavoro di manutenzione delle stesse
    • come già detto ho una CPU basata su un Intel i7 4 core tutti attivi al 100% con possibilità di  turbo boost sino al 50%, frequency scaling 25% e base frequency di 2.81 GHz e speed max di 3.30 GHz, la temperatura base è di circa 46° che vanno sino a 77° sotto sforzo
    • il disco è un SSD e la memoria RAM è 8 Gb.

    Qualsiasi commento è gradito

    La risposta è stata utile?

    0 commenti Nessun commento