Maybe improved SIMD
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
#include "tricorn_V0.h"
|
||||
#include <immintrin.h>
|
||||
|
||||
static unsigned converge(float c_rea, float c_imag, unsigned n);
|
||||
static unsigned converge(float c_real, float c_imag, unsigned n);
|
||||
|
||||
|
||||
/**
|
||||
@@ -28,15 +28,17 @@ void tricorn_V0(float complex start, size_t width, ssize_t height, float res, un
|
||||
__m128 four = _mm_set1_ps(4.0f);
|
||||
__m128 minus_two = _mm_set1_ps(-2.0f);
|
||||
|
||||
float c_imag = c_start_imag;
|
||||
__m128 c_imag_vector = _mm_set1_ps(c_imag);
|
||||
|
||||
float four_res = 4 * res;
|
||||
float vertical_step = imag_step * res;
|
||||
__m128 vertical_step_vector = _mm_set1_ps(vertical_step);
|
||||
|
||||
for(ssize_t y = 0; y < actual_height;y++) {
|
||||
float c_imag = c_start_imag - (y*imag_step) * res;
|
||||
__m128 c_imag_vector = _mm_set1_ps(c_imag);
|
||||
|
||||
size_t x = 0;
|
||||
__m128 c_real_vector = _mm_setr_ps(c_start_real,c_start_real + 1.0f*res,c_start_real + 2.0f*res, c_start_real + 3.0f*res);
|
||||
for(; x < simd_width;x += 4) { //SIMD Loop
|
||||
float c_real = c_start_real + (x*res);
|
||||
__m128 c_real_vector = _mm_setr_ps(c_real,c_real+1.0f*res,c_real+2.0f*res,c_real+3.0f*res);
|
||||
|
||||
__m128 real = _mm_setzero_ps();
|
||||
__m128 imag = _mm_setzero_ps();
|
||||
__m128i iterations = _mm_setzero_si128();
|
||||
@@ -86,6 +88,7 @@ void tricorn_V0(float complex start, size_t width, ssize_t height, float res, un
|
||||
img[position + 2] = ((value*5) % 255);
|
||||
}
|
||||
}
|
||||
c_real_vector = _mm_add_ps(c_real_vector,_mm_set1_ps(four_res));
|
||||
}
|
||||
|
||||
for(;x < width; x++) {
|
||||
@@ -102,8 +105,10 @@ void tricorn_V0(float complex start, size_t width, ssize_t height, float res, un
|
||||
img[position + 1] = ((value*2) % 255);
|
||||
img[position + 2] = ((value*5) % 255);
|
||||
}
|
||||
c_real += res;
|
||||
}
|
||||
|
||||
c_imag -= vertical_step;
|
||||
c_imag_vector = _mm_sub_ps(c_imag_vector,vertical_step_vector);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user