Whats the fuss about Go? Well if you didn't know already, Go is one of Google's latest language contributions to the open source community. Designed by non other than Rob Pike, Ken Thompson (both heavily involved with Unix & Bell Labs) and Robert Griesemer, Go aka GoLang is a language developed to solve those annoyances faced by many of us on a daily basis (outrageously long compile times, unnecessary difficulty and complexity in developing massively parallel systems). The Go wiki states several goals that the language is designed to meet but the one I shall be focusing on mainly is the concurrency aspect to this language.
We have had multiple-core systems for quite a long time now yet rarely are there any applications that are designed to fully take advantage of this architecture. One can argue that the thought of parallel programming is daunting to the majority of programmers but on the other hand one can also argue that if done correctly, designing and implementing parallel applications is quite a lot easier than trying to achieve the same result through conventional programming. My background in parallel programming is through the use of the JCSP (a project by the University of Kent) under Prof. Jon Kerridge . I have read several articles that mention parallelism and concurrency in Go but none so far that really delve into the use of correct design patterns to implement parallel applications. Thus i will use my knowledge thus far of parallel programming to investigate how effective the Go language can be when it comes to developing parallel applications.
The main focus of this investigation will be the parallelization of Artificial Intelligence(machine learning) Algorithms in Go. The AI/ML field is one that is constantly seeking more and more computing power whether it be for data mining, weather prediction or gaming. This makes it an ample testing ground for new technologies and languages that offer less complexity and more computational power. Not only will i be testing a new language in a field it has yet to be really used in, I am aiming to apply it to algorithms and specialized sub-fields such as Deep Learning (which are very new and are currently on the bleeding edge of AI research) by the end of this project. This means that I may end up spending a lot of time building AI/ML libraries for the language as currently there are only five but I will make sure to regularly post progress updates for all interested observers.