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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
use numa_gpu::runtime::allocator;
use numa_gpu::runtime::numa::{NodeRatio, PageType};
use serde_derive::Serialize;
use structopt::clap::arg_enum;
arg_enum! {
#[derive(Copy, Clone, Debug, PartialEq, Serialize)]
pub enum ArgMemType {
System,
Numa,
NumaPinned,
DistributedNuma,
Pinned,
Unified,
}
}
arg_enum! {
#[derive(Copy, Clone, Debug, PartialEq, Serialize)]
pub enum ArgPageType {
Default,
Small,
TransparentHuge,
Huge2MB,
Huge16MB,
Huge1GB,
Huge16GB,
}
}
arg_enum! {
#[derive(Copy, Clone, Debug, PartialEq, Serialize)]
pub enum ArgExecutionMethod {
Cpu,
Gpu,
GpuStream,
Het,
GpuBuildHetProbe,
}
}
arg_enum! {
#[derive(Copy, Clone, Debug, PartialEq, Serialize)]
pub enum ArgSelectionVariant {
Branching,
Predication,
}
}
#[derive(Debug)]
pub struct ArgMemTypeHelper {
pub mem_type: ArgMemType,
pub node_ratios: Box<[NodeRatio]>,
pub page_type: ArgPageType,
}
impl From<ArgMemTypeHelper> for allocator::DerefMemType {
fn from(
ArgMemTypeHelper {
mem_type,
node_ratios,
page_type,
}: ArgMemTypeHelper,
) -> Self {
match mem_type {
ArgMemType::System => allocator::DerefMemType::SysMem,
ArgMemType::Numa => allocator::DerefMemType::NumaMem {
node: node_ratios[0].node,
page_type: page_type.into(),
},
ArgMemType::NumaPinned => allocator::DerefMemType::NumaPinnedMem {
node: node_ratios[0].node,
page_type: page_type.into(),
},
ArgMemType::DistributedNuma => allocator::DerefMemType::DistributedNumaMem {
nodes: node_ratios,
page_type: page_type.into(),
},
ArgMemType::Pinned => allocator::DerefMemType::CudaPinnedMem,
ArgMemType::Unified => allocator::DerefMemType::CudaUniMem,
}
}
}
impl From<ArgPageType> for PageType {
fn from(arg_page_type: ArgPageType) -> PageType {
match arg_page_type {
ArgPageType::Default => PageType::Default,
ArgPageType::Small => PageType::Small,
ArgPageType::TransparentHuge => PageType::TransparentHuge,
ArgPageType::Huge2MB => PageType::Huge2MB,
ArgPageType::Huge16MB => PageType::Huge16MB,
ArgPageType::Huge1GB => PageType::Huge1GB,
ArgPageType::Huge16GB => PageType::Huge16GB,
}
}
}