3 ms·
It is my understanding that it sits in between a GPU and a CPU in terms of "ideal work". Like a GPU it favours SIMD work, but it is better at dealing with branc
by Coding_Cat 12y ago
It is my understanding that it sits in between a GPU and a CPU in terms of "ideal work". Like a GPU it favours SIMD work, but it is better at dealing with branches and a lot of random memory accesses[1] (it still favours linear work of course). It also uses a more familiar architecture, leading Intel to claim it is easier to master than GPU-programing, but I personally disagree as x64 is already much more complex than GPUs.
In terms of FLOPS the FX-9590 is still significantly slower. I don't know the exact numbers, but it will be hundreds of MegaFlops, whereas the Phi runs at ~1 TFlop. In part because the cores are basically low-end (in-order) atoms with modules bolted on for HPC (avx-512 instructions, instructions for exponentiation for example).
Data transfer to the card is a lot slower than reading from ram, correct, but on the other hand once it is on the card it is a lot faster (wiki says the fastest Phi has 350 Gb/s, Corsair claims a maximum of 70 Gb/s for DDR4)[2].
So generally, as long as you have a decent ratio of work/memory access and your work is parallel you could use a Phi to speed things a long. You would want to use one in the same situations as were you'd want to use a GPU, and the Phi would be preferable if your computations and memory access patterns are nor perfectly homogeneous (e.g. branching which can't be rewritten), as this kills performance on GPUs.
[1] I'm pretty sure Intel claimed this, and it makes sense when you think about it, but I can't seem to find a source: Could someone confirm this?
[2] Do note that it 350Gb/s shared between the cores, not 350 Gb/s each.
- nkurz 12y agoas x64 is already much more complex than GPUs I'd be interested to hear about your experiences. By "more complex", do you mean the x64 instruction set itself, or the out-of-order superscalar processors that use it?
- Coding_Cat 12y agoBasically the whole package. The instruction set is pretty big, but this is not much of an issue as you generally just need a subset for a given problem (I generally only tweak SSE/AVX code) and it has a lot of if's and but's when it comes to performance, the out-of-order execution also adds a degree of uncertainty, branch prediction and prefetching, a complex(ish) cache... There is a lot of things one can fiddle with in order to improve performance. GPUs are much stricter in their design, which can lead to some headaches when having to completely change the way you formulate a problem, but once you're past that step, the simplicity of the architecture makes it a lot nicer to optimize in my opinion. (And my personal experience has been that the tools are cheaper (free) and more stable as well, but your mileage may vary).