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-05-04T15:27:20+00:00

    Ti avevo già risposto venerdì scorso, ma vedo che la mia risposta non è stata trattenuta.

    Ti ringrazio per il tempo che mi hai dedicato e per questo ti avevo assegnato 5 stelle, spero che siano state conteggiate, visto che la mia risposta è sparita.

    Ti sono grato per avermi chiarito molte cose relative a Excel, Gpu ed affini.

    Inoltre mi haai dato la spinta a riscrivere il mio programma una volta per tutte (il programma è cresciuto nel tempo aggiungendo vari pezzi ad un corpo scritto anni addietro), sono molto pigro e non lo avevo mai riscritto, ma tu mi hai fatto capire che è troppo ridondante, che esistono istruzioni inutili, che ne rallentano l'esecuzione, visto che ci sono vari stop in cui il tempo passa, ma non succede nulla.

    Il programma è nato ancora su Widows XP ed è ora che venga riscritto per sfruttare al meglio Windows 10.

    Grazie ancora.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2020-05-01T09:31:57+00:00

    Mi sono sbagliato col mio precedente commento: o introdotto le funzioni di congelamento dello schermo in un'altra macro, quella incriminata che impiega 18' e 57" per completarsi ne era già provvista e quindi i 18' e 57" restano tali (essa richiama, ricalcola e salva 25 Cartelle diverse e ciascuna Cartella contiene da 4 a 10 Fogli che si scambiano informazioni tra loro per eseguire i vari calcoli).

    A questo punto ritengo che per velocizzare la cosa si debba usare un alro hardware.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2020-05-01T07:36:47+00:00

    Tutti i programmi che uso li ho scritti io, così come tutte le funzioni e le macro.

    Application.Wait Now + TimeValue("00:00:10")
    

    serve per far sì che ci sia un untervallo vuoto di 10" tra due istruzioni, normalmente la uso quando l'istruzione che precede richiama una Cartella con nidificata una serie di aperture di Cartelle che richiamano altre cartelle e non vi è la certezza che l'esecuzione del comando successivo non si sovrapponga, oppure quando viene richiamato un programa che non è della Microsoft e da cui devo scaricare dei dati da far ricopiare in un programma Microsoft.

    Penso che tu abbia centrato il problema e ti ringrazio: non ho messo le istruzioni:

    Application.ScreenUpdating = False

    ...

    Application.ScreenUpdating = True 

    in testa ed in coda della macro principale!!!Atttualmente vengono usate 52 file, ma possono re ad essere anche 208, inoltre la macro che sovrintende a tutto il processo richiama dati anche da vari siti web e da alcuni programmi non Microsoft: è per questo che mi era venuto in mente di usare il GPU computing usando i programmi Cuda di Nvidia.

    Non posso fornirti esempi dei file di Excel, perchè non saprei come svuotarli da dati sensibili, dato che le varie Cartelle sono esse stesse dati sensibili in quanto contengono una simulazione in serie di un proceso in parallelo che non voglio mostrare.

    Comunque voglio ringraziarti per il tempo che mi hai dedicato e per avermi aaperto gli occhi sul fatto che mancava l'istruzione di congelamento dello schermo, solo con quella ho risparmiato 6'.

    Inoltre confrontandomi con te mi è venuto in mente un'altra area su cui intervenire che potrà accorciare i tempi.

    Mi ritengo soddisfatto pienamente.

    Se poi vuoi parlare di che arduware e software ci vorrebbero per usare schede grafiche per fare calcoli numerici (non grafici) in luogo delle CPU sono qui pronto ad imparare.

    La risposta è stata utile?

    0 commenti Nessun commento