Why shouldn''t matrix class''s interface look like an array, C/C++ Programming

Assignment Help:

Why shouldn't Matrix class's interface look like an array-of-array?

A: Some people build a Matrix class that has an operator[] that returns a reference to an Array object (or possibly to a raw array, shudder), & that Array object contain an operator[] which returns an element of the Matrix (for example a reference to a double). Therefore they access elements of the matrix via syntax such as m[i][j] instead of syntax like m(i,j).

 

The array-of-array solution clearly works, however it is less flexible than the operator () approach. Exclusively, there are easy performance tuning tricks which can be done along with the operator () approach which are more complicated in the [][] approach, and thus the [][] approach is more likely to lead to bad performance, at least in some of the cases.

For instance, the easiest way to implement the [][] approach is to employ a physical layout of the matrix as a dense matrix which is stored in row-major form. By contrast, the operator () approach entirely hides the physical layout of the matrix, and which can lead to better performance in some of the cases.

Put it this way: the operator() approach is never bad than, and sometimes better than, the [][] approach.

The operator() approach is never bad since it is simple to implement the dense, row-major physical layout utilizing the operator() approach, so while that configuration happens to be the optimal layout through a performance standpoint, the operator() approach is only as simple as the [][] approach (possibly the operator() approach is a tiny bit simpler, The operator() approach is at times better since whenever the optimal layout for a given application happens to be something other than row-major, dense the implementation is frequently significantly easier by the operator() approach compared to the [][] approach.

As an instance of when a physical layout makes a important difference, a recent project happened to access matrix elements in columns (i.e., the algorithm accesses all the elements in one column, then the elements in another, etc.), & if the physical layout is row- major, the accesses may "stride the cache". For instance, if the rows happen to be approximately as big as the processor's cache size, machine might end up along with "cache miss" for almost all element access. In this specific project, we got a 20% development in performance by altering the mapping from the logical layout (row, column) to the physical layout (row , column).

Certainly there are several examples of this kind of thing from numerical methods, & sparse matrices are an entire other dimension on this issue. As it is, generally, easier to implement a sparse matrix or swap row/column ordering via the operator() approach, the operator() approach nothing lose and might achieve something it has no down-side & a potential up-side. Use the operator() approach.

 


Related Discussions:- Why shouldn''t matrix class''s interface look like an array

Decode the code, Smugglers are becoming very smart day by day. Now they hav...

Smugglers are becoming very smart day by day. Now they have developed a new technique of sending their messages from one smuggler to another. In their new technology, they are send

Define static storage class - computer programming, Define Static Storage C...

Define Static Storage Class in C Programming? The Static declarations have distinct and important uses. This allows the local variable to keep its previous value when the block

C program to swap the two values, Program is to swap the two values which a...

Program is to swap the two values which are enter by user: Program is to swap the two values which are enter by user through the function with values changed using pointers

PROGRAM, TO CONVERT A NUMBER OR A DIGIT INTO ALPHABET

TO CONVERT A NUMBER OR A DIGIT INTO ALPHABET

Lexicographically preceding permutation, Given an integer n and a permutati...

Given an integer n and a permutation of numbers 1, 2 ... , n-1, n write a program to print the permutation that lexicographically precedes the given input permutation. If the given

Expected output of the program - c program, Expected output of the program:...

Expected output of the program: 1. Consider the following programs. For each, indicate whether the program is correct. If yes, what is the expected output? If not, what is the

Program to input 2 date & produce a new date - c++ program, /*  THIS PROGRA...

/*  THIS PROGRAM IS TO ASK USER TO INPUT TWO DATE & PRODUCE A NEW DATE  */ #include #include struct date  {   int dd;   int yy;   int mm;  }; date add(date d1,date d2)    {

Write a program to change the matrix program, Change the matrix program (pr...

Change the matrix program (program 3) slightly. Overload == operator to compare two matrices to be added or subtracted. i.e., whether the column of first and the row of second

Identifier and constant, What are  Id e n t i f ie rs a n d C o...

What are  Id e n t i f ie rs a n d C o n s t a n ts in C++? Id e n t i f ie r a n d C o n s t a n t : I d e n t i f ie r

Bankers algorithm, creating a system having five process from p0 to p4 and ...

creating a system having five process from p0 to p4 and five resource types. create the need matrix use the safe algorithm to test if the system is in safe mode.

Write Your Message!

Captcha
Free Assignment Quote

Assured A++ Grade

Get guaranteed satisfaction & time on delivery in every assignment order you paid with us! We ensure premium quality solution document along with free turntin report!

All rights reserved! Copyrights ©2019-2020 ExpertsMind IT Educational Pvt Ltd