first commit

This commit is contained in:
2026-01-18 20:37:50 +08:00
commit fff9f18287
123 changed files with 1385491 additions and 0 deletions

84
src/CheckAspectRatio.cpp Normal file
View File

@@ -0,0 +1,84 @@
//@HEADER
// ***************************************************
//
// HPCG: High Performance Conjugate Gradient Benchmark
//
// Contact:
// Michael A. Heroux ( maherou@sandia.gov)
// Jack Dongarra (dongarra@eecs.utk.edu)
// Piotr Luszczek (luszczek@eecs.utk.edu)
//
// ***************************************************
//@HEADER
/*
* SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*!
@file CheckAspectRatio.cpp
HPCG routine
*/
#include <algorithm>
#include <iostream>
#ifndef HPCG_NO_MPI
#include <mpi.h>
#endif
#include "hpcg.hpp"
#include "CheckAspectRatio.hpp"
extern int use_output_file;
int CheckAspectRatio(double smallest_ratio, int x, int y, int z, const char* what, bool DoIo)
{
double current_ratio = std::min(std::min(x, y), z) / double(std::max(std::max(x, y), z));
if (current_ratio < smallest_ratio)
{ // ratio of the smallest to the largest
if (DoIo)
{
if (use_output_file)
{
HPCG_fout << "The " << what << " sizes (" << x << "," << y << "," << z
<< ") are invalid because the ratio min(x,y,z)/max(x,y,z)=" << current_ratio
<< " is too small (at least " << smallest_ratio << " is required)." << std::endl;
HPCG_fout << "The shape should resemble a 3D cube. Please adjust and try again." << std::endl;
HPCG_fout.flush();
}
else
{
std::cout << "The " << what << " sizes (" << x << "," << y << "," << z
<< ") are invalid because the ratio min(x,y,z)/max(x,y,z)=" << current_ratio
<< " is too small (at least " << smallest_ratio << " is required)." << std::endl;
std::cout << "The shape should resemble a 3D cube. Please adjust and try again." << std::endl
<< std::flush;
}
}
#ifndef HPCG_NO_MPI
MPI_Abort(MPI_COMM_WORLD, 127);
#endif
return 127;
}
return 0;
}