Comments (2)
Closing.
- The methods mentioned here would lead to a "naive SIMD" approach, which (according to various benchmarks around the web) is not always the right solution.
- Besides that, in my code I'm almost always using two- or three-component vectors, not four-component, thus the native approach of packing everything into
_m128
or the like is useless anyway. - Proper way to SIMD is to make larger functions processing larger chunks of data, not just a single matrix multiplication at a time.
- The compilers (in some cases) (might be able to) vectorize the code anyway.
- Keeping things simple and maintainable. Having five different matrix multiplication implementations which need to be tested for correctness, performance regressions, precision regressions etc. on dozed different obscure machines of varying release date and SDK qualities doesn't help with that. I have enough issues with GL alone :)
- If the user needs to process large amount of data and the CPU seems too slow for that, there is the GPU. This is also why this project exists :)
- If the user still wants to invert 400x400 matrices on the CPU, it's always possible to integrate another library such as Eigen with more features and better performance.
from magnum.
More things to consider:
- How about two- and three-component vectors? There are very few places in the engine where four-component vectors are really used (I can't think of anything else except
MeshTools::transform()
classes, which should have GPU implementation anyway). Don't know how to handle these efficiently, treating them as four-component vectors would be bad for memory performance (and computation performance won't me much better). - How about packing/unpacking SIMD vectors from/to floats? That will hurt memory performance even more, if not done properly. The compilers are already producing SSE-enabled x86 code when optimization is enabled (or at least my GCC on x86-64 does that with
-O2
, need to investigate if any additional flags are needed for other architectures), wouldn't be better to live with scalar code by default and do SIMD optimizations only for large functions where it's possible to use SOA instead of AOS (e.g. various bulk collision tests inShapes
namespace)?
Also worth reading: http://www.reedbeta.com/blog/2013/12/28/on-vector-math-libraries/
from magnum.
Related Issues (20)
- few compile warnings HOT 1
- How to point to a local installation of `corrade` without using the bootstrap project? HOT 3
- undefined symbol: flextGLInit HOT 4
- Image rendered in gray since 1847c72 HOT 18
- Emscripten 3.1.21+ crashes EmscriptenApplication: "AsciiToString is not defined" HOT 4
- How to build from source on MSYS2 MINGW64? HOT 1
- keyReleaseEvent not triggered after printscreen on OSX HOT 6
- Conversion from CubicHermite to Bezier is wrong
- Mixing with raw openGL calls and Context::current().resetState() HOT 3
- C Bindings HOT 5
- WebGPU backend HOT 2
- Parallel rendering with glb files HOT 5
- Conflict with near and far Macros When Including WinSock2.h After Matrix4.h HOT 2
- emsdk compile error: typedef redefinition with different types HOT 4
- Memory leak when destroying GL::Mesh HOT 3
- Linking in Emscripten >= 3.1.52 doesn't work HOT 4
- Some trouble with LineGL3D shader when camera is close HOT 1
- Segmentation fault with nullptr instruction in AbstractShaderProgram at Cross-Compile HOT 21
- Apply MAGNUM_BUILD_STATIC_UNIQUE_GLOBALS for the flextGL globals as well HOT 4
- EmscriptenApplication keyboard handler doesn't send key event corresponding to text input events HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from magnum.