<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Little profiler in MASM in Developing Games on Intel Graphics</title>
    <link>https://community.intel.com/t5/Developing-Games-on-Intel/Little-profiler-in-MASM/m-p/794908#M127</link>
    <description>&lt;P&gt;Hello,Steve Hughes.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you, I've already read this article and hoped, that somebody more experienced in MSR programming can point me on my errors. So, now I'll more thoroughly study this driver.&lt;/P&gt;</description>
    <pubDate>Wed, 02 Mar 2011 15:19:28 GMT</pubDate>
    <dc:creator>rodionkarimov</dc:creator>
    <dc:date>2011-03-02T15:19:28Z</dc:date>
    <item>
      <title>Little profiler in MASM</title>
      <link>https://community.intel.com/t5/Developing-Games-on-Intel/Little-profiler-in-MASM/m-p/794904#M123</link>
      <description>&lt;P&gt;Hello.&lt;BR /&gt;&lt;BR /&gt; I don't know where to post, so I'll post here. I'm writing profiler in MASM, which I'll use in my games and other programs. I've made profiler as two parts system - one is ring 0 driver, written in MASM, which writes and reads MSRs. And other is front end in Free Pascal, which launches driver, configures it, sends commands on performance counters reads and unloads it.&lt;BR /&gt;&lt;BR /&gt; So now phase of errors in driver and reboots have been passed. Driver loads, configures MSRs' reads and writes, perform these reads and writes and unloads. But results, which it returns - very strange - for LLC misses there is very big number - of the same magnitude, as for "UnHalted Core Cycles", "UnHalted Reference Cycles" and "Instruction Retired" with slight differences. In attachment there are results, that program shows.&lt;BR /&gt;&lt;BR /&gt; So, I need some help, maybe I'm making some obvious mistakes. Here is MASM code of procedure DispatchControl, which handles all DeviceIoControl calls -&lt;BR /&gt;&lt;BR /&gt; &lt;BR /&gt;&lt;BR /&gt;DispatchControl proc uses esi edi pDeviceObject:PDEVICE_OBJECT, pIrp:PIRP&lt;BR /&gt;&lt;BR /&gt; ; DeviceIoControl was called&lt;BR /&gt; ; We are in user process context here&lt;BR /&gt;&lt;BR /&gt;local status:NTSTATUS&lt;BR /&gt;local dwBytesReturned:DWORD&lt;BR /&gt;&lt;BR /&gt; and dwBytesReturned, 0&lt;BR /&gt;&lt;BR /&gt; mov esi, pIrp&lt;BR /&gt; assume esi:ptr _IRP&lt;BR /&gt;&lt;BR /&gt; IoGetCurrentIrpStackLocation esi&lt;BR /&gt; mov edi, eax&lt;BR /&gt; assume edi:ptr IO_STACK_LOCATION&lt;BR /&gt;&lt;BR /&gt; push ebx&lt;BR /&gt;&lt;BR /&gt; mov ebx, [esi].AssociatedIrp.SystemBuffer&lt;BR /&gt;&lt;BR /&gt; .if [edi].Parameters.DeviceIoControl.OutputBufferLength &amp;gt;= sizeof PERFORMANCE&lt;BR /&gt;&lt;BR /&gt; .if [edi].Parameters.DeviceIoControl.IoControlCode == IOCTL_END_PC_READ&lt;BR /&gt;    &lt;BR /&gt; mov ecx, 38fh&lt;BR /&gt; mov eax, 00000000h&lt;BR /&gt; mov edx, 0h&lt;BR /&gt; wrmsr&lt;BR /&gt;&lt;BR /&gt; mov dwBytesReturned, sizeof PERFORMANCE&lt;BR /&gt; mov status, STATUS_SUCCESS&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;  .elseif [edi].Parameters.DeviceIoControl.IoControlCode == IOCTL_LLC_AND_BRANCH_MISS_READ   &lt;BR /&gt;&lt;BR /&gt; ;---LLC miss---------------------&lt;BR /&gt; mov ecx, 0c1h&lt;BR /&gt; rdmsr&lt;BR /&gt;&lt;BR /&gt; mov dword ptr [ ebx + 48 ], eax&lt;BR /&gt; mov dword ptr [ ebx + 52 ], edx&lt;BR /&gt;&lt;BR /&gt; ;---BranchMissesRetired----------&lt;BR /&gt; mov ecx, 0c2h&lt;BR /&gt; rdmsr&lt;BR /&gt;&lt;BR /&gt; mov dword ptr [ ebx + 64 ], eax&lt;BR /&gt; mov dword ptr [ ebx + 68 ], edx&lt;BR /&gt;&lt;BR /&gt; ;---Fixed function---------------&lt;BR /&gt;&lt;BR /&gt; ;---InstrRetired.Any-------------&lt;BR /&gt; mov ecx, 309h&lt;BR /&gt; rdmsr&lt;BR /&gt;&lt;BR /&gt; mov dword ptr [ ebx + 32 ], eax&lt;BR /&gt; mov dword ptr [ ebx + 36 ], edx&lt;BR /&gt;&lt;BR /&gt; ;---CPU_CLK_Unhalted.Core--------&lt;BR /&gt; mov ecx, 30ah&lt;BR /&gt; rdmsr&lt;BR /&gt;&lt;BR /&gt; mov dword ptr [ ebx + 16 ], eax&lt;BR /&gt; mov dword ptr [ ebx + 20 ], edx&lt;BR /&gt;&lt;BR /&gt; ;---CPU_CLK_Unhalted.Ref---------&lt;BR /&gt; mov ecx, 30bh&lt;BR /&gt; rdmsr&lt;BR /&gt;&lt;BR /&gt; mov dword ptr [ ebx + 24 ], eax&lt;BR /&gt; mov dword ptr [ ebx + 28 ], edx&lt;BR /&gt;&lt;BR /&gt; mov dwBytesReturned, sizeof PERFORMANCE&lt;BR /&gt; mov status, STATUS_SUCCESS&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;  .elseif [edi].Parameters.DeviceIoControl.IoControlCode == IOCTL_LLC_AND_BRANCH_MISS_CONFIGURE&lt;BR /&gt;&lt;BR /&gt; &lt;BR /&gt;&lt;BR /&gt; ;---Zeroing performance counters-&lt;BR /&gt; mov eax, 0&lt;BR /&gt; mov edx, 0&lt;BR /&gt;&lt;BR /&gt; mov ecx, 0c1h&lt;BR /&gt; wrmsr&lt;BR /&gt;&lt;BR /&gt; mov ecx, 0c2h&lt;BR /&gt; wrmsr&lt;BR /&gt;&lt;BR /&gt; ;---Fixed function---------------&lt;BR /&gt; mov ecx, 309h&lt;BR /&gt; wrmsr&lt;BR /&gt;&lt;BR /&gt; mov ecx, 30ah&lt;BR /&gt; wrmsr&lt;BR /&gt;&lt;BR /&gt; mov ecx, 30bh&lt;BR /&gt; wrmsr&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt; ;---Thread processor affinity----&lt;BR /&gt; invoke KeGetCurrentThread&lt;BR /&gt;&lt;BR /&gt; add ebx, 72&lt;BR /&gt;  invoke ZwSetInformationThread, eax, ThreadAffinityMask, DWORD ptr [ ebx ], sizeof KAFFINITY&lt;BR /&gt;&lt;BR /&gt; ;---LLC miss---------------------&lt;BR /&gt; mov ecx, 186h&lt;BR /&gt; mov eax, 41412eh&lt;BR /&gt; mov edx, 0&lt;BR /&gt;&lt;BR /&gt; wrmsr&lt;BR /&gt;&lt;BR /&gt; ;---BranchMissesRetired----------&lt;BR /&gt; mov ecx, 187h&lt;BR /&gt; mov eax, 4100c5h&lt;BR /&gt; mov edx, 0&lt;BR /&gt;&lt;BR /&gt; wrmsr&lt;BR /&gt;&lt;BR /&gt; ;---Fixed function---------------&lt;BR /&gt;&lt;BR /&gt; ;---MSR_PERF_FIXED_CTR_CTRL------&lt;BR /&gt; mov ecx, 38dh&lt;BR /&gt; mov eax, 222h&lt;BR /&gt; mov edx, 0&lt;BR /&gt; wrmsr&lt;BR /&gt;&lt;BR /&gt; ;---MSR_PERF_GLOBAL_CTRL---------&lt;BR /&gt; mov ecx, 38fh&lt;BR /&gt; mov eax, 00000011h&lt;BR /&gt; mov edx, 7h&lt;BR /&gt; wrmsr&lt;BR /&gt;&lt;BR /&gt; mov dwBytesReturned, sizeof PERFORMANCE&lt;BR /&gt; mov status, STATUS_SUCCESS&lt;BR /&gt;   &lt;BR /&gt;&lt;BR /&gt;   &lt;BR /&gt; .else&lt;BR /&gt; mov status, STATUS_INVALID_DEVICE_REQUEST&lt;BR /&gt; .endif&lt;BR /&gt;&lt;BR /&gt; .else&lt;BR /&gt; mov status, STATUS_BUFFER_TOO_SMALL&lt;BR /&gt; .endif&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt; ;---Returning from procedure---------------------&lt;BR /&gt; pop ebx&lt;BR /&gt;&lt;BR /&gt; assume edi:nothing&lt;BR /&gt;&lt;BR /&gt; push status&lt;BR /&gt; pop [esi].IoStatus.Status&lt;BR /&gt;&lt;BR /&gt; push dwBytesReturned&lt;BR /&gt; pop [esi].IoStatus.Information&lt;BR /&gt;&lt;BR /&gt; assume esi:nothing&lt;BR /&gt;&lt;BR /&gt; fastcall IofCompleteRequest, esi, IO_NO_INCREMENT&lt;BR /&gt;&lt;BR /&gt; mov eax, status&lt;BR /&gt; ret&lt;BR /&gt;&lt;BR /&gt;DispatchControl endp&lt;BR /&gt;&lt;BR /&gt; &lt;BR /&gt;&lt;BR /&gt; &lt;BR /&gt;&lt;BR /&gt;Structure, in which driver writes results is of this type -&lt;BR /&gt;&lt;BR /&gt; &lt;BR /&gt;&lt;BR /&gt; &lt;BR /&gt;&lt;BR /&gt;PERFORMANCE STRUCT&lt;BR /&gt; tscEAX DWORD ?&lt;BR /&gt; tscEDX DWORD ?&lt;BR /&gt;&lt;BR /&gt; RD_MSR_tscEAX DWORD ?&lt;BR /&gt; RD_MSR_tscEDX DWORD ?&lt;BR /&gt;&lt;BR /&gt; UnHaltedCoreCycles QWORD ?&lt;BR /&gt; UnHaltedReferenceCycles QWORD ?&lt;BR /&gt;&lt;BR /&gt; InstructionRetired QWORD ?&lt;BR /&gt;&lt;BR /&gt; LLCReference QWORD ?&lt;BR /&gt; LLCMiss QWORD ?&lt;BR /&gt;&lt;BR /&gt; BranchInstructionRetired QWORD ?&lt;BR /&gt; BranchMissesRetired QWORD ?&lt;BR /&gt;&lt;BR /&gt; ProcessorCore DWORD ?&lt;BR /&gt;&lt;BR /&gt;PERFORMANCE ENDS&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt; &lt;BR /&gt;&lt;BR /&gt;And IOCtl constants are so -&lt;BR /&gt;&lt;BR /&gt; &lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;IOCTL_CACHE_MISS_READ equ CTL_CODE ( FILE_DEVICE_UNKNOWN, 801h, METHOD_BUFFERED, FILE_READ_ACCESS )&lt;BR /&gt;IOCTL_BRANCH_MISSPRED_READ equ CTL_CODE ( FILE_DEVICE_UNKNOWN, 802h, METHOD_BUFFERED, FILE_READ_ACCESS )&lt;BR /&gt;IOCTL_LLC_AND_BRANCH_MISS_READ equ CTL_CODE ( FILE_DEVICE_UNKNOWN, 803h, METHOD_BUFFERED, FILE_READ_ACCESS )&lt;BR /&gt;&lt;BR /&gt;IOCTL_END_PC_READ equ CTL_CODE ( FILE_DEVICE_UNKNOWN, 804h, METHOD_BUFFERED, FILE_READ_ACCESS )&lt;BR /&gt;&lt;BR /&gt;IOCTL_CACHE_MISS_CONFIGURE equ CTL_CODE ( FILE_DEVICE_UNKNOWN, 805h, METHOD_BUFFERED, FILE_READ_ACCESS )&lt;BR /&gt;IOCTL_BRANCH_MISSPRED_CONFIGURE equ CTL_CODE ( FILE_DEVICE_UNKNOWN, 806h, METHOD_BUFFERED, FILE_READ_ACCESS )&lt;BR /&gt;IOCTL_LLC_AND_BRANCH_MISS_CONFIGURE equ CTL_CODE ( FILE_DEVICE_UNKNOWN, 807h, METHOD_BUFFERED, FILE_READ_ACCESS )&lt;BR /&gt;&lt;BR /&gt; &lt;BR /&gt;&lt;BR /&gt; &lt;BR /&gt;&lt;BR /&gt;Now Free Pascal code, that interacts with driver, is so -&lt;BR /&gt;&lt;BR /&gt; &lt;BR /&gt;&lt;BR /&gt; &lt;BR /&gt;&lt;BR /&gt;ZeroMemory ( @ BBefore, SizeOf ( TPerformanceData ) );&lt;BR /&gt; BBefore.ProcessorCore := CORE_TO_WORK_ON;&lt;BR /&gt;&lt;BR /&gt; ZeroMemory ( @ BAfter, SizeOf ( TPerformanceData ) );&lt;BR /&gt;&lt;BR /&gt;  Status := DeviceIoControl ( hDevice, CtlCode ( FILE_DEVICE_UNKNOWN, FUNCTION_LLC_AND_BRANCH_MISS_CONFIGURE, METHOD_BUFFERED, FILE_READ_ACCESS ), nil, 0, @ BBefore, SIZE_OF_BUFFER * 4, @ BytesReturned, nil );  &lt;BR /&gt;&lt;BR /&gt; Status := DeviceIoControl ( hDevice, CtlCode ( FILE_DEVICE_UNKNOWN, FUNCTION_LLC_AND_BRANCH_MISS_READ, METHOD_BUFFERED, FILE_READ_ACCESS ), nil, 0, @ BBefore, SIZE_OF_BUFFER * 4, @ BytesReturned, nil );&lt;BR /&gt;&lt;BR /&gt; for i := 0 to 10000 do if TempCardinal div 3 &amp;gt; 100 then TempCardinal := TempCardinal shr 1&lt;BR /&gt; else TempCardinal := TempCardinal + i div 5;&lt;BR /&gt;&lt;BR /&gt;  Status := DeviceIoControl ( hDevice, CtlCode ( FILE_DEVICE_UNKNOWN, FUNCTION_LLC_AND_BRANCH_MISS_READ, METHOD_BUFFERED, FILE_READ_ACCESS ), nil, 0, @ BAfter, SIZE_OF_BUFFER * 4, @ BytesReturned, nil );  &lt;BR /&gt;&lt;BR /&gt;  Status := DeviceIoControl ( hDevice, CtlCode ( FILE_DEVICE_UNKNOWN, FUNCTION_END_PC_READ, METHOD_BUFFERED, FILE_READ_ACCESS ), nil, 0, @ BAfter, SIZE_OF_BUFFER * 4, @ BytesReturned, nil );  &lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt; //---Showing results-----------------------------------&lt;BR /&gt; ShowMessage ( 'UnHalted Core Cycles - ' + IntToStr ( BAfter.UnHaltedCoreCycles - BBefore.UnHaltedCoreCycles ) + #13#13 +&lt;BR /&gt; 'UnHalted Reference Cycles - ' + IntToStr ( BAfter.UnHaltedReferenceCycles - BBefore.UnHaltedReferenceCycles ) + #13#13 +&lt;BR /&gt; 'Instruction Retired - ' + IntToStr ( BAfter.InstructionRetired - BBefore.InstructionRetired ) + #13#13 +&lt;BR /&gt;&lt;BR /&gt; 'LLC miss - ' + IntToStr ( BAfter.LLCMiss - BBefore.LLCMiss ) + #13#13 +&lt;BR /&gt; 'Branch Misses Retired - ' + IntToStr ( BAfter.BranchMissesRetired - BBefore.BranchMissesRetired ) );&lt;BR /&gt;&lt;BR /&gt; &lt;BR /&gt;&lt;BR /&gt; &lt;BR /&gt;&lt;BR /&gt;Structure, which is used to interact with driver is so -&lt;BR /&gt;&lt;BR /&gt; &lt;BR /&gt;&lt;BR /&gt; &lt;BR /&gt;&lt;BR /&gt;TPerformanceData = record&lt;BR /&gt; tscEAX, tscEDX : Cardinal;&lt;BR /&gt; RD_MSR_tscEAX, RD_MSR_tscEDX : Cardinal; // 8&lt;BR /&gt;&lt;BR /&gt; UnHaltedCoreCycles : QWORD; // 00 3c - 16&lt;BR /&gt; UnHaltedReferenceCycles : QWORD; // 01 3c - 24&lt;BR /&gt;&lt;BR /&gt; InstructionRetired : QWORD; // 00 c0 - 32&lt;BR /&gt;&lt;BR /&gt; LLCReference : QWORD; // 4f 2e - 40&lt;BR /&gt; LLCMiss : QWORD; // 41 2e - 48&lt;BR /&gt;&lt;BR /&gt; BranchInstructionRetired : QWORD; // 00 c4 - 56&lt;BR /&gt; BranchMissesRetired : QWORD; // 00 c5 - 64&lt;BR /&gt;&lt;BR /&gt; ProcessorCore : Cardinal; // 72&lt;BR /&gt;&lt;BR /&gt; end;&lt;BR /&gt;&lt;BR /&gt; &lt;BR /&gt;&lt;BR /&gt; &lt;BR /&gt;&lt;BR /&gt;Constants, that are used to create IOCtlCodes, are so -&lt;BR /&gt;&lt;BR /&gt; &lt;BR /&gt;&lt;BR /&gt; &lt;BR /&gt;&lt;BR /&gt;FUNCTION_CACHE_MISS_READ = $801;&lt;BR /&gt; FUNCTION_BRANCH_MISSPRED_READ = $802;&lt;BR /&gt; FUNCTION_LLC_AND_BRANCH_MISS_READ = $803;&lt;BR /&gt;&lt;BR /&gt; FUNCTION_END_PC_READ = $804;&lt;BR /&gt;&lt;BR /&gt; FUNCTION_CACHE_MISS_CONFIGURE = $805;&lt;BR /&gt; FUNCTION_BRANCH_MISSPRED_CONFIGURE = $806;&lt;BR /&gt; FUNCTION_LLC_AND_BRANCH_MISS_CONFIGURE = $807;&lt;BR /&gt;&lt;BR /&gt; &lt;BR /&gt;&lt;BR /&gt; &lt;BR /&gt;&lt;BR /&gt;So, I install and run driver as service - everything is correct, and I checked, that all calls to DeviceIoControl are properly handled by driver. In the beginning I attach frontend and driver to the same core, using constant CORE_TO_WORK_ON, which equals 0. Driver reads this value from field ProcessorCore in record TPerformanceData.&lt;BR /&gt;&lt;BR /&gt; &lt;BR /&gt;&lt;BR /&gt;I work in Windows 7 and my processor is E5200. So, if somebody have experience or sees any errors - please help me. I'll be very grateful to you.&lt;/P&gt;</description>
      <pubDate>Thu, 24 Feb 2011 11:09:26 GMT</pubDate>
      <guid>https://community.intel.com/t5/Developing-Games-on-Intel/Little-profiler-in-MASM/m-p/794904#M123</guid>
      <dc:creator>rodionkarimov</dc:creator>
      <dc:date>2011-02-24T11:09:26Z</dc:date>
    </item>
    <item>
      <title>Little profiler in MASM</title>
      <link>https://community.intel.com/t5/Developing-Games-on-Intel/Little-profiler-in-MASM/m-p/794905#M124</link>
      <description>Hi rodionkarimov&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Writing a profiler is quite an undertaking, I'm trying to find an expert who can help you out. &lt;BR /&gt;&lt;BR /&gt;In the mean time, have you considered looking at any of theprofilers we have?AmplifierXE springs to mind, or maybe look round whatif.intel.com - Performance Tuning Utility (PTU) might be right up your street.&lt;BR /&gt;&lt;BR /&gt;If you used one ofour profilersyou would be free to write the games you wanted to profile?&lt;BR /&gt;&lt;BR /&gt;Regards&lt;BR /&gt;&lt;BR /&gt;Steve</description>
      <pubDate>Fri, 25 Feb 2011 14:20:31 GMT</pubDate>
      <guid>https://community.intel.com/t5/Developing-Games-on-Intel/Little-profiler-in-MASM/m-p/794905#M124</guid>
      <dc:creator>Stephen_H_Intel</dc:creator>
      <dc:date>2011-02-25T14:20:31Z</dc:date>
    </item>
    <item>
      <title>Little profiler in MASM</title>
      <link>https://community.intel.com/t5/Developing-Games-on-Intel/Little-profiler-in-MASM/m-p/794906#M125</link>
      <description>&lt;P&gt;&amp;gt; Writing a profiler is quite an undertaking.&lt;/P&gt;&lt;P&gt;I'm writing simple profiler, it is targeted only on my CPU with Architectural Performance Counters and, at beginning, it will measure only simple parameters, like LLC and branch mispredictions.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Profilers, that you offer, cost money, but I have now not to much, to buy them. And besides - I have such a feeling, that I almost completed profiler. Plus my own profiler is more flexible - I can use it in any way and in any place. And it is very good work for education.&lt;/P&gt;</description>
      <pubDate>Fri, 25 Feb 2011 16:08:48 GMT</pubDate>
      <guid>https://community.intel.com/t5/Developing-Games-on-Intel/Little-profiler-in-MASM/m-p/794906#M125</guid>
      <dc:creator>rodionkarimov</dc:creator>
      <dc:date>2011-02-25T16:08:48Z</dc:date>
    </item>
    <item>
      <title>Little profiler in MASM</title>
      <link>https://community.intel.com/t5/Developing-Games-on-Intel/Little-profiler-in-MASM/m-p/794907#M126</link>
      <description>Hi Rodionkarimov&lt;BR /&gt;&lt;BR /&gt;You will find quite a lot of useful information about setting up counters here &lt;A href="http://software.intel.com/en-us/articles/intel-performance-counter-monitor/"&gt;http://software.intel.com/en-us/articles/intel-performance-counter-monitor/&lt;/A&gt; &lt;BR /&gt;&lt;BR /&gt;There is also example driver source code and lots of other useful information too. &lt;BR /&gt;&lt;BR /&gt;I hope this helps.&lt;BR /&gt;&lt;BR /&gt;Regards&lt;BR /&gt;&lt;BR /&gt;Steve</description>
      <pubDate>Wed, 02 Mar 2011 12:13:20 GMT</pubDate>
      <guid>https://community.intel.com/t5/Developing-Games-on-Intel/Little-profiler-in-MASM/m-p/794907#M126</guid>
      <dc:creator>Stephen_H_Intel</dc:creator>
      <dc:date>2011-03-02T12:13:20Z</dc:date>
    </item>
    <item>
      <title>Little profiler in MASM</title>
      <link>https://community.intel.com/t5/Developing-Games-on-Intel/Little-profiler-in-MASM/m-p/794908#M127</link>
      <description>&lt;P&gt;Hello,Steve Hughes.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you, I've already read this article and hoped, that somebody more experienced in MSR programming can point me on my errors. So, now I'll more thoroughly study this driver.&lt;/P&gt;</description>
      <pubDate>Wed, 02 Mar 2011 15:19:28 GMT</pubDate>
      <guid>https://community.intel.com/t5/Developing-Games-on-Intel/Little-profiler-in-MASM/m-p/794908#M127</guid>
      <dc:creator>rodionkarimov</dc:creator>
      <dc:date>2011-03-02T15:19:28Z</dc:date>
    </item>
  </channel>
</rss>

