Credits: Jos Stamhttp://www.dgp.toronto.edu/people/stam/reality/Research/pdf/GDC03.pdf
This project was a research project for the #node17 visuals and wasn't really aimed for production. It quite strictly reproduces the credited paper, since it mainly served as a reference for evaluating other algorithms and implementation attempts. The only deviations are the additional vorticity confinement routines, eliminating the restriction to a square and evenly spaced base grid, and using Jacobi instead of Gauss-Seidel solver in order to benefit from SIMD instructions.
The repo demonstrates one way how to take advantage of c++'s native speed (SSE instructions) in vvvv without the need for two separate dlls and interop.
https://github.com/woeishi/StableFluids for detailed info
all nodes come 2d and 3d versions
Nice! (And <3 for using GDI Renderer)
Red "Evaluate" node here and then it crashes within 20 seconds.
@io thats a bit unspecific. x64 and you processor must support avx extensions. wiki says intel processors since 2008 and amd 2011
This is a i7 Sandybridge with GTX 675xm, 64bit machine and latest 64bit vvvv
evaluate is red once you open the help patch? does tty say anything?
ah, might be incompatible with avx2 extensions. let me check, if i can compile with avx only
Red on open.
uploaded another version which should be compatible for older cpus. check the list though.
Ok working now thanks
on github you write you do this in c++ because it must be unmanaged for SSE/AVX.
Just for info you now this System.Numerics.Vectors?
It provides hardware-accelerated numeric types (SIMD), suitable for high-performance processing and graphics applications.
@kopffarben: yep, i know.
however numerics apply those instruction on vectors. which in this case is maximum 3. i do that on iteration which maxes to 8.
the cost of this algorithm is not really complicated arithmetics but just running a lot of loops over a lot of arrays. thus unmanaged outperformes .net quite a bit, since there is no boundschecking on array access.
cli would of course also optimize into simd instructions, but only for cases where you exactly loop from 0 to length-1 of the array. and that is nearly never the case here, due to special boundary conditions in the algorithm.
i've also got the same implementation in c# with all the performance optimizations i could think of. still didn't get near the speed of c++
anonymous user login