-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathUtility.cuh
64 lines (56 loc) · 1.65 KB
/
Utility.cuh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#pragma once
#include <string>
#include <cstdint>
#include <iostream>
#include <iomanip>
#define int_32 std::int_fast32_t
using std::string;
using std::cout;
enum class UnitMeasure:size_t { B=1, KB=1024, MB=1048576, GB=1073741824, TB=1099511627776 };
class GpuConfig final {
//all mem size is in bytes by defaults
private:
//default members
string _name{""};
int_32 _id{-1};
int_32 _cuda_version{0};
size_t _total_memory{0};
size_t _shared_mem_per_block{0};
size_t _total_const_mem{0};
int_32 _registers_per_block{0};
int_32 _warp_size{0};
int_32 _max_threads_per_block{0};
int _max_threads_dim[3]{};
int _max_grid_size[3]{};
int_32 _multiprocessor_count{0};
private:
//singleton
GpuConfig();
//template<typename T,size_t sz>
void __copy(int (& from)[], int (&dest)[], size_t num_of_elemets) {
//simple copy
//no need for boundry check in this usecase
for (size_t i{ 0 }; i < num_of_elemets; ++i)
dest[i] = from[i];
}
float extract_size(size_t bytes, const UnitMeasure sz) noexcept;
public:
string Name() const;
int_32 Id() const;
int_32 CudaVersion() const;
size_t TotalDeviceMem() const;
size_t TotalConstMem() const;
size_t SharedBlockMem() const;
int_32 RegistersPerBlock() const;
int_32 WarpSize() const;
int_32 MaxThreadPerBlock() const;
const int* MaxThreadDim();
const int* MaxGridSize();
int_32 MultiprocessorCount() const;
void PrintInfo();
float GetApproxSize(size_t bytes,const UnitMeasure ms);
static GpuConfig& GetInstance();
GpuConfig(const GpuConfig&) = delete;
void operator=(const GpuConfig&) = delete;
~GpuConfig() = default;
};