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

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.


Posted Date: 3/16/2013 3:18:43 AM | Location : United States

Related Discussions:- Why shouldn''t matrix class''s interface look like an array, Assignment Help, Ask Question on Why shouldn''t matrix class''s interface look like an array, Get Answer, Expert's Help, Why shouldn''t matrix class''s interface look like an array Discussions

Write discussion on Why shouldn''t matrix class''s interface look like an array
Your posts are moderated
Related Questions
write a grading program for a class with the following grading polices: a.there are two quizzes eaxh graded on the basis of 10 points b.there is ome midterm exam and one final exam

Purpose This assignment is an exercise in implementing the queue ADT using a singly-linked list. This assignment also introduces the concept of templates. Assignment Th

(a) Write a fragment of code that declares a variable colSp of type ColourSpot, and then moves it to the point (3, -4), and sets its colour to Green. (b) A function QU8 is speci

Q:  Tells the operators one can override; which operators should he override? A: Bottom line: don't puzzle your users. Remember the reason of operator overloading: to decreas

E x p r e s sion and their types: An expression will be in form of mathematical expression with C++ syntax embedded with it. Expressions are of following types which m

WAP TO PRINT THE LARGEST NUMBER FROM ANY 10 NUMBERS #include stdio.h> #include conio.h>   void main()   {                    int a[10],i,max;

fine the class bankAccount to implement the basic properties of a bank account. An object of this class should store the following data: Account holder''s name (string), account nu

source code for padovan string

i didnt no how to write and how to implement and the programming can be done in C and execution should be done in UNIX

Write a C# program to compute the Net Pay for employees. The program is to have a Main method and two user-defined methods. The Main method is to input the employee's name (string)