diff --git a/shared-folder/libfluidsim.dll b/shared-folder/libfluidsim.dll deleted file mode 100644 index ae966ff..0000000 Binary files a/shared-folder/libfluidsim.dll and /dev/null differ diff --git a/src/main/c/compile.sh b/src/main/c/compile.sh index a64a457..819c3af 100644 --- a/src/main/c/compile.sh +++ b/src/main/c/compile.sh @@ -40,7 +40,7 @@ rm -f ./*.dll #compile object files -COMPILE_FLAGS="-c -fPIC -m64" +COMPILE_FLAGS="-c -fPIC -m64 -mavx -mavx2" INPUT_FILES="./fluidsim.c" OUTPUT_FILE="./fluidsim.o" gcc $COMPILE_FLAGS -I"$BASE_INCLUDE_DIR" -I"$OS_INCLUDE_DIR" $INPUT_FILES -o $OUTPUT_FILE diff --git a/src/main/c/fluidsim.c b/src/main/c/fluidsim.c index 2ec4474..e7189ee 100644 --- a/src/main/c/fluidsim.c +++ b/src/main/c/fluidsim.c @@ -1,6 +1,6 @@ #include #include - +#include #define SWAP(x0,x) {float *tmp=x0;x0=x;x=tmp;} @@ -128,7 +128,7 @@ void advect(int N, int b, float * d, float * d0, float * u, float * v, float * w void dens_step(int N, float * x, float * x0, float * u, float * v, float * w, float diff, float dt){ - // add_source ( N, x, x0, dt ); + add_source(N, x, x0, dt); SWAP(x0, x); diffuse(N, 0, x, x0, diff, dt); SWAP(x0, x); @@ -155,6 +155,8 @@ void vel_step(int N, float * u, float * v, float * w, float * u0, float * v0, fl project(N, u, v, w, u0, v0); } +float container[16]; + void project(int N, float * u, float * v, float * w, float * p, float * div){ int i, j, k; @@ -168,11 +170,65 @@ void project(int N, float * u, float * v, float * w, float * p, float * div){ lin_solve(N, 0, p, div, 1, 6); - for ( i=1 ; i 0.0f){ + // // printf("%f, %f\n",x[IX(i,j,2)],x0[IX(i,j,2)]); + // // } + // //vectorize solve as many as can be packed into vector ops + // //because we're operating on the innermost loop, guaranteed that k is align memory wise for all offsets + // for(i=2; i+8 0.0f){ + // // printf("%f, %f\n",x[IX(i,j,2)],x0[IX(i,j,2)]); + // // } + // for(int n = 2; n