2121
2222#include < assert.h> // for assert
2323#include < memory> // for shared_ptr, unique_ptr
24+ #include < memory_resource> // for std::pmr
2425#include < stddef.h> // for size_t
2526#include < stdint.h> // for int32_t
2627#include < string> // for string
@@ -166,14 +167,24 @@ class CG {
166167 std::vector<detail::AccessorImplPtr> AccStorage,
167168 std::vector<std::shared_ptr<const void >> SharedPtrStorage,
168169 std::vector<AccessorImplHost *> Requirements,
169- std::vector<detail::EventImplPtr> Events)
170+ std::pmr:: vector<detail::EventImplPtr> Events)
170171 : MArgsStorage(std::move(ArgsStorage)),
171172 MAccStorage (std::move(AccStorage)),
172173 MSharedPtrStorage(std::move(SharedPtrStorage)),
173174 MRequirements(std::move(Requirements)), MEvents(std::move(Events)) {}
174- StorageInitHelper (StorageInitHelper &&) = default;
175- StorageInitHelper (const StorageInitHelper &) = default;
176- // The following storages are needed to ensure that arguments won't die
175+ StorageInitHelper (StorageInitHelper &&SIH)
176+ : MArgsStorage(std::move(SIH.MArgsStorage)),
177+ MAccStorage(std::move(SIH.MAccStorage)),
178+ MSharedPtrStorage(std::move(SIH.MSharedPtrStorage)),
179+ MRequirements(std::move(SIH.MRequirements)),
180+ MEvents(SIH.MEvents.begin(), SIH.MEvents.end()) {}
181+ StorageInitHelper (const StorageInitHelper &SIH)
182+ : MArgsStorage(SIH.MArgsStorage),
183+ MAccStorage(SIH.MAccStorage),
184+ MSharedPtrStorage(SIH.MSharedPtrStorage),
185+ MRequirements(SIH.MRequirements),
186+ MEvents(SIH.MEvents.begin(), SIH.MEvents.end()) {}
187+ // The following storages are needed to ensure that arguments won't die
177188 // while we are using them.
178189 // / Storage for standard layout arguments.
179190 std::vector<std::vector<char >> MArgsStorage;
@@ -185,8 +196,13 @@ class CG {
185196 // / List of requirements that specify which memory is needed for the command
186197 // / group to be executed.
187198 std::vector<AccessorImplHost *> MRequirements;
199+
200+ std::array<std::byte, 4 * 1024 > MEventsBuf;
201+ std::pmr::monotonic_buffer_resource MEventsBufRes{
202+ MEventsBuf.data (), MEventsBuf.size ()};
203+
188204 // / List of events that order the execution of this CG
189- std::vector<detail::EventImplPtr> MEvents;
205+ std::pmr:: vector<detail::EventImplPtr> MEvents{&MEventsBufRes} ;
190206 };
191207
192208 CG (CGType Type, StorageInitHelper D, detail::code_location loc = {},
@@ -222,7 +238,7 @@ class CG {
222238 std::vector<AccessorImplHost *> &getRequirements () {
223239 return MData.MRequirements ;
224240 }
225- std::vector<detail::EventImplPtr> &getEvents () { return MData.MEvents ; }
241+ std::pmr:: vector<detail::EventImplPtr> &getEvents () { return MData.MEvents ; }
226242
227243 virtual std::vector<std::shared_ptr<const void >>
228244 getAuxiliaryResources () const {
0 commit comments