Optimize this code using loop unrolling. void naive_pinwheel(pixel *src, pixel *
ID: 3586173 • Letter: O
Question
Optimize this code using loop unrolling.
void naive_pinwheel(pixel *src, pixel *dest)
{
int qi, qj, i, j;
/* Loop over 4 quadrants: */
for (qi = 0; qi < 2; qi++)
for (qj = 0; qj < 2; qj++)
/* Loop within quadrant: */
for (i = 0; i < src->dim/2; i++)
for (j = 0; j < src->dim/2; j++) {
int s_idx = RIDX((qj * src->dim/2) + i,
j + (qi * src->dim/2), src->dim);
int d_idx = RIDX((qj * src->dim/2) + src->dim/2 - 1 - j,
i + (qi * src->dim/2), src->dim);
dest[d_idx].red = (src[s_idx].red
+ src[s_idx].green
+ src[s_idx].blue) / 3;
dest[d_idx].green = (src[s_idx].red
+ src[s_idx].green
+ src[s_idx].blue) / 3;
dest[d_idx].blue = (src[s_idx].red
+ src[s_idx].green
+ src[s_idx].blue) / 3;
}
}
Explanation / Answer
#include<iostream>
#include<fstream>
#include<vector>
#include<sstream>
using namespace std;
int main() {
vector <int> vec;
ifstream fin("input.txt");
string line;
string name;
int i;
while (getline( fin, line) ) //Read a line
{
stringstream ss(line);
ss >> name;
cout << name << " ";
while(ss >> i) //Extract integers from line
vec.push_back(i);
for (int j = 0; j < vec.size(); j = j + 2) {
if (j!=0)
cout << "; ";
cout << "(" << vec[j] << "," << vec[j+1] << ")";
}
cout << endl;
vec.clear();
}
fin.close();
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.