gpu_is_available
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
#include "record.hpp"
|
||||
#include <vector>
|
||||
|
||||
bool gpu_is_available();
|
||||
|
||||
// Типы функций из GPU плагина
|
||||
using gpu_is_available_fn = int (*)();
|
||||
|
||||
|
||||
13
src/main.cpp
13
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<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]);
|
||||
|
||||
Reference in New Issue
Block a user