KR Puntatore a struttura anonima

di il
23 risposte

23 Risposte - Pagina 2

  • Re: KR Puntatore a struttura anonima

    Con gcc puoi usare lo switch

    -S

    nel comando di compilazione
  • Re: KR Puntatore a struttura anonima

    L'aritmetica dei puntatori non serve per vari motivi, uno dei tanti e' si cerca sempre di piu' di non averli tra le scatole, a favore di oggetti piu' smart, come le collezioni STL, e gli smart pointer, iteratori
    Avere un puntatore vuol dire, nel 99% dei casi, avere a che fare con allocazione/deallocazione di memoria, che si cerca di delegare sempre di piu' agli oggetti smart, piuttosto che gestirla a mano.

    Anche la gestione degli array multidimensionali cosi' come e' fatta in C e' a tutti gli effetti inutile, se non per far ammattire I principianti.

    Una qualunque libreria di algebra lineare, che macina per sua natura, tensori di qualunque rango/dimensione, usa SOLO VETTORI, che poi visualizza a seconda di come li si vuole considerare (vettore, matrice, tensore, ..).

    Questo perche' e' operazione normale quella di 'ristrutturare' una matrice in un vettore o viceversa, o calcolare la trasposta, che in realta' NON VIENE calcolata, cioe' NON VIENE CREATA UNA COPIA, ma si fanno giochi di prestigio SOLO con gli indici e le dimensioni.

    Inoltre, una buona parte delle operazioni di algebra lineare vengono fatte sull'intero vettore e quindi scandirlo con un'unico indice e' molto efficiente, e si possono sfruttare le istruzioni assembler per le operazioni vettoriale (SSE, AVX, ....)

    Nota: un tensore e' la versione generalizzata di una matrice. Il numeri di 'dimensioni e' detto 'rango'
    Scalare/numero: tensore di rango 0 (zero)
    Vettore: tensore di rango 1
    Matrice: tensore di rango 2
    Cubo: rensore di rango 3
    ...

    L'esistenza dei puntatori? Ricorda: compatibilita' all'indietro!

    Infine, da quanto ho letto, finalmente in una delle prossime revisioni del C++ introducono il garbage collector.
  • Re: KR Puntatore a struttura anonima

    1 compattezza del sorgente non ha nulla a che vedere con il codice oggetto
    2 le differenze di prestazioni dipendono dalla CPU, e in particolare dalle istruzioni che può eseguire. Non tutte sono x86, e non tutte le x86 eseguono le stesse istruzioni nello stesso modo
    3 aritmetica c'è e resterà poiché è il modo in cui funzionano davvero le cpu
    4 in generale (e ribadisco in generale) il compilatore ha un maggior controllo sui tipi degli indici. Il dramma infatti, lato compilatore, è capire quanto sono grandi gli oggetti indiciati, ad esempio strutture packed o aligned,potrebbero non essere sempre lunghe quanto ci si aspetterebbe
  • Re: KR Puntatore a struttura anonima

    migliorabile ha scritto:


    Infine, da quanto ho letto, finalmente in una delle prossime revisioni del C++ introducono il garbage collector.
    Ti riferisci a questo?
    http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2670.htm
    Se è così, le API ci sono già ma nessun compilatore le ha implementate (almeno non risulta in questa tabella
    https://en.cppreference.com/w/cpp/compiler_suppor )
  • Re: KR Puntatore a struttura anonima

    Grazie oregon, grazie migliorabile, grazie +m2+ e grazie shodan
    per le vostre preziose osservazioni e dissertazioni, come sempre del resto.

    Rispetto alle considerazioni di migliorabile, siccome la gestione di matrici sono questioni di mio grande interesse, ti riferisci a framework tipo tensorflow? Se non sbaglio per il C esiste una versione per Unix - cosa che non mi dispiace - sono abituato a lavorare sotto unix. Per le altre considerazioni e metodologie a cui facevi accenno approfondirò con grande piacere.

    Ancora grazie a tutti voi.
  • Re: KR Puntatore a struttura anonima

    Le 'elucubrazioni mentali' sull'efficienza del codice sono ASSOLUTAMENTE inutili, oltre al fatto che tu (ma in generale NESSUNO a parte coloro che implementano i compilatori) hai la piu' pallida idea del tipo di ottimizzazioni che un compilatore puo' fare.

    E' ASSOLUTAMENTE meglio scrivere codice CHIARO, con cicli for CLASSICI ed usando gli indici, che mettersi a pasticciare con i puntatori.

    Ad esempio, il compilatore GNU (ma immagino anche tutti gli altri compilatori, sopprattutto quello della Intel) e' in grado di convertire il CODICE (realizzato mediante NORMALI cicli for) per calcolare il prodotto scalare di due vettori in codice macchina che sfrutta le funzioni SSEx.
    Immagino che tu non abbia idea che cosa siano, ma anche se lo sai, tu non le abbia mai usate.
    Eppure il compilatore e' in grado di fare questo tipo di ottimizzazioni.

    Miglioramenti di nanosecondi non sono molto utili.

    I VERI miglioramenti in termini di performance sono dell'invenzione di algoritmi PIU' EFFICIENTI che risolvono problemi in tempi quadratici, cubici o di grado anche piu' alto, o algoritmi approssimati per problemi NP-completi, dove passare dalle ore ai minuti, QUESTO SI' che e' un miglioramento di performance
  • Re: KR Puntatore a struttura anonima

    Tensorflow e' un esempio, ma puoi guardarti tutte le librerie di ALGEBRA LINEARE
    Blas
    Lapack
    Eigen
    Armadillo
    ...
    Boost multidimensional array
    ...
  • Re: KR Puntatore a struttura anonima

    migliorabile ha scritto:


    Le 'elucubrazioni mentali' sull'efficienza del codice sono ASSOLUTAMENTE inutili, oltre al fatto che tu (ma in generale NESSUNO a parte coloro che implementano i compilatori) hai la piu' pallida idea del tipo di ottimizzazioni che un compilatore puo' fare.

    E' ASSOLUTAMENTE meglio scrivere codice CHIARO, con cicli for CLASSICI ed usando gli indici, che mettersi a pasticciare con i puntatori.

    Ad esempio, il compilatore GNU (ma immagino anche tutti gli altri compilatori, sopprattutto quello della Intel) e' in grado di convertire il CODICE (realizzato mediante NORMALI cicli for) per calcolare il prodotto scalare di due vettori in codice macchina che sfrutta le funzioni SSEx.
    Immagino che tu non abbia idea che cosa siano, ma anche se lo sai, tu non le abbia mai usate.
    Eppure il compilatore e' in grado di fare questo tipo di ottimizzazioni.

    Miglioramenti di nanosecondi non sono molto utili.

    I VERI miglioramenti in termini di performance sono dell'invenzione di algoritmi PIU' EFFICIENTI che risolvono problemi in tempi quadratici, cubici o di grado anche piu' alto, o algoritmi approssimati per problemi NP-completi, dove passare dalle ore ai minuti, QUESTO SI' che e' un miglioramento di performance
    Ciao Migliorabile,
    sì in effetti le tue considerazioni sono assolutamente importanti. In effetti la "costruzione" dell'algoritmo ha un peso enorme. Le funzioni SSEx non sono sicuro di ricordare, non vorrei far confusione su alcune letture di reti neurali o tu ti riferisca ai particolari registri di alcune architetture di CPU. Onestamente il termine mi è noto ma non ricordo più a cosa si riferisce. Ma ancora una volta mi hai dato uno spunto di approfondimento e ti sono molto grato.
    Seguirò questi consigli.

    Grazie mille
  • Re: KR Puntatore a struttura anonima

    migliorabile ha scritto:


    Tensorflow e' un esempio, ma puoi guardarti tutte le librerie di ALGEBRA LINEARE
    Blas
    Lapack
    Eigen
    Armadillo
    ...
    Boost multidimensional array
    ...
    Grazie mille,
    sei stato preziosissimo.
Devi accedere o registrarti per scrivere nel forum
23 risposte