getMaxBlockSize
C++ Function Reference
1 Signature
int BigDataStatMeth::getMaxBlockSize(int nRowsA, int nColsA, int nRowsB, int nColsB, int ifactor, Rcpp::Nullable< int > block_size=R_NilValue)2 Description
Calculates optimal block size for matrix operations.
3 Parameters
nRowsA(int): Number of rows in matrix AnColsA(int): Number of columns in matrix AnRowsB(int): Number of rows in matrix BnColsB(int): Number of columns in matrix Bifactor(int): Block size scaling factorblock_size(Rcpp::Nullable< int >): Optional user-specified block size
4 Returns
int Optimal block size
5 Details
nRowsANumber of rows in matrix A nColsANumber of columns in matrix A nRowsBNumber of rows in matrix B nColsBNumber of columns in matrix B ifactorBlock size scaling factor block_sizeOptional user-specified block size int Optimal block size Block size determination:Considers matrix dimensionsRespects maximum block size limitsAllows user override with warningsOptimizes for memory usage
6 Source Code
NoteImplementation
File: inst/include/Utilities/Utilities.hpp • Lines 251-279
inline int getMaxBlockSize ( int nRowsA, int nColsA, int nRowsB, int nColsB, int ifactor, Rcpp::Nullable<int> block_size = R_NilValue)
{
int iblock_size;
try
{
iblock_size = std::min( std::min( nRowsA, nColsA), std::min( nRowsB, nColsB) );
if (block_size.isNotNull()) {
// if( Rcpp::as<int> (block_size) < iblock_size ) {
// iblock_size = Rcpp::as<int> (block_size); }
iblock_size = Rcpp::as<int> (block_size);
if( (unsigned)iblock_size > (MAXBLOCKSIZE / ifactor) ) {
Rcpp::warning("Warning: block size %i is bigger than the maximum recomended %i.", iblock_size, (MAXBLOCKSIZE / ifactor));
}
} else {
//..// iblock_size = std::min( std::min(dsA->nrows(),dsA->ncols()), std::min(dsB->nrows(), dsB->ncols()));
if ((unsigned)iblock_size > (MAXBLOCKSIZE / ifactor))
iblock_size = MAXBLOCKSIZE / ifactor;
}
} catch(std::exception& ex) {
Rcpp::Rcout<< "c++ exception getObjecDataType: "<<ex.what()<< " \n";
}
return(iblock_size);
}7 Usage Example
#include "BigDataStatMeth.hpp"
// Example usage
auto result = getMaxBlockSize(...);