Hi, I am trying to do dynamic voltage scaling within a experiment. This is a academic project and I am currently using a i7-4700MQ processor. I am able to change the "Dynamic CPU Voltage Offset" via Intel Extreme Tuning Utility and I know these tool also allows to set profiles. I also also measuring power using Intel Power Gadget 3. Now I can lower or raise the dynamic voltage using the Extreme Tuning tool manually but I want to change them within my program. Basically, I need to run my test program in regular voltage and then run the same program again where first half of the code runs in -100mV voltage offset and the rest 50% of the code in regular voltage. I don't need to control the frequency, I just want to change the voltage and measure and compare the two power measurements. As Intel Extreme Utility is able to do it, it is ofcourse possible, but since there is no API access to the Extreme Utility and I have read somewhere that Intel intentionally has not made available register information to control these voltage, my question is, is it possible to change the voltage within a custom program using publicly available information to perform this experiment or is there any Intel dev boards that will allow me to perform this experiment?
Have you tried contacting the authors of Intel XTU at the support link on the page http://www.intel.com/content/www/us/en/motherboards/desktop-motherboards/desktop-boards-software-ext...
I've never tried to mess with the voltages. Here is something you can try but you may damage your processor... try at your own risk. You could use XTU to set the system to some configurations you want and then read the MSR IA32_PERF_STATUS (0x198) to see what 'frequency and voltage' bits are set for each desired setting. Then you could try changing those same bits in the MSR IA32_PERF_CTL (0x199) with some MSR read/write utility and see if the change 'sticks' (by 'sticks' I mean does the system stay at the settings you used... or does the chip or OS change the values). You can check them by reading IA32_PERF_STATUS. It might be a good idea to make sure that, after XTU has set a frequency+voltage, then check that the freq+voltage bits don't change (over time) in IA32_PERF_STATUS even when you aren't messing them.
I sort of suspect that the system won't stay at the settings you apply but who knows...
On Linux I know to get the OS to stay at a certain frequency but I don't know the voltage bits encodings.
I don't know what XTU does but, it looks like it does ACPI, HECI and who knows what else.
Sorry to not be more helpful,
Thank you Patrick so so much! Even if it does not work, you have given a direction to proceed and I am grateful for that. I will also send an email to the XTU support email. Thanks again.
Hi Patrick, I can read the IA32_PERF_STATUS MSR and I can see changes when I use Intel Extreme Tuning Utility to the register (top bits change from 0x00001AE0 to 0x00002014). Unfortunately when I try MSR writing utility (CrystalCPUIDx64/RW-Everything) the changes don't stick. Also when I try the Extreme Utility support page it says they don't provide any support and suggests posting here in the forum. Any other way to contact the authors or any suggestion? Is it possible that the changes don't stick is because they need to be done I Kernel mode (I tired on Windows 8.1 OS)? Thanks
Just to be clear, you are writing the new values to IA32_PERF_CTL MSR and then checking that the values 'stick' by reading IA32_PERF_STATUS MSR right?
When you use XTU to make a change, does the new XTU values 'stick'?
If the change 'stick' when XTU makes the changes, if you then change IA32_PERF_CTL with RWeverything does your change stick?
You might need to set the windows power plan to 'max performance' before trying the changes.
It seems like setting the OS to max performance gets Windows to stop messing with the power settings.
Unfortunately I don't have a lot of other advice... this is not an area I'm very familiar with.