|
| 1 | +#![windows_subsystem = "windows"] |
| 2 | + |
1 | 3 | use iced::widget::{button, column, container, progress_bar, row, scrollable, text, Space, tooltip}; |
2 | 4 | use iced::{color, Background, Border, Command, Element, Length, Theme, executor, Application, Settings}; |
3 | 5 | use gpubench_core::{get_available_benchmarks, run_benchmarks, ResultData}; |
@@ -115,7 +117,7 @@ pub fn main() -> iced::Result { |
115 | 117 | GPUBenchApp::run(Settings { |
116 | 118 | antialiasing: true, |
117 | 119 | window: iced::window::Settings { |
118 | | - size: iced::Size::new(1050.0, 850.0), |
| 120 | + size: iced::Size::new(980.0, 700.0), |
119 | 121 | ..Default::default() |
120 | 122 | }, |
121 | 123 | ..Settings::default() |
@@ -187,11 +189,16 @@ struct GPUBenchApp { |
187 | 189 |
|
188 | 190 | gpu_fp64: f32, |
189 | 191 | gpu_fp32: f32, |
190 | | - gpu_fp16: f32, |
191 | | - gpu_bf16: f32, |
192 | | - gpu_fp8: f32, |
193 | | - gpu_int8: f32, |
194 | | - gpu_int4: f32, |
| 192 | + gpu_fp16_vector: f32, |
| 193 | + gpu_fp16_matrix: f32, |
| 194 | + gpu_bf16_vector: f32, |
| 195 | + gpu_bf16_matrix: f32, |
| 196 | + gpu_fp8_vector: f32, |
| 197 | + gpu_fp8_matrix: f32, |
| 198 | + gpu_int8_vector: f32, |
| 199 | + gpu_int8_matrix: f32, |
| 200 | + gpu_int4_vector: f32, |
| 201 | + gpu_int4_matrix: f32, |
195 | 202 |
|
196 | 203 | gpu_rt_anyhit: f32, |
197 | 204 | gpu_rt_as_build: f32, |
@@ -269,11 +276,16 @@ impl Application for GPUBenchApp { |
269 | 276 | sys_mem_lat: 0.0, |
270 | 277 | gpu_fp64: 0.0, |
271 | 278 | gpu_fp32: 0.0, |
272 | | - gpu_fp16: 0.0, |
273 | | - gpu_bf16: 0.0, |
274 | | - gpu_fp8: 0.0, |
275 | | - gpu_int8: 0.0, |
276 | | - gpu_int4: 0.0, |
| 279 | + gpu_fp16_vector: 0.0, |
| 280 | + gpu_fp16_matrix: 0.0, |
| 281 | + gpu_bf16_vector: 0.0, |
| 282 | + gpu_bf16_matrix: 0.0, |
| 283 | + gpu_fp8_vector: 0.0, |
| 284 | + gpu_fp8_matrix: 0.0, |
| 285 | + gpu_int8_vector: 0.0, |
| 286 | + gpu_int8_matrix: 0.0, |
| 287 | + gpu_int4_vector: 0.0, |
| 288 | + gpu_int4_matrix: 0.0, |
277 | 289 | gpu_rt_anyhit: 0.0, |
278 | 290 | gpu_rt_as_build: 0.0, |
279 | 291 | gpu_rt_incoherent: 0.0, |
@@ -506,11 +518,16 @@ impl Application for GPUBenchApp { |
506 | 518 | "compute": { |
507 | 519 | "fp64_tflops": self.gpu_fp64, |
508 | 520 | "fp32_tflops": self.gpu_fp32, |
509 | | - "fp16_tflops": self.gpu_fp16, |
510 | | - "bf16_tflops": self.gpu_bf16, |
511 | | - "fp8_tflops": self.gpu_fp8, |
512 | | - "int8_tops": self.gpu_int8, |
513 | | - "int4_tops": self.gpu_int4, |
| 521 | + "fp16_vector_tflops": self.gpu_fp16_vector, |
| 522 | + "fp16_matrix_tflops": self.gpu_fp16_matrix, |
| 523 | + "bf16_vector_tflops": self.gpu_bf16_vector, |
| 524 | + "bf16_matrix_tflops": self.gpu_bf16_matrix, |
| 525 | + "fp8_vector_tflops": self.gpu_fp8_vector, |
| 526 | + "fp8_matrix_tflops": self.gpu_fp8_matrix, |
| 527 | + "int8_vector_tops": self.gpu_int8_vector, |
| 528 | + "int8_matrix_tops": self.gpu_int8_matrix, |
| 529 | + "int4_vector_tops": self.gpu_int4_vector, |
| 530 | + "int4_matrix_tops": self.gpu_int4_matrix, |
514 | 531 | }, |
515 | 532 | "memory": { |
516 | 533 | "bandwidth_gbps": self.gpu_bw, |
@@ -760,13 +777,18 @@ impl Application for GPUBenchApp { |
760 | 777 | ].spacing(12).into(); |
761 | 778 |
|
762 | 779 | let compute_content = column![ |
763 | | - metric_row("FP64", "FP64", self.gpu_fp64, "TFLOPS", "Measures double precision (64-bit) floating point operations per second. Crucial for scientific simulations and high-accuracy physics."), |
764 | | - metric_row("FP32", "FP32", self.gpu_fp32, "TFLOPS", "Measures single precision (32-bit) floating point operations per second. The standard metric for generic gaming and graphics compute workloads."), |
765 | | - metric_row("FP16", "FP16", self.gpu_fp16, "TFLOPS", "Measures half precision (16-bit) floating point operations per second. Used extensively in modern rendering, mobile ML, and HDR imaging."), |
766 | | - metric_row("BF16", "BF16", self.gpu_bf16, "TFLOPS", "Measures Brain Float 16 operations per second. Primarily utilized in AI training and deep learning models to retain dynamic range while saving bandwidth."), |
767 | | - metric_row("FP8", "FP8", self.gpu_fp8, "TFLOPS", "Measures quarter precision (8-bit) floating point operations. Used for highly optimized AI inference where memory bandwidth is the primary bottleneck."), |
768 | | - metric_row("INT8", "INT8", self.gpu_int8, "TOPS", "Measures 8-bit integer operations per second. Often used for quantized machine learning inference and specialized hardware-accelerated video processing."), |
769 | | - metric_row("INT4", "INT4", self.gpu_int4, "TOPS", "Measures 4-bit integer operations per second. An extreme quantization format used in ultra-efficient AI processing and specialized lookup tasks."), |
| 780 | + metric_row("FP64", "FP64 (Vector)", self.gpu_fp64, "TFLOPS", "Measures double precision (64-bit) floating point operations per second. Crucial for scientific simulations and high-accuracy physics."), |
| 781 | + metric_row("FP32", "FP32 (Vector)", self.gpu_fp32, "TFLOPS", "Measures single precision (32-bit) floating point operations per second. The standard metric for generic gaming and graphics compute workloads."), |
| 782 | + metric_row("FP16", "FP16 (Vector)", self.gpu_fp16_vector, "TFLOPS", "Measures vector half precision (16-bit) floating point operations per second. Used extensively in modern rendering, mobile ML, and HDR imaging."), |
| 783 | + metric_row("FP16", "FP16 (Matrix)", self.gpu_fp16_matrix, "TFLOPS", "Measures hardware-accelerated cooperative matrix half precision (16-bit) operations."), |
| 784 | + metric_row("BF16", "BF16 (Vector)", self.gpu_bf16_vector, "TFLOPS", "Measures vector Brain Float 16 operations per second. Primarily utilized in AI training and deep learning models to retain dynamic range while saving bandwidth."), |
| 785 | + metric_row("BF16", "BF16 (Matrix)", self.gpu_bf16_matrix, "TFLOPS", "Measures hardware-accelerated cooperative matrix Brain Float 16 operations."), |
| 786 | + metric_row("FP8", "FP8 (Vector)", self.gpu_fp8_vector, "TFLOPS", "Measures vector quarter precision (8-bit) floating point operations per second. Used for highly optimized AI inference where memory bandwidth is the primary bottleneck."), |
| 787 | + metric_row("FP8", "FP8 (Matrix)", self.gpu_fp8_matrix, "TFLOPS", "Measures hardware-accelerated cooperative matrix quarter precision (8-bit) operations."), |
| 788 | + metric_row("INT8", "INT8 (Vector)", self.gpu_int8_vector, "TOPS", "Measures vector 8-bit integer operations per second. Often used for quantized machine learning inference and specialized hardware-accelerated video processing."), |
| 789 | + metric_row("INT8", "INT8 (Matrix)", self.gpu_int8_matrix, "TOPS", "Measures hardware-accelerated cooperative matrix 8-bit integer operations."), |
| 790 | + metric_row("INT4", "INT4 (Vector)", self.gpu_int4_vector, "TOPS", "Measures vector 4-bit integer operations per second. An extreme quantization format used in ultra-efficient AI processing and specialized lookup tasks."), |
| 791 | + metric_row("INT4", "INT4 (Matrix)", self.gpu_int4_matrix, "TOPS", "Measures hardware-accelerated cooperative matrix 4-bit integer operations."), |
770 | 792 | ].spacing(12).into(); |
771 | 793 |
|
772 | 794 | let rt_content = column![ |
@@ -905,11 +927,26 @@ impl GPUBenchApp { |
905 | 927 | "Compute" => { |
906 | 928 | if res.subcategory == "FP64" { self.gpu_fp64 = self.gpu_fp64.max(value); } |
907 | 929 | if res.subcategory == "FP32" { self.gpu_fp32 = self.gpu_fp32.max(value); } |
908 | | - if res.subcategory == "FP16" { self.gpu_fp16 = self.gpu_fp16.max(value); } |
909 | | - if res.subcategory == "BF16" { self.gpu_bf16 = self.gpu_bf16.max(value); } |
910 | | - if res.subcategory == "FP8" { self.gpu_fp8 = self.gpu_fp8.max(value); } |
911 | | - if res.subcategory == "INT8" { self.gpu_int8 = self.gpu_int8.max(value); } |
912 | | - if res.subcategory == "INT4" { self.gpu_int4 = self.gpu_int4.max(value); } |
| 930 | + if res.subcategory == "FP16" { |
| 931 | + if res.configIndex == 0 { self.gpu_fp16_vector = self.gpu_fp16_vector.max(value); } |
| 932 | + else { self.gpu_fp16_matrix = self.gpu_fp16_matrix.max(value); } |
| 933 | + } |
| 934 | + if res.subcategory == "BF16" { |
| 935 | + if res.configIndex == 0 { self.gpu_bf16_vector = self.gpu_bf16_vector.max(value); } |
| 936 | + else { self.gpu_bf16_matrix = self.gpu_bf16_matrix.max(value); } |
| 937 | + } |
| 938 | + if res.subcategory == "FP8" { |
| 939 | + if res.configIndex == 0 { self.gpu_fp8_vector = self.gpu_fp8_vector.max(value); } |
| 940 | + else { self.gpu_fp8_matrix = self.gpu_fp8_matrix.max(value); } |
| 941 | + } |
| 942 | + if res.subcategory == "INT8" { |
| 943 | + if res.configIndex == 0 { self.gpu_int8_vector = self.gpu_int8_vector.max(value); } |
| 944 | + else { self.gpu_int8_matrix = self.gpu_int8_matrix.max(value); } |
| 945 | + } |
| 946 | + if res.subcategory == "INT4" { |
| 947 | + if res.configIndex == 0 { self.gpu_int4_vector = self.gpu_int4_vector.max(value); } |
| 948 | + else { self.gpu_int4_matrix = self.gpu_int4_matrix.max(value); } |
| 949 | + } |
913 | 950 | } |
914 | 951 | "Ray Tracing" => { |
915 | 952 | if res.subcategory == "Alpha-Tested Geometry" { self.gpu_rt_anyhit = self.gpu_rt_anyhit.max(value); } |
|
0 commit comments