MCPcopy Create free account
hub / github.com/ComputationalRobotics/XM-code / DeviceDnTen

Class DeviceDnTen

XM/include/Utils/memory.h:282–502  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

280// dense vector wrapper on device
281template <typename T>
282class DeviceDnTen {
283public:
284 size_s gpu_id = 0;
285 size_s* dimensions = nullptr; // Array to store the size of each dimension
286 size_s num_dims = 0; // Number of dimensions
287 size_l total_size = 1;
288 T* vals = nullptr; // Pointer to the array of values
289 T* vals_host = nullptr;
290 cusparseDnVecDescr_t cusparse_descr = NULL;
291 cusparseDnMatDescr_t cusparse_descr_mat = NULL;
292 // bool* isdestroied = new bool(false);
293
294 DeviceDnTen(){}
295
296 DeviceDnTen(const size_s num_dims, const size_s* dimensions)
297 : num_dims(num_dims){
298 this->dimensions = (size_s*)malloc(sizeof(size_s) * num_dims);
299 std::memcpy(this->dimensions, dimensions, sizeof(size_s) * num_dims); // Copy dimensions
300
301 // Calculate total size
302 total_size = 1;
303 for (size_s i = 0; i < num_dims; ++i) {
304 total_size *= dimensions[i];
305 }
306
307 this->allocate();
308 }
309
310 DeviceDnTen(const size_s gpu_id, const size_s num_dims, const size_s* dimensions)
311 : gpu_id(gpu_id), num_dims(num_dims) {
312 this->dimensions = (size_s*)malloc(sizeof(size_s) * num_dims);
313 std::memcpy(this->dimensions, dimensions, sizeof(size_s) * num_dims); // Copy dimensions
314
315 // Calculate total size
316 total_size = 1;
317 for (size_s i = 0; i < num_dims; ++i) {
318 total_size *= dimensions[i];
319 }
320
321 this->allocate();
322 }
323
324 DeviceDnTen(std::initializer_list<size_s> dims) : num_dims(dims.size()) {
325 dimensions = new size_s[num_dims];
326 std::copy(dims.begin(), dims.end(), dimensions);
327
328 // Calculate total number of elements
329 total_size = 1;
330 for (size_s i = 0; i < num_dims; ++i) {
331 total_size *= dimensions[i];
332 }
333 this->allocate();
334 }
335
336 DeviceDnTen(const DeviceDnTen<T>& other)
337 : gpu_id(other.gpu_id), num_dims(other.num_dims), total_size(other.total_size) {
338
339 this->dimensions = (size_s*)malloc(sizeof(size_s) * num_dims);

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected