- Questo topic ha 8 risposte, 4 partecipanti ed è stato aggiornato l'ultima volta 13 anni, 2 mesi fa da
OldClaudio.
-
CreatoreTopic
-
10 Giugno 2013 alle 9:15 #86585::
Ciao a tutti,desidererei capire cosa sta dietro all’uso della memoria da parte di [tt]TikZ[/tt] e/o TeX. Al riguardo avrei due domande:
- Ogni volta che [tt]TikZ[/tt] completa un disegno, svuota la memoria occupata? Se non è così, perché?
- Perché non è possibile dire a TeX (e/o [tt]TikZ[/tt]) di usare tutta la memoria di cui dispone il computer? (Ovviamente nel caso limite in cui fosse necessario). Se a me andasse bene di aspettare anche 10 minuti di compilazione per un solo documento, perché devono essere posti dei limiti sulla memoria, quando al giorno d’oggi non lo è di certo? Non pensate che sarebbe un bel passo in avanti non avere più quei problemi legati alla “main memory” di TeX? Forse è una cosa assurda da realizzare ma mi piacerebbe poter dire a TeX che se ha bisogno può usare anche tutta (o parte) la memoria di un HDD esterno.
Vi ringrazio molto fin d’ora anche di qualsiasi opinione vorrete esprimere. Buona giornata!
Marco.
-
CreatoreTopic
-
AutoreRisposte
-
-
1 Luglio 2013 alle 17:43 #86586::
Marco87″ post=85979Ciao a tutti,
desidererei capire cosa sta dietro all’uso della memoria da parte di [tt]TikZ[/tt] e/o TeX. Al riguardo avrei due domande:
- Ogni volta che [tt]TikZ[/tt] completa un disegno, svuota la memoria occupata? Se non è così, perché?
- Perché non è possibile dire a TeX (e/o [tt]TikZ[/tt]) di usare tutta la memoria di cui dispone il computer? (Ovviamente nel caso limite in cui fosse necessario). Se a me andasse bene di aspettare anche 10 minuti di compilazione per un solo documento, perché devono essere posti dei limiti sulla memoria, quando al giorno d’oggi non lo è di certo? Non pensate che sarebbe un bel passo in avanti non avere più quei problemi legati alla “main memory” di TeX? Forse è una cosa assurda da realizzare ma mi piacerebbe poter dire a TeX che se ha bisogno può usare anche tutta (o parte) la memoria di un HDD esterno.
Vi ringrazio molto fin d’ora anche di qualsiasi opinione vorrete esprimere. Buona giornata!
Marco.Ciao Marco, le domande sono interessanti ma non saprei aiutarti. Intanto hai trovato risposta?
Ciao,
Orlando
-
1 Luglio 2013 alle 19:43 #86587::
Marco, se ne è parlato molto circa un anno fa quando il problema era quelo di inserire nell’arte esempi e documentazione per l’uso di pgfplots.Il problema è che nessun programma deve usare tutta la memoria disponibile; o meglio, bisogna definire che cosa è disponibile. Per i calcolatori di una volta, assolutamente NON multitasking, si riuscivano a fare cose meravigliose con hard disc piccolisimi rispetto a quelli disponibili oggi e con pochi mega di RAM. Ma il sistema operativo, mella sua semplicità eseguiva solo un programma alla volta, oltre a se stesso, come interfaccia da e verso le periferiche.
Oggi i caolcaltori sono multitasking, quindi anche se hai 4GiB di RAM e 8GiB sull’hard diskdi memoria SWAP, questo può non essere sufficiente e rallentare le centinai di processi in esecuzione in ogni istante. Quindi ogni programma che si rispetti non deve richiedere memoria al sistema operativo fioo al punto in cui si arrestano gli altri processi, compreso il sistema operativo stesso, per mancanza di RAM.
Quindi i programmi tex, pdftex,xetex,luatex,aleph, eccetera, devono essere concepiti in modo tale da stare ben lontani da quei limiti; se guardi la statistica alla fine del file log, ci sono scritte le ampiezza di memoria dedicate dall programma eseguibile per eseguire le varie funzioni che deve svolgere; si tratta quasi sempre di milioni di parole di 4 byte; quindi aree di memoria piuttosto vaste, anche se sono lontane dia miliardi di Byte della RAM e dei tebibyte dei dischi. ma garantiscono la velocità di esecuzione e in paratica anche l’assenza di swapping per gestire la RAM e la memoria virtuale.
Allora, durante la discussione si pgfplots fu detto anche come allargare la memoria per i programmi di TeX Live; non mi ricordo se fu detto anche per MiKTeX, ma si parlava solo di raddoppi di memoria, non di ampliamenti vertiginosi.
Diamine, allora perché TikZ per fare un disegno occupa tanta memoria? perché non la libera appena ha finito? Perché tiene in memoria moltissimi dati per fare un diagramma, e non li usa finché non ce li ha tutti a disposizione; ma quando ce li ha a disposizione esegue il disegno, ma non lo scarica dalla memoria, bensì lo mette nella coda degli oggetti flottanti; solo quando la routine di output dell’interprete spedisce fuori (tecnicamente Knuth ha usato il verbo to ship out) una pagina composta contenete anche il disegno, solo allora la memoria si scarica, almeno di quello che è stato spedito fuori.
Questo è quello che ho capito io, che non sono un ingegnere informatico, ma uso il calcolatore, programmando anche in linguaggio macchina, da una cinquantina d’anni (cinquanta anni fa programmare in linguaggio macchina era una cosa “normale”; oggi non lo faccio più); ma anche se oggi sono cose poco comuni, quell’apprendistato ha insegnato molto a noi della vecchia guardia; non pretendo di capire tutto quello che fa il calcolatore dietro le quinte, ma credo di averne una idea abbastanza ben approssimata.
Se qualche ing. informatico vuole correggermi e spiegare meglio a tutti noi frequentatori del forum tutta la faccenda, io sono il primo ad essere contento.
-
4 Luglio 2013 alle 9:11 #86588::
Ciao,intanto grazie a tutti per le risposte. Purtroppo le ho viste solo ora e solo ora rispondo. Perdonatemi.
@Orlando: a parte la risposta di Claudio qua sopra, direi di no. 🙁
@Claudio: hai ragione, e ricordo di aver letto qualcosa del genere tempo fa. Il punto è che questo limite di LaTeX, concettualmente parlando è per me molto grosso. Certo, per tanti documenti è solo un problema concettuale, ma a mio parere è qualcosa che andrebbe eliminato (almeno in una misura maggiore rispetto a ora).Naturalmente se un programma richiede una quantità di memoria tale da far arrestare il sistema operativo, la cosa è disastrosa e inaccettabile. Però da questa condizione a quella in cui si trova attualmente [tt]TikZ[/tt] (e/o TeX) c’è un divario (sempre a mio avviso) enorme. Supponiamo che disponga di 4GB di RAM e di un hard disk di 350GB. Supponiamo che crei una partizione A di 75GB. Perché non posso dire a [tt]TikZ[/tt] (e/o TeX): «usa pure tutta la memoria della partizione A»? Insomma, senza arrivare a provocare l’arresto del sistema operativo, mi piacerebbe poter dire a [tt]TikZ[/tt] (e/o TeX) di usare una certa parte dell’hard disk (di dimensioni ben maggiori di quelle che al momento sono concesse con l’ampliamento di memoria di TeX). Nemmeno io sono un ingegnere informatico; sicuramente ci sono soluzioni migliori di quella che ho proposto io. Tuttavia, a mio avviso questo limite è qualcosa su cui il team di LaTeX “dovrebbe” lavorare; e con “dovrebbe” intendo che ne sarei molto contento. 😉
OldClaudioQuindi i programmi […] luatex […], eccetera, devono essere concepiti in modo tale da stare ben lontani da quei limiti; […]
Però, se non ho capito male LuaLaTeX non soffre del problema di memoria che si può riscontrare, ad esempio, con pdfLaTeX. O sbaglio?
OldClaudio[…] lo mette nella coda degli oggetti flottanti; solo quando la routine di output dell’interprete spedisce fuori (tecnicamente Knuth ha usato il verbo to ship out) una pagina composta contenete anche il disegno, solo allora la memoria si scarica, almeno di quello che è stato spedito fuori.
Quindi, se ho capito correttamente, una volta che la pagina in cui compare un disegno viene composta, il disegno viene cancellato dalla memoria. Questo vuol dire che finché impedisco la formazione di una coda piuttosto intasata, non dovrei avere problemi di memoria. È corretto?
Grazie mille e buona giornata,
Marco.
-
4 Luglio 2013 alle 13:17 #86589::
Quindi, se ho capito correttamente, una volta che la pagina in cui compare un disegno viene composta, il disegno viene cancellato dalla memoria. Questo vuol dire che finché impedisco la formazione di una coda piuttosto intasata, non dovrei avere problemi di memoria. È corretto?
È una buona approssimazione di una affermazione corretta.
-
4 Luglio 2013 alle 14:57 #86590::
Marco87″ post=86814Quindi, se ho capito correttamente, una volta che la pagina in cui compare un disegno viene composta, il disegno viene cancellato dalla memoria. Questo vuol dire che finché impedisco la formazione di una coda piuttosto intasata, non dovrei avere problemi di memoria. È corretto?
Già. E per i disegni in linea con il testo?
OldClaudio” post=86725Quindi ogni programma che si rispetti non deve richiedere memoria al sistema operativo fioo al punto in cui si arrestano gli altri processi, compreso il sistema operativo stesso, per mancanza di RAM.
Il problema, se ho capito bene, è che LaTeX non gestisce l’allocazione dinamica della memoria, perciò non è in grado di utilizzarne quanta gliene serve, ma ne riserva una parte che viene impegnata indipendentemente dal fatto che sia effettivamente utilizzata oppure no, perciò deve essere necessariamente non troppo grande per evitare problemi in sistemi datati. Se è così, si è fatto qualcosa in LaTeX3?
Ciao
-
4 Luglio 2013 alle 17:54 #86591::
Il problema, se ho capito bene, è che LaTeX non gestisce l’allocazione dinamica della memoria, perciò non è in grado di utilizzarne quanta gliene serve, ma ne riserva una parte che viene impegnata indipendentemente dal fatto che sia effettivamente utilizzata oppure no, perciò deve essere necessariamente non troppo grande per evitare problemi in sistemi datati. Se è così, si è fatto qualcosa in LaTeX3?
LaTeX3 è solo un pacchetto di macro, non è il motore di compilazione, quindi il linguaggio LaTeX3 non interagisce direttamente con il sistema operativo; forse LuaLaTeX può fare di queste allocazioni dinamiche di memoria, am non ho abbastanza esperienza epr affermarlo.
Tuttavia, sebbene oggi la RAM non sia un problema e la memoria virtuale nemmeno, l’uso dell’allocazione dinamica della memoria può essere usato solo da programmatori moto esperti; C e C++ lo possono fare, ma non sono linguaggi interpretai, ma sono compilati. Altri programmi possono ricorrere all’allocazione dinamica della memoria, ma è pericoloso in mao ad apprendisti stregoni (vedi: Walt Disney, Fantasia).
Se e quando pdfTeX, XeTeX, LuaTeX, eccetera, (i veri motori di composizione} disporranno di allocazione dinamica delle memoria forse sarà un bene, forse sarà un male. Penso in particolare agli apprendisti programmatori in linguaggio LaTeX che producono loop infiniti; ogni loop infinito può essere del tutto innocente, se semplicemente gira senza allocare nulla, mentre quando si alloca memoria per qualche motivo, anche pochi byte, il loop infinito finisce con riscrivere tutto il disco, comprese le aree del sistema operativo e ogni altro dato presente sul disco. Ti parrebbe bello che una simile funzionalità vada in mano a chi, come [raramente] me ha commesso questo genere di errori? Per fortuna ero abbastanza esperto per uccidere il processo prima di subire danni, ma se non fossi stato attento ora sarei qui a battermi il petto recitando un loop infinito di “mea culpa”.:mad:
-
5 Luglio 2013 alle 5:32 #86592::
Sul LuaTeX Reference Manual, nel paragrafo 10.2 si legge (il neretto l’ho aggiunto io):LuaTeX_Reference_ManualThe single internal memory heap that traditional TEX used for tokens and nodes is split into two separate arrays. Each of these will grow dynamically when needed.
The texmf.cnf settings related to main memory are no longer used (these are: main_memory, mem_bot, extra_mem_top and extra_mem_bot). ‘Out of main memory’ errors can still occur, but the limiting factor is now the amount of RAM in your system, not a predefined limit.
<...>
The input line buffer and pool size are now also reallocated when needed, and the texmf.cnf settings buf_size and pool_size are silently ignored.Quindi l’allocazione dinamica riserva la quantità di memoria necessaria non oltre la capacità della RAM del sistema.
Ciao
-
5 Luglio 2013 alle 6:47 #86593
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.