Files
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

578 lines
22 KiB
C++

/*! \file */
/* ************************************************************************
* Copyright (C) 2019-2026 Advanced Micro Devices, Inc. All rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
* ************************************************************************ */
/*! \file
* \brief rocsparse_arguments.hpp provides a class to parse command arguments in both,
* clients and gtest. If class structure is changed, rocsparse_common.yaml must also be
* changed.
*/
#pragma once
#ifndef ROCSPARSE_ARGUMENTS_HPP
#define ROCSPARSE_ARGUMENTS_HPP
#include "rocsparse_datatype2string.hpp"
#include "rocsparse_math.hpp"
#include <cstring>
#include <iomanip>
#include <iostream>
struct Arguments
{
rocsparse_int M;
rocsparse_int N;
rocsparse_int K;
rocsparse_int nnz;
rocsparse_int block_dim;
rocsparse_int row_block_dimA;
rocsparse_int col_block_dimA;
rocsparse_int row_block_dimB;
rocsparse_int col_block_dimB;
rocsparse_int sell_slice_size;
rocsparse_int dimx;
rocsparse_int dimy;
rocsparse_int dimz;
rocsparse_int ll;
rocsparse_int l;
rocsparse_int u;
rocsparse_int uu;
rocsparse_indextype index_type_I;
rocsparse_indextype index_type_J;
rocsparse_datatype a_type;
rocsparse_datatype b_type;
rocsparse_datatype c_type;
rocsparse_datatype x_type;
rocsparse_datatype y_type;
rocsparse_datatype compute_type;
rocsparse_indextype A_row_indextype;
rocsparse_indextype A_col_indextype;
rocsparse_indextype B_row_indextype;
rocsparse_indextype B_col_indextype;
rocsparse_indextype C_row_indextype;
rocsparse_indextype C_col_indextype;
double alpha;
double alphai;
double beta;
double betai;
double threshold;
double percentage;
rocsparse_operation transA;
rocsparse_operation transB;
rocsparse_index_base baseA;
rocsparse_index_base baseB;
rocsparse_index_base baseC;
rocsparse_index_base baseD;
rocsparse_action action;
rocsparse_hyb_partition part;
rocsparse_matrix_type matrix_type;
rocsparse_diag_type diag;
rocsparse_fill_mode uplo;
rocsparse_storage_mode storage;
rocsparse_analysis_policy apol;
rocsparse_solve_policy spol;
rocsparse_direction direction;
rocsparse_order order;
rocsparse_order orderB;
rocsparse_order orderC;
rocsparse_format formatA;
rocsparse_format formatB;
rocsparse_format formatC;
rocsparse_itilu0_alg itilu0_alg;
rocsparse_sddmm_alg sddmm_alg;
rocsparse_spmv_alg spmv_alg;
rocsparse_spsv_alg spsv_alg;
rocsparse_sptrsv_alg sptrsv_alg;
rocsparse_spitsv_alg spitsv_alg;
rocsparse_spsm_alg spsm_alg;
rocsparse_sptrsm_alg sptrsm_alg;
rocsparse_spmm_alg spmm_alg;
rocsparse_spgemm_alg spgemm_alg;
rocsparse_spgeam_alg spgeam_alg;
rocsparse_sparse_to_dense_alg sparse_to_dense_alg;
rocsparse_dense_to_sparse_alg dense_to_sparse_alg;
rocsparse_gtsv_interleaved_alg gtsv_interleaved_alg;
rocsparse_gpsv_interleaved_alg gpsv_interleaved_alg;
rocsparse_matrix_init matrix;
rocsparse_matrix_init_kind matrix_init_kind;
rocsparse_int unit_check;
rocsparse_int timing;
rocsparse_int iters;
rocsparse_int iters_inner;
rocsparse_int nfreeiter;
rocsparse_int nmaxiter;
int64_t denseld;
rocsparse_int batch_count;
rocsparse_int batch_count_A;
rocsparse_int batch_count_B;
rocsparse_int batch_count_C;
rocsparse_int batch_stride;
rocsparse_int ld_multiplier_B;
rocsparse_int ld_multiplier_C;
uint32_t algo;
int numericboost;
double boosttol;
double boostval;
double boostvali;
double tolm;
double rand_gen_min;
double rand_gen_max;
bool graph_test;
bool skip_reproducibility;
bool sparsity_pattern_statistics;
bool call_stage_analysis;
bool convert_to_int;
bool integer_based_manufactured_solution;
char filename[128];
char function[64];
char name[64];
char category[32];
char hardware[32];
char skip_hardware[32];
uint32_t host_memory_gb;
uint32_t device_memory_gb;
// Validate input format.
// rocsparse_gentest.py is expected to conform to this format.
// rocsparse_gentest.py uses rocsparse_common.yaml to generate this format.
static void validate(std::istream& ifs)
{
auto error = [](auto name) {
std::cerr << "Arguments field " << name << " does not match format.\n\n"
<< "Fatal error: Binary test data does match input format.\n"
"Ensure that rocsparse_arguments.hpp and rocsparse_common.yaml\n"
"define exactly the same Arguments, that rocsparse_gentest.py\n"
"generates the data correctly, and that endianness is the same.\n";
abort();
};
char header[10]{}, trailer[10]{};
Arguments arg{};
ifs.read(header, sizeof(header));
ifs >> arg;
ifs.read(trailer, sizeof(trailer));
if(strcmp(header, "rocSPARSE"))
error("header");
else if(strcmp(trailer, "ROCsparse"))
error("trailer");
auto check_func = [&, sig = (uint8_t)0](const auto& elem, auto name) mutable {
static_assert(sizeof(elem) <= 255,
"One of the fields of Arguments is too large (> 255 bytes)");
for(uint8_t i = 0; i < sizeof(elem); ++i)
if(reinterpret_cast<const uint8_t*>(&elem)[i] ^ sig ^ i)
error(name);
sig += 89;
};
#define ROCSPARSE_FORMAT_CHECK(x) check_func(arg.x, #x)
// Order is important
ROCSPARSE_FORMAT_CHECK(M);
ROCSPARSE_FORMAT_CHECK(N);
ROCSPARSE_FORMAT_CHECK(K);
ROCSPARSE_FORMAT_CHECK(nnz);
ROCSPARSE_FORMAT_CHECK(block_dim);
ROCSPARSE_FORMAT_CHECK(row_block_dimA);
ROCSPARSE_FORMAT_CHECK(col_block_dimA);
ROCSPARSE_FORMAT_CHECK(row_block_dimB);
ROCSPARSE_FORMAT_CHECK(col_block_dimB);
ROCSPARSE_FORMAT_CHECK(sell_slice_size);
ROCSPARSE_FORMAT_CHECK(dimx);
ROCSPARSE_FORMAT_CHECK(dimy);
ROCSPARSE_FORMAT_CHECK(dimz);
ROCSPARSE_FORMAT_CHECK(ll);
ROCSPARSE_FORMAT_CHECK(l);
ROCSPARSE_FORMAT_CHECK(u);
ROCSPARSE_FORMAT_CHECK(uu);
ROCSPARSE_FORMAT_CHECK(index_type_I);
ROCSPARSE_FORMAT_CHECK(index_type_J);
ROCSPARSE_FORMAT_CHECK(a_type);
ROCSPARSE_FORMAT_CHECK(b_type);
ROCSPARSE_FORMAT_CHECK(c_type);
ROCSPARSE_FORMAT_CHECK(x_type);
ROCSPARSE_FORMAT_CHECK(y_type);
ROCSPARSE_FORMAT_CHECK(compute_type);
ROCSPARSE_FORMAT_CHECK(A_row_indextype);
ROCSPARSE_FORMAT_CHECK(A_col_indextype);
ROCSPARSE_FORMAT_CHECK(B_row_indextype);
ROCSPARSE_FORMAT_CHECK(B_col_indextype);
ROCSPARSE_FORMAT_CHECK(C_row_indextype);
ROCSPARSE_FORMAT_CHECK(C_col_indextype);
ROCSPARSE_FORMAT_CHECK(alpha);
ROCSPARSE_FORMAT_CHECK(alphai);
ROCSPARSE_FORMAT_CHECK(beta);
ROCSPARSE_FORMAT_CHECK(betai);
ROCSPARSE_FORMAT_CHECK(threshold);
ROCSPARSE_FORMAT_CHECK(percentage);
ROCSPARSE_FORMAT_CHECK(transA);
ROCSPARSE_FORMAT_CHECK(transB);
ROCSPARSE_FORMAT_CHECK(baseA);
ROCSPARSE_FORMAT_CHECK(baseB);
ROCSPARSE_FORMAT_CHECK(baseC);
ROCSPARSE_FORMAT_CHECK(baseD);
ROCSPARSE_FORMAT_CHECK(action);
ROCSPARSE_FORMAT_CHECK(part);
ROCSPARSE_FORMAT_CHECK(matrix_type);
ROCSPARSE_FORMAT_CHECK(diag);
ROCSPARSE_FORMAT_CHECK(uplo);
ROCSPARSE_FORMAT_CHECK(storage);
ROCSPARSE_FORMAT_CHECK(apol);
ROCSPARSE_FORMAT_CHECK(spol);
ROCSPARSE_FORMAT_CHECK(direction);
ROCSPARSE_FORMAT_CHECK(order);
ROCSPARSE_FORMAT_CHECK(orderB);
ROCSPARSE_FORMAT_CHECK(orderC);
ROCSPARSE_FORMAT_CHECK(formatA);
ROCSPARSE_FORMAT_CHECK(formatB);
ROCSPARSE_FORMAT_CHECK(formatC);
ROCSPARSE_FORMAT_CHECK(itilu0_alg);
ROCSPARSE_FORMAT_CHECK(sddmm_alg);
ROCSPARSE_FORMAT_CHECK(spmv_alg);
ROCSPARSE_FORMAT_CHECK(spsv_alg);
ROCSPARSE_FORMAT_CHECK(sptrsv_alg);
ROCSPARSE_FORMAT_CHECK(spitsv_alg);
ROCSPARSE_FORMAT_CHECK(spsm_alg);
ROCSPARSE_FORMAT_CHECK(sptrsm_alg);
ROCSPARSE_FORMAT_CHECK(spmm_alg);
ROCSPARSE_FORMAT_CHECK(spgemm_alg);
ROCSPARSE_FORMAT_CHECK(spgeam_alg);
ROCSPARSE_FORMAT_CHECK(sparse_to_dense_alg);
ROCSPARSE_FORMAT_CHECK(dense_to_sparse_alg);
ROCSPARSE_FORMAT_CHECK(gtsv_interleaved_alg);
ROCSPARSE_FORMAT_CHECK(gpsv_interleaved_alg);
ROCSPARSE_FORMAT_CHECK(matrix);
ROCSPARSE_FORMAT_CHECK(matrix_init_kind);
ROCSPARSE_FORMAT_CHECK(unit_check);
ROCSPARSE_FORMAT_CHECK(timing);
ROCSPARSE_FORMAT_CHECK(iters);
ROCSPARSE_FORMAT_CHECK(iters_inner);
ROCSPARSE_FORMAT_CHECK(nfreeiter);
ROCSPARSE_FORMAT_CHECK(nmaxiter);
ROCSPARSE_FORMAT_CHECK(denseld);
ROCSPARSE_FORMAT_CHECK(batch_count);
ROCSPARSE_FORMAT_CHECK(batch_count_A);
ROCSPARSE_FORMAT_CHECK(batch_count_B);
ROCSPARSE_FORMAT_CHECK(batch_count_C);
ROCSPARSE_FORMAT_CHECK(batch_stride);
ROCSPARSE_FORMAT_CHECK(ld_multiplier_B);
ROCSPARSE_FORMAT_CHECK(ld_multiplier_C);
ROCSPARSE_FORMAT_CHECK(algo);
ROCSPARSE_FORMAT_CHECK(numericboost);
ROCSPARSE_FORMAT_CHECK(boosttol);
ROCSPARSE_FORMAT_CHECK(boostval);
ROCSPARSE_FORMAT_CHECK(boostvali);
ROCSPARSE_FORMAT_CHECK(tolm);
ROCSPARSE_FORMAT_CHECK(rand_gen_min);
ROCSPARSE_FORMAT_CHECK(rand_gen_max);
ROCSPARSE_FORMAT_CHECK(graph_test);
ROCSPARSE_FORMAT_CHECK(skip_reproducibility);
ROCSPARSE_FORMAT_CHECK(sparsity_pattern_statistics);
ROCSPARSE_FORMAT_CHECK(call_stage_analysis);
ROCSPARSE_FORMAT_CHECK(convert_to_int);
ROCSPARSE_FORMAT_CHECK(integer_based_manufactured_solution);
ROCSPARSE_FORMAT_CHECK(filename);
ROCSPARSE_FORMAT_CHECK(function);
ROCSPARSE_FORMAT_CHECK(name);
ROCSPARSE_FORMAT_CHECK(category);
ROCSPARSE_FORMAT_CHECK(hardware);
ROCSPARSE_FORMAT_CHECK(skip_hardware);
ROCSPARSE_FORMAT_CHECK(host_memory_gb);
ROCSPARSE_FORMAT_CHECK(device_memory_gb);
}
template <typename T>
T get_alpha() const
{
return (rocsparse_isnan(alpha) || rocsparse_isnan(alphai))
? static_cast<T>(0)
: convert_alpha_beta<T>(alpha, alphai);
}
template <typename T>
T get_beta() const
{
return (rocsparse_isnan(beta) || rocsparse_isnan(betai))
? static_cast<T>(0)
: convert_alpha_beta<T>(beta, betai);
}
template <typename T>
T get_boostval() const
{
return (rocsparse_isnan(boostval) || rocsparse_isnan(boostvali))
? static_cast<T>(0)
: convert_alpha_beta<T>(boostval, boostvali);
}
template <typename T>
T get_threshold() const
{
return (rocsparse_isnan(threshold)) ? static_cast<T>(0) : threshold;
}
template <typename T>
T get_percentage() const
{
return (rocsparse_isnan(percentage)) ? static_cast<T>(0) : percentage;
}
private:
template <typename T>
static T convert_alpha_beta(double r, double i)
{
return static_cast<T>(r);
}
template <>
rocsparse_float_complex convert_alpha_beta(double r, double i)
{
return rocsparse_float_complex(r, i);
}
template <>
rocsparse_double_complex convert_alpha_beta(double r, double i)
{
return rocsparse_double_complex(r, i);
}
// Function to read Structures data from stream
friend std::istream& operator>>(std::istream& str, Arguments& arg)
{
str.read(reinterpret_cast<char*>(&arg), sizeof(arg));
return str;
}
// print_value is for formatting different data types
// Default output
template <typename T>
static void print_value(std::ostream& str, const T& x)
{
str << x;
}
// Floating-point output
static void print_value(std::ostream& str, double x)
{
if(std::isnan(x))
str << ".nan";
else if(std::isinf(x))
str << (x < 0 ? "-.inf" : ".inf");
else
{
char s[32];
snprintf(s, sizeof(s) - 2, "%.17g", x);
// If no decimal point or exponent, append .0
char* end = s + strcspn(s, ".eE");
if(!*end)
strcat(end, ".0");
str << s;
}
}
// Character output
static void print_value(std::ostream& str, char c)
{
char s[]{c, 0};
str << std::quoted(s, '\'');
}
// bool output
static void print_value(std::ostream& str, bool b)
{
str << (b ? "true" : "false");
}
// string output
static void print_value(std::ostream& str, const char* s)
{
str << std::quoted(s);
}
// Function to print Arguments out to stream in YAML format
// Google Tests uses this automatically to dump parameters
friend std::ostream& operator<<(std::ostream& str, const Arguments& arg)
{
// delim starts as '{' opening brace and becomes ',' afterwards
auto print = [&, delim = '{'](const char* name, auto x) mutable {
str << delim << " " << name << ": ";
print_value(str, x);
delim = ',';
};
print("function", arg.function);
print("index_type_I", rocsparse_indextype2string(arg.index_type_I));
print("index_type_J", rocsparse_indextype2string(arg.index_type_J));
print("a_type", rocsparse_datatype2string(arg.a_type));
print("b_type", rocsparse_datatype2string(arg.b_type));
print("c_type", rocsparse_datatype2string(arg.c_type));
print("x_type", rocsparse_datatype2string(arg.x_type));
print("y_type", rocsparse_datatype2string(arg.y_type));
print("compute_type", rocsparse_datatype2string(arg.compute_type));
print("A_row_indextype", rocsparse_indextype2string(arg.A_row_indextype));
print("A_col_indextype", rocsparse_indextype2string(arg.A_col_indextype));
print("B_row_indextype", rocsparse_indextype2string(arg.B_row_indextype));
print("B_col_indextype", rocsparse_indextype2string(arg.B_col_indextype));
print("C_row_indextype", rocsparse_indextype2string(arg.C_row_indextype));
print("C_col_indextype", rocsparse_indextype2string(arg.C_col_indextype));
print("transA", rocsparse_operation2string(arg.transA));
print("transB", rocsparse_operation2string(arg.transB));
print("baseA", rocsparse_indexbase2string(arg.baseA));
print("baseB", rocsparse_indexbase2string(arg.baseB));
print("baseC", rocsparse_indexbase2string(arg.baseC));
print("baseD", rocsparse_indexbase2string(arg.baseD));
print("M", arg.M);
print("N", arg.N);
print("K", arg.K);
print("nnz", arg.nnz);
print("block_dim", arg.block_dim);
print("row_block_dimA", arg.row_block_dimA);
print("col_block_dimA", arg.col_block_dimA);
print("row_block_dimB", arg.row_block_dimB);
print("col_block_dimB", arg.col_block_dimB);
print("sell_slice_size", arg.sell_slice_size);
print("dim_x", arg.dimx);
print("dim_y", arg.dimy);
print("dim_z", arg.dimz);
print("ll", arg.ll);
print("l", arg.l);
print("u", arg.u);
print("uu", arg.uu);
print("alpha", arg.alpha);
print("alphai", arg.alphai);
print("beta", arg.beta);
print("betai", arg.betai);
print("threshold", arg.threshold);
print("percentage", arg.percentage);
print("action", rocsparse_action2string(arg.action));
print("part", rocsparse_partition2string(arg.part));
print("matrix_type", rocsparse_matrixtype2string(arg.matrix_type));
print("diag", rocsparse_diagtype2string(arg.diag));
print("uplo", rocsparse_fillmode2string(arg.uplo));
print("storage", rocsparse_storagemode2string(arg.storage));
print("analysis_policy", rocsparse_analysis2string(arg.apol));
print("solve_policy", rocsparse_solve2string(arg.spol));
print("direction", rocsparse_direction2string(arg.direction));
print("order", rocsparse_order2string(arg.order));
print("orderB", rocsparse_order2string(arg.orderB));
print("orderC", rocsparse_order2string(arg.orderC));
print("formatA", rocsparse_format2string(arg.formatA));
print("formatB", rocsparse_format2string(arg.formatB));
print("formatC", rocsparse_format2string(arg.formatC));
print("itilu0_alg", rocsparse_itilu0alg2string(arg.itilu0_alg));
print("sddmm_alg", rocsparse_sddmmalg2string(arg.sddmm_alg));
print("spmv_alg", rocsparse_spmvalg2string(arg.spmv_alg));
print("spsv_alg", rocsparse_spsvalg2string(arg.spsv_alg));
print("sptrsv_alg", rocsparse_sptrsvalg2string(arg.sptrsv_alg));
print("spitsv_alg", rocsparse_spitsvalg2string(arg.spitsv_alg));
print("spsm_alg", rocsparse_spsmalg2string(arg.spsm_alg));
print("sptrsm_alg", rocsparse_sptrsmalg2string(arg.sptrsm_alg));
print("spmm_alg", rocsparse_spmmalg2string(arg.spmm_alg));
print("spgemm_alg", rocsparse_spgemmalg2string(arg.spgemm_alg));
print("spgeam_alg", rocsparse_spgeamalg2string(arg.spgeam_alg));
print("sparse_to_dense_alg", rocsparse_sparsetodensealg2string(arg.sparse_to_dense_alg));
print("dense_to_sparse_alg", rocsparse_densetosparsealg2string(arg.dense_to_sparse_alg));
print("gtsv_interleaved_alg",
rocsparse_gtsvinterleavedalg2string(arg.gtsv_interleaved_alg));
print("gpsv_interleaved_alg", rocsparse_gpsvalg2string(arg.gpsv_interleaved_alg));
print("matrix", rocsparse_matrix2string(arg.matrix));
print("matrix_init_kind", rocsparse_matrix_init_kind2string(arg.matrix_init_kind));
print("file", arg.filename);
print("algo", arg.algo);
print("numeric_boost", arg.numericboost);
print("boost_tol", arg.boosttol);
print("boost_val", arg.boostval);
print("boost_vali", arg.boostvali);
print("tolm", arg.tolm);
print("rand_gen_min", arg.rand_gen_min);
print("rand_gen_max", arg.rand_gen_max);
print("graph_test", arg.graph_test);
print("skip_reproducibility", arg.skip_reproducibility);
print("sparsity_pattern_statistics", arg.sparsity_pattern_statistics);
print("call_stage_analysis", arg.call_stage_analysis);
print("convert_to_int", arg.convert_to_int);
print("integer_based_manufactured_solution", arg.integer_based_manufactured_solution);
print("name", arg.name);
print("category", arg.category);
print("hardware", arg.hardware);
print("skip_hardware", arg.skip_hardware);
print("host_memory_gb", arg.host_memory_gb);
print("device_memory_gb", arg.device_memory_gb);
print("unit_check", arg.unit_check);
print("timing", arg.timing);
print("iters", arg.iters);
print("iters_inner", arg.iters_inner);
print("nfreeiter", arg.nfreeiter);
print("nmaxiter", arg.nmaxiter);
print("denseld", arg.denseld);
print("batch_count", arg.batch_count);
print("batch_count_A", arg.batch_count_A);
print("batch_count_B", arg.batch_count_B);
print("batch_count_C", arg.batch_count_C);
print("batch_stride", arg.batch_stride);
print("ld_multiplier_B", arg.ld_multiplier_B);
print("ld_multiplier_C", arg.ld_multiplier_C);
return str << " }\n";
}
};
static_assert(std::is_standard_layout<Arguments>{},
"Arguments is not a standard layout type, and thus is "
"incompatible with C.");
static_assert(std::is_trivial<Arguments>{},
"Arguments is not a trivial type, and thus is "
"incompatible with C.");
inline bool rocsparse_arguments_has_datafile(const Arguments& arg)
{
return (arg.matrix == rocsparse_matrix_file_rocalution)
|| (arg.matrix == rocsparse_matrix_file_mtx)
|| (arg.matrix == rocsparse_matrix_file_smtx)
|| (arg.matrix == rocsparse_matrix_file_bsmtx)
|| (arg.matrix == rocsparse_matrix_file_rocsparseio);
}
#endif // ROCSPARSE_ARGUMENTS_HPP