The prototype seeks to create a highly parallel environment, in which many components (such as rendering, layout, HTML parsing, image decoding, etc.) are handled by fine-grained, isolated tasks. Source code for the project is written in the Rust programming language.
There are some "hidden" usages as well. Java/C# virtual machines can generate AVX code automatically. Also there is plenty of AVX code in GPU drivers, even if you are not gaming, Windows desktop is using some of SSE/AVX codepath's in graphic's drivers.
CPU export what instructions they support, so SW can get that information and use what is available at runtime.What happens if AVX is not supported by the processor?
Are you sure that vanilla Adobe products can use AVX? I agree that you can write custom plugins for them that use AVX, but I can't seem to find any documentation that talks about AVX support.Any application which uses Intel IPP / Intel MKL.
Any application which uses OpenBLAS, Apple Acceleration Library, Eigen.
Most of the Signal / Image Video Processing Filters (And Image and Video Compression libraries).
Compression utilities.
So we got something like:
I can go on and even be more specific.
- Adobe Photoshop.
- Adobe After Effects.
- Adobe Premiere.
- Photoshop / After Effects / Premiere Plug In's.
- PeaZip / 7 Zip / WinRar.
- x264 / FFMPEG.
- Excel.
- MATLAB / Octave / Python (Numpy, Scipy, TensorFlow, etc...).
- Julia.
- Numeric Libraries (Used intensively in many applications).
It is much easier to vectorize code than to parallelize it.
Hence advancement like AVX & AVX2 are welcome.
Pay attention that what needed to support efficient vectorization is localization of the data.
Hence we need CPU's with larger and faster (Or same speed to the least) cache system.
We also need more bandwidth for the Main Memory system.
Reading this makes me think Adobe uses AVX in Lightroom: https://feedback.photoshop.com/photoshop_family/topics/lightroom-changes-to-processor-supportAre you sure that vanilla Adobe products can use AVX? I agree that you can write custom plugins for them that use AVX, but I can't seem to find any documentation that talks about AVX support.
I wouldn't be surprised if GPU drivers were using AVX. But it remains to be seen if that'd make a differenceSo essentially, the average user who primarily games has no need for AVX at present.
By that do you mean games or CUDA/OpenCL-accelerated apps?I wouldn't be surprised if GPU drivers were using AVX.
I was thinking of graphics, but as I wrote I didn't find any AVX instruction in Nvidia OpenGL stack, only SSE ones.By that do you mean games or CUDA/OpenCL-accelerated apps?
I was thinking of graphics, but as I wrote I didn't find any AVX instruction in Nvidia OpenGL stack, only SSE ones.
Don't know whether you consider PhysX a common desktop app, but it uses AVX for cloth simulation. And if I were a betting man, I would say that NVidia would use AVX2 for the CPU version of Flex whenever it is released, as it will use much more advanced physics effects like smoke and fluid simulation.
It is much easier to vectorize code than to parallelize it.
Hence advancement like AVX & AVX2 are welcome.
Pay attention that what needed to support efficient vectorization is localization of the data.
Hence we need CPU's with larger and faster (Or same speed to the least) cache system.
We also need more bandwidth for the Main Memory system.
Tomshardware did an article a few years back on PhysX.
They found that PhysX on CPU/Non-Nvidia GPU used x87 instructions. x87 is ancient, and much slower than even SSE2.
Edit: http://www.tomshardware.com/reviews/nvidia-physx-hack-amd-radeon,2764-5.html
Alsom this was checked by David Kanter
Forget this article, it doesn't use x87 instructions anymore since Physx 3 in 2011.
My understanding is that without effective scatter and gather operations its still very hard for a compiler to auto vectorize code outside of the "obvious". Given AVX and AVX2 lack scatter+gather and the ability of the average code monkey its little wonder why we only see limited cases of benefit.