I am an aspiring CG programmer and would like to know what some of the more nuanced aspects of computer architecture are.

I have already taken several introductory arch courses where we've covered things like cache levels, basic multi-staged piplined datapaths, and memory structures (NUMA, Von Neumann), etc. I have also spent time understanding the basics of CUDA programming and SIMT work distribution models.

Is there any special aspect of architecture that you only learned outside of the classroom/in the real world that comes in handy when writing graphics applications?

Edit: some people think my phrasing is too broad. When I say CG programmer, I mean someone who writes their own Vulkan/D3D application from scratch. I do not mean someone who writes games in Unity and wants to improve their performance based on platform architecture.

To be even more specific, I should mention that I'm asking because of a presentation on architecture that I'm supposed to give that's coming up. I'm supposed to present on a topic related to architecture, but I'm kinda sick of going over the same old things. This is my third course on the subject and am a little sick of learning how caches work. A good example of something that I'm looking for is hyperthreading. I'd never heard about this until someone presented on it earlier in the semester.

Edit 2 I think I've found my own answer. This CMU lecture series has a bunch of slides talking about modern parallel architecture and algorithms. These slides on heterogeneous systems is particularly interesting to me.


closed as too broad by Nicol Bolas, user1118321, trichoplax Apr 3 '17 at 12:49

Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.

  • $\begingroup$ Depending on the field of work, a graphics programmer may have zero knowledge of GPU architecture, or may have very detailed knowledge, or anywhere in between. The term "computer graphics programmer" is too broad to be able to give a meaningful answer to this question. You may be able to guide your research by finding examples of the type of thing you want to be able to work on, which will help narrow down which knowledge areas are required/beneficial. $\endgroup$ – trichoplax Apr 3 '17 at 12:49
  • $\begingroup$ @trichoplax just updated the description. Hopefully it's a little less broad. $\endgroup$ – RomanLarionov Apr 3 '17 at 14:25
  • $\begingroup$ Maybe that people run systems that are diverse and a few years old. Relying on the newest prototypes might cause more harm than good, as they have yet to become standard $\endgroup$ – Charlie Apr 3 '17 at 15:33
  • 1
    $\begingroup$ You might enjoy learning about PowerVR-style tile-based renderers. The usual books (H&P, etc) don't cover that. As far as writing OpenGL applications, there is often a matching between vendor-specific extensions and vendor-specific hardware. Take a look at mobile GPU vendor extensions, programmable blending is the first that comes to mind. $\endgroup$ – user3412 Apr 4 '17 at 17:47

Browse other questions tagged or ask your own question.