Hacker News new | ask | show | jobs
by dysoco 722 days ago
Programming wise, we had a class where we had to write some image filters in pure x86_64 assembly using SIMD, it was quite hard to wrap your head around the model of vectorized operations, and more so to debug your code either with GDB or visually (sometimes you messed up slightly and the whole image was borked, sometimes the image looked perfect but it was slightly off-by-one and the tests wouldn't pass). This was just 1 of 3 projects, there was also one where you had to build a small 32 bits kernel though I had less of a bad time with that one (guess we got lucky writing the code, because debugging the GDT, etc. if you mess up a single value can be a PITA sometimes).

Moreover in the same class we also had exams, in one exercise you had to write more SIMD code in x86_64 (over images, strings of utf-8 characters, etc.) this was all in paper and no reference was allowed except the Intel Manuals; that was just one exercise there were more in systems programming, etc.

I also had a bad time with Prolog and Haskell in a Paradigms class though those exercises were a bit more bite-sized and streamlined.

Non-programming wise, I'm having the hardest time right now with a Numerical Methods class which involves a lot of proof-based linear algebra, induction over matrices, etc. I also had a bad time with a Logic and Computability class.

1 comments

The SIMD and kernel ones sound promising. Does the course have a website? Thanks.
Sadly no, they moved all courses to a private platform, but we used a lot of external resources not too much of our own except the exercises.

The kernel development one was pretty much what you can find in the Intel Manuals + osdev wiki [1] or some of the many osdev tutorials [2].

For SIMD I'm not aware of good tutorials or books, we did use again Intel manuals for reference and also [3]. For the image filters I assume you can search algorithms for basic filters such as pixelate, edges, etc. expressed as matrix operations and see how you can write that as SIMD ops.

[1]: https://wiki.osdev.org/Expanded_Main_Page [2]: https://os.phil-opp.com/ [3]: https://www.felixcloutier.com/x86/