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 A
  • nColsA (int): Number of columns in matrix A
  • nRowsB (int): Number of rows in matrix B
  • nColsB (int): Number of columns in matrix B
  • ifactor (int): Block size scaling factor
  • block_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

File: inst/include/Utilities/Utilities.hppLines 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(...);