array.h 790 Bytes
Newer Older
Nianchen Deng's avatar
sync    
Nianchen Deng committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "resource.h"
#include <vector>

namespace utils::cuda {
    template <typename T> class Array : public BufferResource {
    public:
        Array(size_t n) : CudaBuffer(n * sizeof(T)) {}
        Array(T *buffer, size_t n) : CudaBuffer(buffer, n * sizeof(T)) {}
        Array(const std::vector<T> &hostArray) : CudaBuffer(hostArray.size() * sizeof(T)) {
            cudaMemcpy(getBuffer(), hostArray.data(), size(), cudaMemcpyHostToDevice);
        }

        size_t n() const { return size() / sizeof(T); }

        operator T *() { return (T *)getBuffer(); }

        Array<T> subArray(size_t offset, size_t n = -1) {
            if (n == -1)
                n = this->n() - offset;
            return Array<T>((T *)*this + offset, n);
        }
    };
} // namespace utils::cuda