A quick summary of general things to consider when evaluating an algorithm (please add on!):
Ability to parallelize (superscalar execution, SIMD (+ vector lane utilization), multi-threading) - opportunities can be found by looking for chunks of independent work. Also, ways to express operations in a data-parallel fashion
Workload imbalance
Communication/synchronization (as a result of parallel operators)
Data movement and effective use of cache (spatial and temporal locality, which affects arithmetic intensity)
Identification of whether a program is memory bandwidth bound or compute bound
ckk
Another thing I don't see in the slides is implementation vs abstraction. It formed a major theme in most of the topics discussed this quarter
lee
It's cool to see how many overarching ideas are connected throughout the quarter! Found myself thinking about what other ways are there to parallelize while doing the assignments, then thinking about the advantages and drawbacks of these alternatives, which was cool!
A quick summary of general things to consider when evaluating an algorithm (please add on!):