Name of Student: Keith Harrison
Degree Subject: MSci Computer Science and Mathematics
Job Title: Research Assistant (A2I)
Company Name: College of Engineering, Mathematics and Physical Sciences
What were your key duties and responsibilities during your internship?
My role was to decrease the amount of time taken to run code given to me by the supervisor which had to do with modelling clouds (geophysical modelling). To do this I implemented OpenMP alongside different compiler flags in order to achieve time reduction. We would have near daily meetings to discuss progress and what methods we could implement next and also to discuss what issues I had as this internship was also to inform my supervisor on using this library and how to speed up code execution.
What outputs and outcomes did you deliver for your employer?
At the end of the internship I had spreadsheets showing numerous tests of the effect of making different subroutines parallel in their code, a research log of learning how to use OpenMP and some challenges I came across, how I solved them and what I would do in the future with what I have learnt, Altered .f90 files for the subroutines made parallel which achieves this time reduction, Multiple performance analyses of the code showing how long the code takes divided into subroutines and a quick guide to using OpenMP to help my supervisor learn OpenMP and improve the ~30% reduction in time I achieved.
What was your biggest achievement on your internship?
At the end of the third week I had reached another dead-end as I could not make any meaningful reductions in execution time past my usage of performance analyses. To remedy this I decided to go back to the document describing OpenMP and came across another type of construct !$OMP PARALLEL DO which combines two separate constructs into one. This would grant a major time save and changing just a singular Do loop to a Parallel Do loop took my time reduction from 9.6% to 16.1% for the resolution I was working at. However, the use of Parallel Do also came with issues to do with memory location access to further research had to be done to decide which variables had specific properties to ensure that errors did not occur. And in the end it allowed me to achieve a time reduction when implemented into the other subroutines of up to its max of 36%.
What did not go so well on your internship? How did you overcome any challenges?
For the first week I had issues using Fortran alongside OpenMP. I found this was because this library is not well supported for windows so I switched to a virtual machine to run Linux as it was more up to date for that operating system. Also I was wanting to test my code on better machines but as campus was shut I was not able to access them, until i thought of using the VPN to access the machines from home to be able to test my code on. Towards the end of the second week I found that I was not getting any major reductions in time, and then after talking to my supervisor he informed me of performance analysis for Apple computers, from this I researched if any existed for Fortran specifically, luckily I found one and it allowed me to properly target the subroutines which would grant me the biggest reductions in time when made parallel. When making my code parallel I found that OpenMP did not like dealing with Global variables and after communicating with my supervisor I came up with the idea of using dummy variables.
- Ability to Work Under Pressure
- Time and Work Load Management
- Strategic Planning
- Focus on Goals and Outcomes
- Logical thinking
- Creative thinking
- Work Ethic
Your message to other students considering a similar job role, organisation or sector?
“It was a great experience working with an academic in research as I could see the tangible evidence of what I was taught in lectures. Was also great to see how my knowledge in computer science could be used in other subjects. The remote working also helped tremendously with practicing good communication and work ethic as I was not working on campus or in an office but from my room.”