[SYCL 2020] Use smart pointers instead of raw pointers

This commit is contained in:
Tom Deakin 2021-02-08 11:33:03 +00:00
parent 1517101ceb
commit 1db9a6b648
2 changed files with 17 additions and 20 deletions

View File

@ -51,24 +51,20 @@ SYCLStream<T>::SYCLStream(const int ARRAY_SIZE, const int device_index)
throw std::runtime_error("SYCL errors detected");
}
}});
// No longer need list of devices
devices.clear();
cached = true;
// Create buffers
d_a = new sycl::buffer<T>(array_size);
d_b = new sycl::buffer<T>(array_size);
d_c = new sycl::buffer<T>(array_size);
d_sum = new sycl::buffer<T>(1);
// Only in the constructor at runtime do we know the size, so need to use (smart) pointers
d_a = std::make_unique<sycl::buffer<T>>(array_size);
d_b = std::make_unique<sycl::buffer<T>>(array_size);
d_c = std::make_unique<sycl::buffer<T>>(array_size);
d_sum = std::make_unique<sycl::buffer<T>>(1);
}
template <class T>
SYCLStream<T>::~SYCLStream()
{
delete d_a;
delete d_b;
delete d_c;
delete d_sum;
delete queue;
devices.clear();
}
template <class T>
void SYCLStream<T>::copy()

View File

@ -8,6 +8,7 @@
#pragma once
#include <sstream>
#include <memory>
#include "Stream.h"
@ -23,16 +24,16 @@ class SYCLStream : public Stream<T>
int array_size;
// SYCL objects
sycl::queue *queue;
sycl::buffer<T> *d_a;
sycl::buffer<T> *d_b;
sycl::buffer<T> *d_c;
sycl::buffer<T> *d_sum;
std::unique_ptr<sycl::queue> queue;
std::unique_ptr<sycl::buffer<T>> d_a;
std::unique_ptr<sycl::buffer<T>> d_b;
std::unique_ptr<sycl::buffer<T>> d_c;
std::unique_ptr<sycl::buffer<T>> d_sum;
public:
SYCLStream(const int, const int);
~SYCLStream();
~SYCLStream() = default;
virtual void copy() override;
virtual void add() override;