Schreib und Lesezugriff auf std::vector, z.B. &vec[0] erlaubt
-
Hallo,
in meinem Programm benutze ich durchgaengig std::vector, an manchen Stellen muss ich die Daten an OpenCL uebergeben, OpenCL braucht die Daten immer in Array Form, deshalb schreibe ich folgendes:
std::vector<unsigned int>vec; . . . cl::Buffer buffer = cl::Buffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, vec.size()*sizeof(cl_uint), &vec.front(),&err);Das klappt auch ganz gut. Jedoch wenn ich spaeter die Daten wieder abholen moechte und in den selben vector kopiere, ist dann erlaubt.
readback(buffer,vec.size()*sizeof(cl_uint), &vec[0]);Ich moechte die bearbeiteten Daten also im gleichen Vector speichern. Wenn ich jedoch die obere Zeile ausfuehre crasht das ganze Program. Mit einem Array klappt es.
-
Ja, das ist erlaubt. Crash muss an etwas anderem liegen. (Hast du den vector auf die richtige Größe resized?) Prinzipiell würde ich empfehlen btw:
std::size_t size = ???; std::vector<cl_uint> vec(size); // Warum nicht gleich den richtigen Typen? (cl_uint) readback(buffer, vec.size() * sizeof(vec[0]), &vec[0]);
-
Wartest du auch, bis das schreiben fertig ist?
Streich mal das CL_MEM_COPY_HOST_PTR raus, das hat bei mir schonmal Probleme gemacht.