Estoy experimentando con OpenCL para aumentar la velocidad de nuestro software. Trabajamos mucho con mapas y, para simplificar, representamos un mapa como std :: vector < std :: vector>. La API de OpenCL toma punteros de estilo c en bruto como argumentos, por ejemplo, int * en el caso anterior.std :: arrays vectoriales y c-style
Mis preguntas:
- ¿Existen garantías de ejecución en la que STL vector es, a nivel interno, consecutivas en la memoria?
- ¿Puedo lanzar con seguridad un std :: vector a int * y esperar que funcione?
- En el caso de un vector de vectores, ¿todavía puedo asumir que esto es cierto? Esperaría que el vector tuviera otros datos de estado, o problemas de alineación, o tal vez alguna otra cosa ...
- ¿Cuál es la mejor manera de abordar esto? ¿Escribir una estructura de datos 2d personalizada que contenga un búfer interno en memoria contigua y trabajar con eso? Tendría que copiar mucho/a vectores mucho ...
Gracias.
También le puede interesar esta pregunta: http://stackoverflow.com/questions/1339470/how-to-get-the-address-of-the-stdvector-buffer-start-most-elegantly –
Tenga en cuenta que '' vector es una excepción a la regla http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=98 –
Motti