| 280 | // dense vector wrapper on device |
| 281 | template <typename T> |
| 282 | class DeviceDnTen { |
| 283 | public: |
| 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); |
nothing calls this directly
no outgoing calls
no test coverage detected