I had used Scilab for learning Digital Image Processing. It is a good open source alternative to Matlab. Although it has a good foundation, it was very clear that it was improvement was still possible.
In a recent image processing workshop, I learnt that the Scilab community had open sourced the source code on GitHub.
Keeping in mind that the software is continually evolving, I knew I could put my optimization skills to good use.
So, I dug into the code-base and found a few optimizable programs. So, I decided to inculcate parallelism into matrix norm calculation program, which is quite simple yet used by many other subprograms and external function calls.
https://github.com/opencollab/scilab/blob/master/scilab/modules/linear_algebra/src/c/norm.c
There were many potential areas for optimization:
https://github.com/varun-manjunath/scilab/blob/master/scilab/modules/linear_algebra/src/c/norm.c
I'll pull request the Scilab repository soon.
I've issued a pull request on the Scilab repository!
A floating point comparison can really become a harbinger of erroneous code. It will definitely not be portable due to the hardware dependability of precision and representation of floating point numbers.
http://stackoverflow.com/questions/19837576/comparing-floating-point-number-to-zero
I've also extensively used OpenMP reductions, especially with the + operator. The min reduction has also been used. Here is a link explaining min and max reductions with for loops.
http://www.techdarting.com/2013/06/openmp-min-max-reduction-code.html
There were some instances of code where I was perplexed with it's utility. There were idempotent equality comparisons and trivial integral divisions. I have left them unchanged, in the feeling that there is some fine level detail not visible with a simple inspection. I will update this point as soon as I understand what those pieces of code are meant for! Please comment to this post in case you know what is happening. :)
The optimized code also decreased in size, owing to the elimination of unnecessary conditional statements and redundant expression calculations!
In a recent image processing workshop, I learnt that the Scilab community had open sourced the source code on GitHub.
Keeping in mind that the software is continually evolving, I knew I could put my optimization skills to good use.
So, I dug into the code-base and found a few optimizable programs. So, I decided to inculcate parallelism into matrix norm calculation program, which is quite simple yet used by many other subprograms and external function calls.
https://github.com/opencollab/scilab/blob/master/scilab/modules/linear_algebra/src/c/norm.c
There were many potential areas for optimization:
- Elimination of redundant comparisons
- Use else if construct to remove redundant checks
- Remove floating point equality comparison!
- Embarrassingly parallel/perfectly parallel for loop with reductions
- Usage of min,max reduction of for loops, supported from openMP 3.1 onwards
- Move iterative invariants outside loops and reuse variables
- Factor out the FREE function from conditional statements (Scilab's version of the C memory d function free)
- Intermediate variables to store repeated value computations
https://github.com/varun-manjunath/scilab/blob/master/scilab/modules/linear_algebra/src/c/norm.c
I've issued a pull request on the Scilab repository!
A floating point comparison can really become a harbinger of erroneous code. It will definitely not be portable due to the hardware dependability of precision and representation of floating point numbers.
http://stackoverflow.com/questions/19837576/comparing-floating-point-number-to-zero
I've also extensively used OpenMP reductions, especially with the + operator. The min reduction has also been used. Here is a link explaining min and max reductions with for loops.
http://www.techdarting.com/2013/06/openmp-min-max-reduction-code.html
There were some instances of code where I was perplexed with it's utility. There were idempotent equality comparisons and trivial integral divisions. I have left them unchanged, in the feeling that there is some fine level detail not visible with a simple inspection. I will update this point as soon as I understand what those pieces of code are meant for! Please comment to this post in case you know what is happening. :)
The optimized code also decreased in size, owing to the elimination of unnecessary conditional statements and redundant expression calculations!
Comments
Post a Comment