Finally, I figured out the problem that had plagued me since buying a new computer.
In some games (Neverwinter nights 1/2; SW: KoToR 1/2; WarCraft 3; Avatar) the graphics jumped as if most of the frames were being skipped, time went too fast in Bully - the hour of playing time flew in a couple of seconds (the minute hand on the clock did not even reach 10 minutes and the time went an hour ahead).
In 2007 I thought about firewood, changed them, updated DirectX - zero emotion. In 2008, I thought on Windows, reinstalled - everything remained as before. In 2009, I installed a video card, but I already installed the third one, and still the result is ZERO, although the same computer worked normally for the previous computer (of those that started up with 256 MB of RAM). The only glitch in the computer besides the jumping graphics was only in the tracerte and ping.exe -
sometimes abnormally large numbers of ms (more than a billion) and even
negative ones were issued. Since ping, in my opinion, was in no way connected with graphics, I did not think that the cause of the glitches was in the same place.
Cause
It turned out that the reason for the synchronization curve of multi-core systems with AMD processors, while Cool'n'Quiet is on. Here is my code that gave excellent results.
uses windows, SysUtils;
var
Frequency, lpPerformanceCount1, lpPerformanceCount2, k:Int64;
{$apptype console}
begin
QueryPerformanceFrequency(Frequency);
writeln(Frequency);
writeln('Looking for a bug');
while true do begin
k:=0;
repeat
QueryPerformanceCounter(lpPerformanceCount1);
QueryPerformanceCounter(lpPerformanceCount2);
inc(k);
until lpPerformanceCount1>lpPerformanceCount2;
writeln(TimeToStr(now),': A bug found!');
writeln(k,': ',IntToStr(lpPerformanceCount2 - lpPerformanceCount1));
end ;
end .
QueryPerformanceCounter is based on the
rdtsc processor instruction and writes to the argument passed the number of ticks since the last reset of the processor. In other words, this function cannot produce less result if it was launched later, just as the clock cannot show the next second a second earlier. Naturally, this code can not reach the “found” line, but it
reaches . Here is such a time paradox. This small program was launched on my computer, on another dual-core AMD, in a virtual machine (where
one core AMD system was emulated), on an Intel dual-core. The error popped up only on my and other 2-core AMD. I also checked the operation of this program in compatibility mode - in some games in Win98 / WinME compatibility mode, the acceleration glitches disappeared, but the tracert and ping do not start up - until found in my program also did not reach.
')
Decision
Three solutions:
- Install the driver on the processor . My program stopped reaching “found”, in ping / tracerte numbers of less than 1 millisecond / more than billion milliseconds were not issued, in games the graphics finally became normal.
- Disable Cool'n'Quiet.
- Through the Task Manager forcefully prohibit the use of the necessary programs more than one core.
By the way, the AMD installer mows down and writes extra parameters in boot.ini. In order for the system to run on the “default” boot.ini settings, you had to remove it from the “Boot Loader” section (but NOT from “Operating Systems”)
/ usepmtimer . Although there may be a unique incompatibility for my computer.
TimTowdy suggests that it was already
a year ago .