From 3b84b185d1286e1b954f5ad636b26188efa141e4 Mon Sep 17 00:00:00 2001 From: yum Date: Fri, 9 Feb 2024 17:21:46 -0800 Subject: Add dropdown for GPU compute type Should enable compatibility with older GPUs. --- GUI/GUI/GUI/Config.cpp | 3 +++ GUI/GUI/GUI/Config.h | 1 + GUI/GUI/GUI/Frame.cpp | 37 +++++++++++++++++++++++++++++++++++++ GUI/GUI/GUI/Frame.h | 1 + 4 files changed, 42 insertions(+) (limited to 'GUI') diff --git a/GUI/GUI/GUI/Config.cpp b/GUI/GUI/GUI/Config.cpp index 52f6f30..7cf3833 100644 --- a/GUI/GUI/GUI/Config.cpp +++ b/GUI/GUI/GUI/Config.cpp @@ -69,6 +69,7 @@ AppConfig::AppConfig(wxTextCtrl* out) model_translation("nllb-200-distilled-600M"), button("left joystick"), prio("normal"), + compute_type("float16"), enable_local_beep(true), enable_browser_src(false), @@ -117,6 +118,7 @@ bool AppConfig::Serialize(const std::filesystem::path& path) { cm.Set("model_translation", model_translation); cm.Set("button", button); cm.Set("prio", prio); + cm.Set("compute_type", compute_type); cm.Set("enable_local_beep", enable_local_beep); cm.Set("enable_browser_src", enable_browser_src); @@ -178,6 +180,7 @@ bool AppConfig::Deserialize(const std::filesystem::path& path) { cm.Get("model_translation", c.model_translation); cm.Get("button", c.button); cm.Get("prio", c.prio); + cm.Get("compute_type", c.compute_type); cm.Get("enable_local_beep", c.enable_local_beep); cm.Get("enable_browser_src", c.enable_browser_src); diff --git a/GUI/GUI/GUI/Config.h b/GUI/GUI/GUI/Config.h index 0d0da66..906982e 100644 --- a/GUI/GUI/GUI/Config.h +++ b/GUI/GUI/GUI/Config.h @@ -55,6 +55,7 @@ public: std::string model_translation; std::string button; std::string prio; + std::string compute_type; bool enable_local_beep; bool enable_browser_src; diff --git a/GUI/GUI/GUI/Frame.cpp b/GUI/GUI/GUI/Frame.cpp index 8e4eb6d..66c3d4e 100644 --- a/GUI/GUI/GUI/Frame.cpp +++ b/GUI/GUI/GUI/Frame.cpp @@ -59,6 +59,7 @@ namespace { ID_PY_APP_BYTES_PER_CHAR, ID_PY_APP_BUTTON, ID_PY_APP_PRIO, + ID_PY_APP_COMPUTE_TYPE, ID_PY_APP_MODEL_PANEL, ID_PY_APP_ENABLE_LOCAL_BEEP, ID_PY_APP_ENABLE_BROWSER_SRC, @@ -534,6 +535,19 @@ namespace { const size_t kNumPrios = sizeof(kPrio) / sizeof(kPrio[0]); constexpr int kPrioDefault = 0; + const wxString kComputeType[] = { + "int8", + "int8_float32", + "int8_float16", + "int8_bfloat16", + "int16", + "float16", + "bfloat16", + "float32", + }; + const size_t kNumComputeTypes = sizeof(kComputeType) / sizeof(kComputeType[0]); + constexpr int kComputeTypeDefault = 4; + const wxString kDecodeMethods[] = { "greedy", "beam", @@ -757,6 +771,14 @@ Frame::Frame() "The priority level at which the transcription process runs."); py_app_prio_ = py_app_prio; + auto* py_app_compute_type = new wxChoice(py_app_config_panel_pairs, + ID_PY_APP_COMPUTE_TYPE, wxDefaultPosition, + wxDefaultSize, kNumComputeTypes, kComputeType); + py_app_compute_type->SetToolTip( + "The compute type to use for GPU inference. Ignored " + "if CPU mode is enabled."); + py_app_compute_type_ = py_app_compute_type; + auto* py_app_rows = new wxTextCtrl(py_app_config_panel_pairs, ID_PY_APP_ROWS, std::to_string(app_c_->rows), wxDefaultPosition, wxDefaultSize, /*style=*/0); @@ -890,6 +912,11 @@ Frame::Frame() sizer->Add(py_app_prio, /*proportion=*/0, /*flags=*/wxEXPAND); + sizer->Add(new wxStaticText(py_app_config_panel_pairs, + wxID_ANY, /*label=*/"GPU compute type:")); + sizer->Add(py_app_compute_type, /*proportion=*/0, + /*flags=*/wxEXPAND); + sizer->Add(new wxStaticText(py_app_config_panel_pairs, wxID_ANY, /*label=*/"Desktop keybind:")); sizer->Add(py_app_keybind, /*proportion=*/0, @@ -1621,6 +1648,11 @@ void Frame::ApplyConfigToInputFields() kNumPrios, app_c_->prio, kPrioDefault); py_app_prio->SetSelection(prio_idx); + auto* py_app_compute_type = static_cast(FindWindowById(ID_PY_APP_COMPUTE_TYPE)); + int compute_type_idx = GetDropdownChoiceIndex(kComputeType, + kNumComputeTypes, app_c_->compute_type, kComputeTypeDefault); + py_app_compute_type->SetSelection(compute_type_idx); + auto* py_app_desktop_keybind = static_cast(FindWindowById(ID_PY_APP_KEYBIND)); py_app_desktop_keybind->Clear(); py_app_desktop_keybind->AppendText(app_c_->keybind); @@ -2407,6 +2439,10 @@ void Frame::OnAppStart(wxCommandEvent& event) { if (prio_idx == wxNOT_FOUND) { prio_idx = kPrioDefault; } + int compute_type_idx = py_app_compute_type_->GetSelection(); + if (compute_type_idx == wxNOT_FOUND) { + compute_type_idx = kComputeTypeDefault; + } const bool enable_local_beep = py_app_enable_local_beep_->GetValue(); const bool enable_browser_src = py_app_enable_browser_src_->GetValue(); @@ -2444,6 +2480,7 @@ void Frame::OnAppStart(wxCommandEvent& event) { app_c_->bytes_per_char = bytes_per_char; app_c_->button = kButton[button_idx].ToStdString(); app_c_->prio = kPrio[prio_idx].ToStdString(); + app_c_->compute_type = kComputeType[compute_type_idx].ToStdString(); app_c_->rows = rows; app_c_->cols = cols; app_c_->enable_local_beep = enable_local_beep; diff --git a/GUI/GUI/GUI/Frame.h b/GUI/GUI/GUI/Frame.h index ee91e98..f509dae 100644 --- a/GUI/GUI/GUI/Frame.h +++ b/GUI/GUI/GUI/Frame.h @@ -64,6 +64,7 @@ private: wxChoice* py_app_bytes_per_char_; wxChoice* py_app_button_; wxChoice* py_app_prio_; + wxChoice* py_app_compute_type_; wxChoice* unity_chars_per_sync_; wxChoice* unity_bytes_per_char_; -- cgit v1.2.3