На GPU вычисления
This commit is contained in:
45
src/main.cpp
45
src/main.cpp
@@ -34,6 +34,18 @@ int main(int argc, char** argv) {
|
||||
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
|
||||
MPI_Comm_size(MPI_COMM_WORLD, &size);
|
||||
|
||||
// ====== ЗАГРУЗКА GPU ФУНКЦИЙ ======
|
||||
auto gpu_is_available = load_gpu_is_available();
|
||||
auto gpu_aggregate = load_gpu_aggregate_days();
|
||||
|
||||
bool have_gpu = false;
|
||||
if (gpu_is_available && gpu_is_available()) {
|
||||
have_gpu = true;
|
||||
std::cout << "Rank " << rank << ": GPU available" << std::endl;
|
||||
} else {
|
||||
std::cout << "Rank " << rank << ": GPU not available, using CPU" << std::endl;
|
||||
}
|
||||
|
||||
std::vector<Record> local_records;
|
||||
|
||||
if (rank == 0) {
|
||||
@@ -75,10 +87,26 @@ int main(int argc, char** argv) {
|
||||
std::cout << "Rank " << rank << " received "
|
||||
<< local_records.size() << " records" << std::endl;
|
||||
|
||||
// ====== АГРЕГАЦИЯ НА КАЖДОМ УЗЛЕ ======
|
||||
auto local_stats = aggregate_days(local_records);
|
||||
std::cout << "Rank " << rank << " aggregated "
|
||||
<< local_stats.size() << " days" << std::endl;
|
||||
// ====== АГРЕГАЦИЯ НА КАЖДОМ УЗЛЕ (GPU или CPU) ======
|
||||
std::vector<DayStats> local_stats;
|
||||
|
||||
if (have_gpu && gpu_aggregate) {
|
||||
bool gpu_success = aggregate_days_gpu(local_records, local_stats, gpu_aggregate);
|
||||
if (gpu_success) {
|
||||
std::cout << "Rank " << rank << " aggregated "
|
||||
<< local_stats.size() << " days (GPU)" << std::endl;
|
||||
} else {
|
||||
// Fallback на CPU при ошибке GPU
|
||||
std::cout << "Rank " << rank << ": GPU aggregation failed, falling back to CPU" << std::endl;
|
||||
local_stats = aggregate_days(local_records);
|
||||
std::cout << "Rank " << rank << " aggregated "
|
||||
<< local_stats.size() << " days (CPU)" << std::endl;
|
||||
}
|
||||
} else {
|
||||
local_stats = aggregate_days(local_records);
|
||||
std::cout << "Rank " << rank << " aggregated "
|
||||
<< local_stats.size() << " days (CPU)" << std::endl;
|
||||
}
|
||||
|
||||
// ====== СБОР АГРЕГИРОВАННЫХ ДАННЫХ НА RANK 0 ======
|
||||
std::vector<DayStats> all_stats;
|
||||
@@ -134,15 +162,6 @@ int main(int argc, char** argv) {
|
||||
}
|
||||
}
|
||||
|
||||
// Проверка GPU (оставляем как есть)
|
||||
auto gpu_is_available = load_gpu_is_available();
|
||||
int have_gpu = 0;
|
||||
if (gpu_is_available) {
|
||||
std::cout << "Rank " << rank << " dll loaded" << std::endl;
|
||||
have_gpu = gpu_is_available();
|
||||
}
|
||||
std::cout << "Rank " << rank << ": gpu_available=" << have_gpu << "\n";
|
||||
|
||||
MPI_Finalize();
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user