Functionnal.
TODO: Free cuda memory on destructor
TODO: Clean the code and comment