GSoC 21: Journey so far…

I have been selected to Google Summer of Code 2021 program under the organization, Pharo Consortium.

Pharo is a simple and powerful object-oriented programming language that has been reported to have one of the highest productivity among developers.

The Pharo MOOC is a great place to get started with learning Pharo and that’s how I started with Pharo.

If you are planning to apply to GSoC next year through Pharo, go through this article by Oleksandr Zaitsev.

My project

I will be working on the “Matrix: State of the Art” project. Through this project, I will be trying to benchmark and profile the different matrix implementations available in Pharo. This will help us in giving an idea of which matrix implementation is faster and more efficient in Pharo. This will also help us to know where Pharo stands as compared to linear algebra libraries in other languages.

The Github link to the project can be found here.

I have already benchmarked most of the basic operations like building a matrix, matrix addition, matrix multiplication, element-wise multiplication, finding determinants, inverse, transpose, comparison of matrices, etc.

The major matrix implementations in Pharo like PMMatrix, Array2D, AIMatrix have already been included in the benchmarks.

To run the benchmark suite and get a report, we had decided to use the jv-calipel package. But that package was not compatible with the newer versions of Pharo.

So, we decided to make our own version of the package fixing the errors in the above package.

This is the link to our package, “CalipeL-S-Benchmark” which is compatible with all versions of Pharo. We believe that this package can be really useful for anyone else attempting to benchmark something in Pharo.

Once we got a report for all the benchmarks, something like this,

the next step was to parse the report and plot the outputs using Roassal3.

The graphical report of the benchmarks using Roassal3 look like this,

Be sure to check out #roassal-scriptoftheday on the Pharo discord community, there are really nice examples out there.

My other contributions

I made 3 merged pull requests to the PolyMath package, where I added some missing methods and fixed some corner cases in the existing implementation. The links can be found here. The Pharo and PolyMath community were so helpful in this process and I learned a lot about good coding practices when my pull requests were reviewed.

I had also made some contributions to Pharo when I was drafting the proposal and before the results were announced. The contributions mainly involved adding some new tests, missing methods, and fixing some small bugs. The links can be found here.

Tip: Don’t miss out on Pharo sprints! They are a great way to engage with the community and make some contributions.

I have also been actively trying to contribute to the linear-algebra package which is still a work in progress.

Plan Ahead

I am now trying to benchmark special types of matrices like sparse matrices. There are some implementations that cover this like SparseLargeTable and AISparseColumnMatrix. I also have to generate a suitable synthetic workload for them.

I am also planning to benchmark matrix decomposition operations like LUP decomposition that have been implemented in the PolyMath package.

I would like to thank my mentors — Hernan Morales Durand and Oleksandr Zaitsev for helping me throughout this journey and all the other community members for guiding me, especially Serge Stinckwich, HemalVarambhia, Guille Polito, and Stephan.

Computer Science enthusiast at NITK Surathkal