gpu_is_available

This commit is contained in:
2025-12-13 11:07:31 +00:00
parent 10bd6db2b8
commit f90a641754
3 changed files with 17 additions and 8 deletions

View File

@@ -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;

View File

@@ -3,6 +3,8 @@
#include "record.hpp"
#include <vector>
bool gpu_is_available();
// Типы функций из GPU плагина
using gpu_is_available_fn = int (*)();

View File

@@ -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<double> 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]);