From e895c8302ea0f89a8a2040157d0f36e6ea978864 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Tue, 11 Jun 2013 09:14:39 +0000 Subject: Use OpenMP threads in bm_loop_interp_mdisps Gives approx 2x speedup on my laptop on such operations as mesh subdivision in edit mode. Desktops with fancier CPUs could benefit even more. Thanks Campbell for review! --- source/blender/bmesh/intern/bmesh_interp.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/source/blender/bmesh/intern/bmesh_interp.c b/source/blender/bmesh/intern/bmesh_interp.c index bf7bfc1123c..9c85a4fc4e5 100644 --- a/source/blender/bmesh/intern/bmesh_interp.c +++ b/source/blender/bmesh/intern/bmesh_interp.c @@ -432,10 +432,8 @@ static void bm_loop_flip_disp(float source_axis_x[3], float source_axis_y[3], static void bm_loop_interp_mdisps(BMesh *bm, BMLoop *target, BMFace *source) { MDisps *mdisps; - BMLoop *l_iter; - BMLoop *l_first; - float x, y, d, v1[3], v2[3], v3[3], v4[3] = {0.0f, 0.0f, 0.0f}, e1[3], e2[3]; - int ix, iy, res; + float d, v1[3], v2[3], v3[3], v4[3] = {0.0f, 0.0f, 0.0f}, e1[3], e2[3]; + int ix, res; float axis_x[3], axis_y[3]; /* ignore 2-edged faces */ @@ -467,10 +465,15 @@ static void bm_loop_interp_mdisps(BMesh *bm, BMLoop *target, BMFace *source) res = (int)sqrt(mdisps->totdisp); d = 1.0f / (float)(res - 1); - for (x = 0.0f, ix = 0; ix < res; x += d, ix++) { + #pragma omp parallel for if(res > 3) + for (ix = 0; ix < res; ix++) { + float x = d * ix, y; + int iy; for (y = 0.0f, iy = 0; iy < res; y += d, iy++) { + BMLoop *l_iter; + BMLoop *l_first; float co1[3], co2[3], co[3]; - + copy_v3_v3(co1, e1); mul_v3_fl(co1, y); -- cgit v1.2.3