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.


Anmelden zum Antworten