Hallo Ich versuche, die Leistung dieses Codes zu verbessern, unter der Voraussetzung, dass ich eine Maschine habe, die 4 Threads verarbeiten kann. Ich dachte zuerst darüber nach, omp parallel zu machen, aber dann sah ich, dass diese Funktion innerhalb einer for-Schleife war, also war es nicht sehr effizient, Threads so oft zu erstellen. So würde Ich mag wissen, wie es mit SSE zu implementieren, die effizienter wäre:SSE Parallelisierung
unsigned char cubicInterpolate_paralelo(unsigned char p[4], unsigned char x) {
unsigned char resultado;
unsigned char intermedio;
intermedio = + x*(3.0*(p[1] - p[2]) + p[3] - p[0]);
resultado = p[1] + 0.5 * x *(p[2] - p[0] + x*(2.0*p[0] - 5.0*p[1] + 4.0*p[2] - p[3] + x*(3.0*(p[1] - p[2]) + p[3] - p[0])));
return resultado;
}
unsigned char bicubicInterpolate_paralelo (unsigned char p[4][4], unsigned char x, unsigned char y) {
unsigned char arr[4],valorPixelCanal;
arr[0] = cubicInterpolate_paralelo(p[0], y);
arr[1] = cubicInterpolate_paralelo(p[1], y);
arr[2] = cubicInterpolate_paralelo(p[2], y);
arr[3] = cubicInterpolate_paralelo(p[3], y);
valorPixelCanal = cubicInterpolate_paralelo(arr, x);
return valorPixelCanal;
}
dies in einige für geschachtelt verwendet wird:
for(i=0; i<z_img.width(); i++) {
for(j=0; j<z_img.height(); j++) {
//For R,G,B
for(c=0; c<3; c++) {
for(l=0; l<4; l++){
for(k=0; k<4; k++){
arr[l][k] = img(i/zFactor +l, j/zFactor +k, 0, c);
}
}
color[c] = bicubicInterpolate_paralelo(arr, (unsigned char)(i%zFactor)/zFactor, (unsigned char)(j%zFactor)/zFactor);
}
z_img.draw_point(i,j,color);
}
}
Nur pingelig, aber mit SSE oder einem anderen Satz von Vektoroperationen wird Vektorisierung und keine Parallelisierung genannt. –