Using a GPU is much more complex, because it has a separate memory space and you have to copy arrays back and forth. It's easy to lose all your performance gains if you get the array allocation wrong.
Using a GPU is much more complex, because it has a separate memory space and you have to copy arrays back and forth. It's easy to lose all your performance gains if you get the array allocation wrong.
If you're using it in standalone mode then keep in mind that every part of code that is not using AVX runs on slow Atom-like CPU. You have to vectorize code yourself or find a library that did that for you.
Neither of above is close to "recompile good old X86 and run".
Obviously if your code is completely serial (and arguably bad), you have a lot of work ahead of you. Whereas, if you have been taking advantage of AVX already (or relying on libraries that do), you are basically just going to need to recompile.
Are you going to get peak on a KNL? God no. But if it runs well on a "normal" processor, it is likely to run pretty well on the KNL. Which is a MUCH better foundation to start from than if you are trying to port a code to a GPU
And those tweaks you make to better utilize that KNL? It will probably improve normal perf as well.
It is obviously not as simple as the marketing led us to believe, but it never is. GPUs are a load of toss without a lot of work (and often some creative presentations). But the underlying principle of "Use the same code on both types of processor" does actually hold true as of KNL.
As for performance numbers: Check the presentations from SC as they become available. Multiple outlets have begun to publish, or at least present, these numbers and their experiences using KNLs. I would personally argue that we still have a long way to go, but there is actually light at the end of the tunnel and it does look like there is an actual path now.