Skip to content

Commit f2a4243

Browse files
authored
feat(gpu): add GPU component methodology and endpoints (#440)
1 parent 3816dd1 commit f2a4243

File tree

23 files changed

+1312
-7
lines changed

23 files changed

+1312
-7
lines changed

Makefile

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,10 @@ test-compat-max:
5858
$(call compat-check,${MAXIMUM_PY_VERSION})
5959

6060
run:
61-
poetry run uvicorn boaviztapi.main:app
61+
poetry run uvicorn boaviztapi.main:app --port 5000
62+
63+
run-py:
64+
python boaviztapi/main.py
6265

6366
$(SEMVERS):
6467
poetry version $@

README.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,11 @@ $ make lint
8181
The development server uses [uvicorn](https://www.uvicorn.org/) and [FastAPI](https://fastapi.tiangolo.com/). You can launch the development server with the `uvicorn` CLI.
8282

8383
```bash
84-
$ poetry shell
85-
$ uvicorn boaviztapi.main:app --host=localhost --port 5000
84+
# Using uvicorn
85+
$ make run
86+
87+
# Using Python directly (adds watcher)
88+
$ make run-py
8689
```
8790

8891
You can run the tests with `pytest` via `make test`.
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
id,weight,heatsink_weight,pwb_surface,pwb_weight,casing_weight,gpu_surface,vram,vram_dies,vram_surface,transport_boat,transport_truck,transport_plane,USAGE.time_workload,USAGE.use_time_ratio,USAGE.hours_life_time
2+
DEFAULT,1.69,0.90,296,,0.79,814,80,6,,19000,1000,0,50;0;100,1,26280

boaviztapi/data/config.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
default_location: "EEE"
22
default_usage: "DEFAULT"
33
default_cpu: "DEFAULT"
4+
default_gpu: "DEFAULT"
45
default_ram: "DEFAULT"
56
default_ssd: "DEFAULT"
67
default_hdd: "DEFAULT"
@@ -30,6 +31,7 @@ default_vr_headset: "vr-headset-lcd"
3031
default_vr_controller: "vr-controller-default"
3132

3233
default_criteria: ["gwp", "adp", "pe"]
34+
default_gpu_criteria: ["gwp", "adpe", "wu"]
3335

3436
default_duration:
3537

boaviztapi/data/factors.yml

Lines changed: 263 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,269 @@
4343
}
4444
}
4545

46+
"gpu": {
47+
"casing": {
48+
"manufacture": {
49+
"adpe": { "impact": 4.0835E-04 },
50+
"adpf": { "impact": 2.4302E+02 },
51+
"ap": { "impact": 5.9556E-02 },
52+
"ctue": { "impact": 4.0931E+02 },
53+
"ctuh-c": { "impact": 3.4710E-08 },
54+
"ctuh-nc": { "impact": 3.2227E-06 },
55+
"efp": { "impact": 3.8980E-05 },
56+
"efm": { "impact": 6.6206E-03 },
57+
"ept": { "impact": 7.2398E-02 },
58+
"gwp": { "impact": 8.2542E+00 },
59+
"gwpb": { "impact": 3.0687E-02 },
60+
"gwpf": { "impact": 8.2234E+00 },
61+
"gwplu": { "impact": 1.7287E-04 },
62+
"ir": { "impact": 4.7803E+00 },
63+
"lu": { "impact": 5.0717E-01 },
64+
"odp": { "impact": 1.2614E-06 },
65+
"pm": { "impact": 3.7395E-07 },
66+
"pocp": { "impact": 2.5103E-02 },
67+
"wu": { "impact": 3.8931E+00 },
68+
"mips": { "impact": 0.0000E+00 },
69+
"weee": { "impact": 0.0000E+00 },
70+
"tpe": { "impact": 2.4588E+02 }
71+
}
72+
},
73+
"heatsink": {
74+
"manufacture": {
75+
"adpe": { "impact": 1.8669E-03 },
76+
"adpf": { "impact": 8.5042E+01 },
77+
"ap": { "impact": 2.1808E-01 },
78+
"ctue": { "impact": 4.2042E+02 },
79+
"ctuh-c": { "impact": 2.1486E-05 },
80+
"ctuh-nc": { "impact": 2.7788E-06 },
81+
"efp": { "impact": 1.4972E-03 },
82+
"efm": { "impact": 5.2195E-03 },
83+
"ept": { "impact": 6.0388E-02 },
84+
"gwp": { "impact": 5.7412E+00 },
85+
"gwpb": { "impact": 3.2087E-01 },
86+
"gwpf": { "impact": 5.4203E+00 },
87+
"gwplu": { "impact": 1.4994E-06 },
88+
"ir": { "impact": 3.2488E+02 },
89+
"lu": { "impact": 3.5379E+00 },
90+
"odp": { "impact": 1.1454E-06 },
91+
"pm": { "impact": 1.3574E-06 },
92+
"pocp": { "impact": 2.9852E-02 },
93+
"wu": { "impact": 1.0459E+01 },
94+
"mips": { "impact": 0.0000E+00 },
95+
"weee": { "impact": 0.0000E+00 },
96+
"tpe": { "impact": 9.2287E+01 }
97+
}
98+
},
99+
"pwb": {
100+
"manufacture": {
101+
"adpe": { "impact": 1.2707E-05 },
102+
"adpf": { "impact": 5.1018E-01 },
103+
"ap": { "impact": 3.1602E-04 },
104+
"ctue": { "impact": 5.2409E-01 },
105+
"ctuh-c": { "impact": 4.2162E-09 },
106+
"ctuh-nc": { "impact": 1.6921E-09 },
107+
"efp": { "impact": 1.2064E-07 },
108+
"efm": { "impact": 2.4518E-05 },
109+
"ept": { "impact": 2.6371E-04 },
110+
"gwp": { "impact": 3.2549E-02 },
111+
"gwpb": { "impact": 4.9127E-05 },
112+
"gwpf": { "impact": 3.2500E-02 },
113+
"gwplu": { "impact": 1.5598E-10 },
114+
"ir": { "impact": 9.6928E-02 },
115+
"lu": { "impact": 1.3933E-04 },
116+
"odp": { "impact": 4.7982E-09 },
117+
"pm": { "impact": 1.7016E-09 },
118+
"pocp": { "impact": 9.7086E-05 },
119+
"wu": { "impact": 1.6173E-02 },
120+
"mips": { "impact": 0.0000E+00 },
121+
"weee": { "impact": 0.0000E+00 },
122+
"tpe": { "impact": 8.2969E-01 }
123+
}
124+
},
125+
"gpu": {
126+
"manufacture": {
127+
"adpe": { "impact": 1.5550E-08 },
128+
"adpf": { "impact": 5.5650E-01 },
129+
"ap": { "impact": 2.3502E-04 },
130+
"ctue": { "impact": 5.4374E-01 },
131+
"ctuh-c": { "impact": 9.7228E-12 },
132+
"ctuh-nc": { "impact": 2.3236E-10 },
133+
"efp": { "impact": 1.3270E-07 },
134+
"efm": { "impact": 2.8262E-05 },
135+
"ept": { "impact": 2.9444E-04 },
136+
"gwp": { "impact": 4.2592E-02 },
137+
"gwpb": { "impact": 2.5256E-05 },
138+
"gwpf": { "impact": 4.2567E-02 },
139+
"gwplu": { "impact": 0.0000E+00 },
140+
"ir": { "impact": 4.5966E-04 },
141+
"lu": { "impact": 1.6959E-04 },
142+
"odp": { "impact": 1.8596E-08 },
143+
"pm": { "impact": 1.2976E-09 },
144+
"pocp": { "impact": 9.2466E-05 },
145+
"wu": { "impact": 1.4831E-02 },
146+
"mips": { "impact": 0.0000E+00 },
147+
"weee": { "impact": 0.0000E+00 },
148+
"tpe": { "impact": 5.6728E-01 }
149+
}
150+
},
151+
"vram": {
152+
"manufacture": {
153+
"adpe": { "impact": 5.0731E-09 },
154+
"adpf": { "impact": 2.4002E+00 },
155+
"ap": { "impact": 1.0127E-03 },
156+
"ctue": { "impact": 2.3457E+00 },
157+
"ctuh-c": { "impact": 1.7217E-11 },
158+
"ctuh-nc": { "impact": 9.9497E-10 },
159+
"efp": { "impact": 5.7173E-07 },
160+
"efm": { "impact": 1.2191E-04 },
161+
"ept": { "impact": 1.2701E-03 },
162+
"gwp": { "impact": 1.8379E-01 },
163+
"gwpb": { "impact": 1.1309E-04 },
164+
"gwpf": { "impact": 1.8368E-01 },
165+
"gwplu": { "impact": 0.0000E+00 },
166+
"ir": { "impact": 1.5389E-03 },
167+
"lu": { "impact": 7.3082E-04 },
168+
"odp": { "impact": 8.0088E-08 },
169+
"pm": { "impact": 5.5899E-09 },
170+
"pocp": { "impact": 3.9868E-04 },
171+
"wu": { "impact": 7.0829E-02 },
172+
"mips": { "impact": 0.0000E+00 },
173+
"weee": { "impact": 0.0000E+00 },
174+
"tpe": { "impact": 2.4520E+00 }
175+
}
176+
},
177+
"upstream_transport": {
178+
"manufacture": {
179+
"adpe": { "impact": 1.0196E-08 },
180+
"adpf": { "impact": 3.6131E+00 },
181+
"ap": { "impact": 1.7311E-03 },
182+
"ctue": { "impact": 1.7464E-01 },
183+
"ctuh-c": { "impact": 4.6309E-12 },
184+
"ctuh-nc": { "impact": 5.7340E-10 },
185+
"efp": { "impact": 9.7150E-08 },
186+
"efm": { "impact": 8.1629E-04 },
187+
"ept": { "impact": 8.9568E-03 },
188+
"gwp": { "impact": 2.5955E-01 },
189+
"gwpb": { "impact": 0.0000E+00 },
190+
"gwpf": { "impact": 2.5955E-01 },
191+
"gwplu": { "impact": 0.0000E+00 },
192+
"ir": { "impact": 6.3083E-04 },
193+
"lu": { "impact": 0.0000E+00 },
194+
"odp": { "impact": 3.9702E-10 },
195+
"pm": { "impact": 1.4950E-08 },
196+
"pocp": { "impact": 2.2701E-03 },
197+
"wu": { "impact": 9.8353E-04 },
198+
"mips": { "impact": 0.0000E+00 },
199+
"weee": { "impact": 0.0000E+00 },
200+
"tpe": { "impact": 3.6190E+00 }
201+
}
202+
},
203+
"transport_truck": {
204+
"distribution": {
205+
"adpe": { "impact": 1.9800E-12 },
206+
"adpf": { "impact": 7.0300E-04 },
207+
"ap": { "impact": 3.1900E-07 },
208+
"ctue": { "impact": 3.3900E-05 },
209+
"ctuh-c": { "impact": 8.8500E-16 },
210+
"ctuh-nc": { "impact": 9.5800E-14 },
211+
"efp": { "impact": 1.8900E-11 },
212+
"efm": { "impact": 1.5000E-07 },
213+
"ept": { "impact": 1.6400E-06 },
214+
"gwp": { "impact": 5.0400E-05 },
215+
"gwpb": { "impact": 0.0000E+00 },
216+
"gwpf": { "impact": 5.0400E-05 },
217+
"gwplu": { "impact": 0.0000E+00 },
218+
"ir": { "impact": 1.2300E-07 },
219+
"lu": { "impact": 0.0000E+00 },
220+
"odp": { "impact": 7.7200E-14 },
221+
"pm": { "impact": 2.5900E-12 },
222+
"pocp": { "impact": 4.1400E-07 },
223+
"wu": { "impact": 1.9100E-07 },
224+
"mips": { "impact": 2.2700E-05 },
225+
"weee": { "impact": 0.0000E+00 },
226+
"tpe": { "impact": 7.0400E-04 }
227+
}
228+
},
229+
"transport_boat": {
230+
"distribution": {
231+
"adpe": { "impact": 4.6200E-13 },
232+
"adpf": { "impact": 1.6300E-04 },
233+
"ap": { "impact": 5.3400E-07 },
234+
"ctue": { "impact": 7.9200E-06 },
235+
"ctuh-c": { "impact": 1.8900E-16 },
236+
"ctuh-nc": { "impact": 4.2800E-14 },
237+
"efp": { "impact": 4.4600E-12 },
238+
"efm": { "impact": 1.2200E-07 },
239+
"ept": { "impact": 1.3400E-06 },
240+
"gwp": { "impact": 1.3300E-05 },
241+
"gwpb": { "impact": 0.0000E+00 },
242+
"gwpf": { "impact": 1.3300E-05 },
243+
"gwplu": { "impact": 0.0000E+00 },
244+
"ir": { "impact": 2.6300E-08 },
245+
"lu": { "impact": 0.0000E+00 },
246+
"odp": { "impact": 1.6500E-14 },
247+
"pm": { "impact": 2.7600E-12 },
248+
"pocp": { "impact": 3.4500E-07 },
249+
"wu": { "impact": 4.2000E-08 },
250+
"mips": { "impact": 5.2500E-06 },
251+
"weee": { "impact": 0.0000E+00 },
252+
"tpe": { "impact": 1.6400E-04 }
253+
}
254+
},
255+
"transport_plane": {
256+
"distribution": {
257+
"adpe": { "impact": 8.3100E-11 },
258+
"adpf": { "impact": 2.9500E-02 },
259+
"ap": { "impact": 8.7700E-06 },
260+
"ctue": { "impact": 1.3700E-03 },
261+
"ctuh-c": { "impact": 3.1900E-14 },
262+
"ctuh-nc": { "impact": 1.6700E-12 },
263+
"efp": { "impact": 7.4400E-10 },
264+
"efm": { "impact": 3.9500E-06 },
265+
"ept": { "impact": 4.3200E-05 },
266+
"gwp": { "impact": 2.1100E-03 },
267+
"gwpb": { "impact": 0.0000E+00 },
268+
"gwpf": { "impact": 2.1100E-03 },
269+
"gwplu": { "impact": 0.0000E+00 },
270+
"ir": { "impact": 3.8900E-06 },
271+
"lu": { "impact": 0.0000E+00 },
272+
"odp": { "impact": 2.4400E-12 },
273+
"pm": { "impact": 5.4400E-11 },
274+
"pocp": { "impact": 1.0600E-05 },
275+
"wu": { "impact": 8.3800E-06 },
276+
"mips": { "impact": 9.3700E-04 },
277+
"weee": { "impact": 0.0000E+00 },
278+
"tpe": { "impact": 2.9500E-02 }
279+
}
280+
},
281+
"end_of_life": {
282+
"eol": {
283+
"adpe": { "impact": 3.7140E-06 },
284+
"adpf": { "impact": 1.9490E+01 },
285+
"ap": { "impact": 3.1717E-02 },
286+
"ctue": { "impact": 7.6213E+02 },
287+
"ctuh-c": { "impact": 5.8946E-09 },
288+
"ctuh-nc": { "impact": 2.3264E-07 },
289+
"efp": { "impact": 3.1149E-05 },
290+
"efm": { "impact": 2.1114E-02 },
291+
"ept": { "impact": 1.4723E-02 },
292+
"gwp": { "impact": 1.5062E+00 },
293+
"gwpb": { "impact": 9.0608E-02 },
294+
"gwpf": { "impact": 1.4156E+00 },
295+
"gwplu": { "impact": 0.0000E+00 },
296+
"ir": { "impact": 1.2277E-01 },
297+
"lu": { "impact": 6.7429E+00 },
298+
"odp": { "impact": 1.3898E-07 },
299+
"pm": { "impact": 9.6261E-08 },
300+
"pocp": { "impact": 5.3725E-03 },
301+
"wu": { "impact": 7.3015E+02 },
302+
"mips": { "impact": 0.0000E+00 },
303+
"weee": { "impact": 1.0000E+00 },
304+
"tpe": { "impact": 2.2348E+01 }
305+
}
306+
}
307+
}
308+
46309
"hdd": {
47310
"gwp": {
48311
"impact": 31.11
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from .component_dto import ComponentDTO
22
from .cpu import CPU
3+
from .gpu import GPU
34
from .disk import Disk
45
from .other import Case, Motherboard, PowerSupply
56
from .ram import RAM

boaviztapi/dto/component/gpu.py

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
from typing import Optional
2+
3+
from boaviztapi import config
4+
from boaviztapi.dto.component import ComponentDTO
5+
from boaviztapi.dto.usage.usage import mapper_usage, Usage
6+
from boaviztapi.model.component import ComponentGPU
7+
from boaviztapi.service.archetype import get_component_archetype
8+
9+
10+
class GPU(ComponentDTO):
11+
weight: Optional[float] = None
12+
heatsink_weight: Optional[float] = None
13+
pwb_surface: Optional[float] = None
14+
pwb_weight: Optional[float] = None
15+
casing_weight: Optional[float] = None
16+
gpu_surface: Optional[float] = None
17+
vram: Optional[int] = None
18+
vram_dies: Optional[int] = None
19+
vram_surface: Optional[float] = None
20+
transport_boat: Optional[float] = None
21+
transport_truck: Optional[float] = None
22+
transport_plane: Optional[float] = None
23+
24+
25+
def mapper_gpu(
26+
gpu_dto: GPU, archetype=get_component_archetype(config["default_gpu"], "gpu")
27+
) -> ComponentGPU:
28+
gpu_component = ComponentGPU(archetype=archetype)
29+
30+
gpu_component.usage = mapper_usage(
31+
gpu_dto.usage or Usage(), archetype=archetype.get("USAGE")
32+
)
33+
34+
if gpu_dto.units is not None:
35+
gpu_component.units.set_input(gpu_dto.units)
36+
37+
if gpu_dto.weight is not None:
38+
gpu_component.weight.set_input(gpu_dto.weight)
39+
40+
if gpu_dto.heatsink_weight is not None:
41+
gpu_component.heatsink_weight.set_input(gpu_dto.heatsink_weight)
42+
43+
if gpu_dto.pwb_surface is not None:
44+
gpu_component.pwb_surface.set_input(gpu_dto.pwb_surface)
45+
46+
if gpu_dto.pwb_weight is not None:
47+
gpu_component.pwb_weight.set_input(gpu_dto.pwb_weight)
48+
49+
if gpu_dto.casing_weight is not None:
50+
gpu_component.casing_weight.set_input(gpu_dto.casing_weight)
51+
52+
if gpu_dto.gpu_surface is not None:
53+
gpu_component.gpu_surface.set_input(gpu_dto.gpu_surface)
54+
55+
if gpu_dto.vram is not None:
56+
gpu_component.vram.set_input(gpu_dto.vram)
57+
58+
if gpu_dto.vram_dies is not None:
59+
gpu_component.vram_dies.set_input(gpu_dto.vram_dies)
60+
61+
if gpu_dto.vram_surface is not None:
62+
gpu_component.vram_surface.set_input(gpu_dto.vram_surface)
63+
64+
if gpu_dto.transport_boat is not None:
65+
gpu_component.transport_boat.set_input(gpu_dto.transport_boat)
66+
67+
if gpu_dto.transport_truck is not None:
68+
gpu_component.transport_truck.set_input(gpu_dto.transport_truck)
69+
70+
if gpu_dto.transport_plane is not None:
71+
gpu_component.transport_plane.set_input(gpu_dto.transport_plane)
72+
73+
return gpu_component

0 commit comments

Comments
 (0)