“…the granularity at which code is considered: fine-grained and coarse-grained. The first one works at the operation level and implements small clusters of operations in HW [7,10,12,13,14,43,59,44]; the second one operates at the loop or procedure level and identifies critical loops or procedures in the application, and displaces them from SW to HW as a whole [16,17,18,19,20,21]. The main differences are in terms of speedups and flexibility: although a coarse-grained approach could produce a large speedup, its flexibility is limited, given that this approach is often performed on a per application basis and it is difficult that other applications have the same loop or procedure as critical part.…”