small optimizations for performance
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit
This commit is contained in:
parent
c96113133d
commit
4010b2beb7
@ -25,15 +25,33 @@ void fluid_grid2_addDensity(
|
|||||||
){
|
){
|
||||||
int i;
|
int i;
|
||||||
int size=DIM*DIM*DIM;
|
int size=DIM*DIM*DIM;
|
||||||
|
__m256 minVec = _mm256_set1_ps(MIN_FLUID_VALUE);
|
||||||
|
__m256 maxVec = _mm256_set1_ps(MAX_FLUID_VALUE);
|
||||||
|
__m256 existing;
|
||||||
|
__m256 delta;
|
||||||
float * x = GET_ARR_RAW(d,CENTER_LOC);
|
float * x = GET_ARR_RAW(d,CENTER_LOC);
|
||||||
float * s = GET_ARR_RAW(d0,CENTER_LOC);
|
float * s = GET_ARR_RAW(d0,CENTER_LOC);
|
||||||
for(i=0; i<size; i++){
|
for(i=0; i<size; i=i+8){
|
||||||
x[i] += dt*s[i];
|
existing = _mm256_loadu_ps(&x[i]);
|
||||||
if(x[i] < MIN_FLUID_VALUE){
|
delta = _mm256_loadu_ps(&s[i]);
|
||||||
x[i] = MIN_FLUID_VALUE;
|
_mm256_storeu_ps(&x[i],
|
||||||
} else if(x[i] > MAX_FLUID_VALUE){
|
_mm256_max_ps(
|
||||||
x[i] = MAX_FLUID_VALUE;
|
_mm256_min_ps(
|
||||||
}
|
_mm256_add_ps(
|
||||||
|
existing,
|
||||||
|
delta
|
||||||
|
),
|
||||||
|
maxVec
|
||||||
|
),
|
||||||
|
minVec
|
||||||
|
)
|
||||||
|
);
|
||||||
|
// x[i] += dt*s[i];
|
||||||
|
// if(x[i] < MIN_FLUID_VALUE){
|
||||||
|
// x[i] = MIN_FLUID_VALUE;
|
||||||
|
// } else if(x[i] > MAX_FLUID_VALUE){
|
||||||
|
// x[i] = MAX_FLUID_VALUE;
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -91,17 +91,17 @@ LIBRARY_API void fluid_grid2_simulate(
|
|||||||
|
|
||||||
//solve vector diffusion
|
//solve vector diffusion
|
||||||
fluid_grid2_solveVectorDiffuse(currentChunk->u,currentChunk->v,currentChunk->w,currentChunk->u0,currentChunk->v0,currentChunk->w0,timestep);
|
fluid_grid2_solveVectorDiffuse(currentChunk->u,currentChunk->v,currentChunk->w,currentChunk->u0,currentChunk->v0,currentChunk->w0,timestep);
|
||||||
}
|
// }
|
||||||
|
|
||||||
//time tracking
|
// //time tracking
|
||||||
gettimeofday(&tv,NULL);
|
// gettimeofday(&tv,NULL);
|
||||||
end = 1000000.0 * tv.tv_sec + tv.tv_usec;
|
// end = 1000000.0 * tv.tv_sec + tv.tv_usec;
|
||||||
perMilli = (end - start) / 1000.0f;
|
// perMilli = (end - start) / 1000.0f;
|
||||||
environment->state.timeTracking.velocityDiffuse = perMilli;
|
// environment->state.timeTracking.velocityDiffuse = perMilli;
|
||||||
start = end;
|
// start = end;
|
||||||
|
|
||||||
for(int i = 0; i < numChunks; i++){
|
// for(int i = 0; i < numChunks; i++){
|
||||||
Chunk * currentChunk = chunks[i];
|
// Chunk * currentChunk = chunks[i];
|
||||||
//setup projection
|
//setup projection
|
||||||
fluid_grid2_setupProjection(currentChunk->u,currentChunk->v,currentChunk->w,currentChunk->u0,currentChunk->v0,timestep);
|
fluid_grid2_setupProjection(currentChunk->u,currentChunk->v,currentChunk->w,currentChunk->u0,currentChunk->v0,timestep);
|
||||||
|
|
||||||
@ -116,31 +116,31 @@ LIBRARY_API void fluid_grid2_simulate(
|
|||||||
fluid_grid2_flip_arrays(currentChunk->u,currentChunk->u0);
|
fluid_grid2_flip_arrays(currentChunk->u,currentChunk->u0);
|
||||||
fluid_grid2_flip_arrays(currentChunk->v,currentChunk->v0);
|
fluid_grid2_flip_arrays(currentChunk->v,currentChunk->v0);
|
||||||
fluid_grid2_flip_arrays(currentChunk->w,currentChunk->w0);
|
fluid_grid2_flip_arrays(currentChunk->w,currentChunk->w0);
|
||||||
}
|
// }
|
||||||
|
|
||||||
//time tracking
|
// //time tracking
|
||||||
gettimeofday(&tv,NULL);
|
// gettimeofday(&tv,NULL);
|
||||||
end = 1000000.0 * tv.tv_sec + tv.tv_usec;
|
// end = 1000000.0 * tv.tv_sec + tv.tv_usec;
|
||||||
perMilli = (end - start) / 1000.0f;
|
// perMilli = (end - start) / 1000.0f;
|
||||||
environment->state.timeTracking.velocityProject = perMilli;
|
// environment->state.timeTracking.velocityProject = perMilli;
|
||||||
start = end;
|
// start = end;
|
||||||
|
|
||||||
for(int i = 0; i < numChunks; i++){
|
// for(int i = 0; i < numChunks; i++){
|
||||||
Chunk * currentChunk = chunks[i];
|
// Chunk * currentChunk = chunks[i];
|
||||||
//advect
|
//advect
|
||||||
fluid_grid2_advectVectors(currentChunk->u,currentChunk->v,currentChunk->w,currentChunk->u0,currentChunk->v0,currentChunk->w0,timestep);
|
fluid_grid2_advectVectors(currentChunk->u,currentChunk->v,currentChunk->w,currentChunk->u0,currentChunk->v0,currentChunk->w0,timestep);
|
||||||
|
|
||||||
}
|
// }
|
||||||
|
|
||||||
//time tracking
|
// //time tracking
|
||||||
gettimeofday(&tv,NULL);
|
// gettimeofday(&tv,NULL);
|
||||||
end = 1000000.0 * tv.tv_sec + tv.tv_usec;
|
// end = 1000000.0 * tv.tv_sec + tv.tv_usec;
|
||||||
perMilli = (end - start) / 1000.0f;
|
// perMilli = (end - start) / 1000.0f;
|
||||||
environment->state.timeTracking.velocityAdvect = perMilli;
|
// environment->state.timeTracking.velocityAdvect = perMilli;
|
||||||
start = end;
|
// start = end;
|
||||||
|
|
||||||
for(int i = 0; i < numChunks; i++){
|
// for(int i = 0; i < numChunks; i++){
|
||||||
Chunk * currentChunk = chunks[i];
|
// Chunk * currentChunk = chunks[i];
|
||||||
//setup projection
|
//setup projection
|
||||||
fluid_grid2_setupProjection(currentChunk->u,currentChunk->v,currentChunk->w,currentChunk->u0,currentChunk->v0,timestep);
|
fluid_grid2_setupProjection(currentChunk->u,currentChunk->v,currentChunk->w,currentChunk->u0,currentChunk->v0,timestep);
|
||||||
//Perform main projection solver
|
//Perform main projection solver
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user