Putting C++ to work - Making Abstractions for Vulkan Specialization Info
This post will explore some real-world usage of the more exotic template metaprogramming features of C++11, 14, and 17. I think the resulting interface is quite nice and would not have been as convenient to provide without modern language features. The specific application in this example is an abstraction around the Vulkan
vk::SpecializationInfo struct but the techniques should transfer well to other domains outside graphics as well.
All the code described here is free to use as a simple single header here.
Understanding Backpropagation My Way
Note to the reader: by “my way,” I don’t intend to purport that any of the thoughts in this post are original or unique. I did, however, write it off the top of my head so any similarity to other resources are incidental. Also, I’ve obviously read other books, papers, and articles on the subject of modern neural network architectures, so I don’t wish to lay claim to any of those ideas as well. I also believe that each individual should search for his or her own intuition of any concept, so what worked for me may not work for you (but it may aid you in that search).
A Brief Guide to Using the Vulkan C++ Bindings
I’m going to say it. If you are a C++ developer and learning or using Vulkan professionally, I believe you should be using the vulkan.hpp header. Most of the examples I see in the wild use the C interface, and I get why this is the case. We’re used to seeing an OpenGL-esque C-style interface and its also the primary source of all the documentation. My hope is that things will settle on the C++ version over time on all fronts: documentation, examples, and real-world code. Here are just a few of the benefits:
How to Learn Vulkan
This blog post is a meta post on the general act of going through the motions in learning Vulkan, and outlines what is hopefully an effective strategy for newer practicitioners. I’ll do my best to outline major pitfalls that I encountered on my own, and where I recommend spending the bulk of your time, as well as a rough “timeline.” For people already familiar with OpenGL and DirectX, I hope to also explain in plain terms what functionality you were relying on the driver for previous that you are now responsible for (and what that means). I’m not going to try to explain how to solve each one of the problems you will encounter, as this post will get unbearably long as to not serve any real purpose. I will endeavor to provide links to good resources in the community already and explain how to read/utilize them. This blog post is meant to be read/skimmed once, and then bookmarked for reference as you proceed with your journey. If there were resources you think I missed that you think may be worth including, feel free to tweet me (twitter link at the bottom of this page)! So without further ado…