Hacker News new | ask | show | jobs
by fredrikbk 3577 days ago
We needed new language constructs (the matrix assembly) and a new type system for matrices that ties back to the graph to make it simple and fast. It is also not limited to FEM codes. It can be used to write any application that computes on sparse systems using linear algebra. Some application areas are optimization, machine learning, data analytics, fluid dynamics, image processing, and robotics.

For more information about the language, why it is designed the way it is, why it is fast, and what applications it can be used for, see the talk I gave at Microsoft Research last Friday: https://youtu.be/raPkxhHy5ro?t=40m32s

2 comments

This is really cool! You have coded up some timesteppers in Simit already; any plans to release them as a standard package which would be officially optimized, or do you mostly expect users to just roll their own as needed?
Thanks! Yes, we have an `apps` directory in the source tree that we will add programs to. These programs are tested by our test suites, and will later be our performance regressions.

I'm actually working with some people at Adobe this summer to add Local-Global Solvers for ARAP energies (an optimization code) to the set of applications we provide there. We also have an implementation of PageRank.

I really like the idea of a graph-based solver since it makes a lot more sense for matrix assembly, but I'm concerned about committing to using simit because that necessarily implies abandoning interoperability with other established software. I do a lot of evolutionary structural optimization, but I need to also be able to interface with existing software libraries in order to complete the job. I'm not sure how feasible of a port it would be, but myself and many others would be very appreciative of a simit library for an established language. Surely those custom types could be emulated with the object systems found in modern languages?
Very valid concerns. If you use C++ it's easy to interoperate with Simit, since Simit is a C++ library with an online compiler that compile the time steppers. You build the graph using a C++ api and then you run a Simit program which updates the graph. It's similar to how you'd use OpenGL or DirectX (graphs instead of meshes and Simit programs instead of shaders). See https://youtu.be/raPkxhHy5ro?t=19m32s, and http://simit-lang.org/api for more information.

You're absolutely right that we could have provided all the functionality as C++ classes instead of compiling Simit programs through the Simit C++ API, and we might at some point. The reason why we didn't do this is that the language is complex enough that we felt it would be less user friendly. I definitely tried to design it as a library without a parser.