Let's say each CPU socket has 43 GB/s of bandwidth through its four memory channels. Let's say I have a dual socket system. A reduction operation should achieve performance of 86 GB/s, but it doesn't. It will still only achieve up to 43 GB/s. Why is that and is there anything in Intel's OpenCL implementation for CPUs that can fix that?
How could I fix that outside of OpenCL?
Arik Narkis (Intel) wrote:
Can you please check if the following helps?
This method improves bandwidth performance substantially (by >1.8x). It actually achieves 90+% of the platform bandwidth for my code rather than the ~50% of peak bandwidth I had the other day. I'm a bit surprised it actually worked. I'd like to test it on a four or eight socket system now, but I'll have to find one.
Knowing this now makes life more difficult for OpenCL developers with bandwidth-bound kernels on multi-socket nodes. Thanks a lot, Arik!