Loop perforation is an approximate computing technique that allows to regularly skip some iterations of a loop.[1][2][3]
It relies on one parameter: the perforation rate. The perforation rate can be interpreted as the number of iteration to skip each time or the number of iterations to perform before skipping one.
Variants of loop perforation include those that skip iterations deterministically at regular intervals, those that skip iterations at the beginning or the end of the loop, and those that skip a random sample of iterations. The compiler may select the perforation variant at the compile-time, or include instrumentation that allows the runtime system to adaptively adjust the perforation strategy and perforation rate to satisfy the end-to-end accuracy goal.
Loop perforation techniques were first developed by MIT senior researchers Martin C. Rinard and Stelios Sidiroglou.
Code examples
editThe examples that follows provide the result of loop perforation applied on this C-like source code
for (int i = 0; i < N; i++) {
// do things
}
Skip n iterations each time
editfor (int i = 0; i < N; i++) {
// do things
i = i + skip_factor;
}
Skip one iteration after n
editint count = 0;
for (int i = 0; i < N; i++) {
if (count == skip_factor) {
count = 0;
} else {
// do things
count++;
}
}
See also
edit- ^ Henry Hoffmann, Sasa Misailovic, Stelios Sidiroglou, Anant Agarwal, Martin Rinard "Using Code Perforation to Improve Performance, Reduce Energy Consumption, and Respond to Failures" MIT CSAIL Tech. Report 2009-042, September 2009
- ^ Sasa Misailovic, Stelios Sidiroglou, Henry Hoffmann, Martin C. Rinard "Quality of Service Profiling" 32nd International Conference on Software Engineering (ICSE 2010). May 2010.
- ^ Steilos Sidiroglou, Sasa Misailovic, Henry Hoffmann, and Martin Rinard. "Managing Performance vs. Accuracy Trade-offs With Loop Perforation." ESEC/FSE. September, 2011