EDIT: Added debug output with memory cells, as suggested by PlasmaHH.
I don't understand the different behavior of cl :: vector <> in C ++ bindings for OpenCL. Consider the following code:
Top.hpp header:
class Top { public: void setBool(bool b); bool getBool(); private: bool status; };
Source Top.cpp :
#include "Top.hpp" void Top::setBool(bool b) { std::cout << (void*)this << " setBool("<< b<< ")\n"; status = b; } bool Top::getBool() { std::cout << (void*)this << " getBool() returns " << status << std::endl; return status; }
Use the above:
#define __NO_STD_VECTOR #include <iostream> #include "CL/cl.hpp" #include "Top.hpp" using namespace cl; using namespace std; cl::vector<Top> js; int main() { js.push_back(Top()); js[0].setBool(true); cout << js[0].getBool() << endl; for(cl::vector<Top>::iterator i = js.begin(); i != js.end(); ++i) { (*i).setBool(false); } cout << js[0].getBool() << endl; }
With __NO_STD_VECTOR redefinition of std :: vector. Output signal
0x6021c0 setBool(1) 0x6021c0 getBool() returns 1 0x7fffae671d60 setBool(0) 0x6021c0 getBool() returns 1
So the place returned by the iterator is definitely wrong.
Using the above with std::vector (and, of course, changing namespaces to std ), however, gives the expected result:
0x1be0010 setBool(1) 0x1be0010 getBool() returns 1 0x1be0010 setBool(0) 0x1be0010 getBool() returns 0
This iterator acts differently, but it should replace std :: vector to avoid compatibility issues. Did I miss something?
source share