From f90a6417548de89c43eccdfe613be68f0a8defec Mon Sep 17 00:00:00 2001 From: Arity-T Date: Sat, 13 Dec 2025 11:07:31 +0000 Subject: [PATCH] gpu_is_available --- src/gpu_loader.cpp | 10 ++++++++++ src/gpu_loader.hpp | 2 ++ src/main.cpp | 13 +++++-------- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/gpu_loader.cpp b/src/gpu_loader.cpp index cf16099..e19e575 100644 --- a/src/gpu_loader.cpp +++ b/src/gpu_loader.cpp @@ -19,6 +19,16 @@ gpu_is_available_fn load_gpu_is_available() { return fn; } +bool gpu_is_available() { + auto gpu_is_available_fn = load_gpu_is_available(); + + if (gpu_is_available_fn && gpu_is_available_fn()) { + return true; + } + + return false; +} + gpu_aggregate_days_fn load_gpu_aggregate_days() { void* h = get_gpu_lib_handle(); if (!h) return nullptr; diff --git a/src/gpu_loader.hpp b/src/gpu_loader.hpp index 3fdd174..fffd33f 100644 --- a/src/gpu_loader.hpp +++ b/src/gpu_loader.hpp @@ -3,6 +3,8 @@ #include "record.hpp" #include +bool gpu_is_available(); + // Типы функций из GPU плагина using gpu_is_available_fn = int (*)(); diff --git a/src/main.cpp b/src/main.cpp index 681f839..929d406 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -66,13 +66,10 @@ int main(int argc, char** argv) { } omp_set_num_threads(num_cpu_threads + 1); // +1 для GPU потока если есть - // ====== ЗАГРУЗКА GPU ФУНКЦИЙ ====== - auto gpu_is_available = load_gpu_is_available(); - auto gpu_aggregate = load_gpu_aggregate_days(); + // Проверка доступности GPU + bool have_gpu = gpu_is_available(); - bool have_gpu = false; - if (gpu_is_available && gpu_is_available()) { - have_gpu = true; + if (have_gpu) { std::cout << "Rank " << rank << ": GPU available + " << num_cpu_threads << " CPU threads" << std::endl; } else { std::cout << "Rank " << rank << ": " << num_cpu_threads << " CPU threads only" << std::endl; @@ -151,7 +148,7 @@ int main(int argc, char** argv) { // Время работы: [0] = GPU (если есть), [1..n] = CPU потоки std::vector worker_times(num_cpu_threads + 1, 0.0); - if (have_gpu && gpu_aggregate) { + if (have_gpu) { // GPU узел: делим на (1 + num_cpu_threads) частей int n_workers = 1 + num_cpu_threads; auto parts = split_records(local_records, n_workers); @@ -166,7 +163,7 @@ int main(int argc, char** argv) { double t0 = omp_get_wtime(); if (tid == 0) { // GPU поток - success[0] = aggregate_days_gpu(parts[0], results[0], gpu_aggregate); + success[0] = aggregate_days_gpu_simple(parts[0], results[0]); } else { // CPU потоки results[tid] = aggregate_days(parts[tid]);