[video member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Simple Performance Counters" vod_platform=youtube id=QdTqYhv8tL0 annotator=dspecht annotator=Miblo] [2:04][Blackboard: Basic process of optimization] [6:02][Gather statistics] [8:45][Revisit __rdtsc] [10:22][GAME_UPDATE_AND_RENDER: Add __rdtsc cycle counts] [11:23][Introduce debug_cycle_counter in handmade_platform.h] [13:52][Support folks on platforms such as Linux and Mac, etc.] [18:42][Compile, clean and run] [19:44][FillGroundChunk: Turn off the ground chunks] [20:24][Get a look at those timer values] [26:09][Run the game and see the debug cycle count] [27:25][We are already missing our budget][quote 84] [28:16][Confirm what we know to be true] [28:45][RenderGroupToOutput: Add a timed block] [29:55][Introduce DebugGlobalMemory to enable us to access this timing stuff even when we shouldn't have access to it] [32:10][Note the difference between the two cycle counts] [33:34][Confirm that DrawRectangleSlowly is the culprit] [35:16][Introduce HitCount to discover if DrawRectangleSlowly is slow because it is slow, or because it's called so often] [37:45][Discover that we're calling the renderer thirteen times and DrawRectangleSlowly 64 times] [39:05][Figure out how many pixels we're filling] [42:49][Interpret the data] [43:28][Bust out some emacs-fu][quote 85] [43:42][Note that we're not operating on that many more pixels than the total on the screen] [44:21][Blackboard: Overdraw] [46:30][Blackboard: Progress report] [47:24][Turn off the NormalMap] [48:58][Understanding ballpark timings] [51:53][Make an estimate] [1:00:48][AVX-512 hype] [1:01:15][Q&A][:speech] [1:01:54][@grumpygiant256][Why no text labels on the counters?] [1:02:10][@childz][I'm sorry if this is something you've gone over before, but can you explain the difference between new and malloc() in C++ and when each is useful?] [1:03:04][@mrcowking][Is your handwriting as bad in real life as it is with a tablet?] [1:03:22][@mr4thdimention][Can you also cut out instructions by doing more work to save previous computations. Like d - XAxis, followed by d - XAxis - YAxis. Should that just be 2 instructions?] [1:03:50][@davidthomas426][Do you think we'll do multithreading in the software renderer?] [1:04:07][@braincruser][Is it possible to Quad-pump every operation?] [1:07:29][@braincruser][I meant, put it in wide instruction (SIMD)] [1:09:02][@garryjohanson][Would you talk Jeff into doing an optimization stream where you are the TA?] [1:10:01][That is the end of the stream][:speech] [/video]