Sto sperimentando con OpenCL per aumentare la velocità del nostro software. Lavoriamo molto con le mappe e, per semplificare, rappresentiamo una mappa come std :: vector < std :: vector>. L'API OpenCL utilizza come argomento argomenti puntatori c-style grezzi, ad esempio int * nel caso precedente.std :: vettori stile c e stile
Le mie domande:
- ci sono garanzie di attuazione nel STL che vettore è, internamente, consecutiva in memoria?
- Posso trasmettere in modo sicuro uno std :: vector a int * e mi aspetto che funzioni?
- Nel caso di un vettore di vettori, posso ancora supporre che ciò sia vero? Mi aspetto che il vettore possa contenere altri dati di stato, o problemi di allineamento, o forse qualcos'altro ...
- Qual è il modo migliore per avvicinarsi a questo? Scrivi una struttura dati 2D personalizzata che contenga un buffer interno contiguo e che lavori con quello? Dovrei copiare molto da/per i vettori ...
Grazie.
Questa domanda potrebbe anche interessare: http://stackoverflow.com/questions/1339470/how-to-get-the-address-of-the-stdvector-buffer-start-most-elegantly –
Nota che 'vector' è un'eccezione alla regola http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=98 –
Motti