I've been working with PCM 2.7 for the last few days on Windows and have noticed that while running the pcm utility I get memory bandwidth numbers back for machines with Windows server (2k8r2, 2012R2) but not for Windows client (win7 & win8.1) on the exact same hardware just different OS installs. Looking at the code (client_bw.cpp) there's no implementation for Windows client but this function must not be used across all Windows implementations since I get numbers back for server. At the very core Widows server and client are pretty close.
So before I start stepping through a bunch of code and possibly trying to write the client piece myself (probably a good learning experience for a guy that can barely spell c++) and maybe wasting a bunch of time. Does anyone know if there is a technical reason why memory bandwidth hasn't been implement for Windows client? Is there some blocking issue between client and server builds?
What are the different chips you are using? On Sandybridge & later clients, the memory bw hardware counters are in the uncore and aren't implemented in PCM (and there are some issues with the coutners... like non-temporal stores showing up as read memory bw). There is a MMIO api to get the bw on the clients but, if you are using the WinRing0 driver, the driver doesn't support MMIO. The PCM driver (that you have to build) supports MMIO registers.