system888net 发表于 2008-07-12 22:47

网格处理中用CPU特定指令进行评估的一个方法

多CPU 的网格处理当中,要相对实时地对每段CPU局部运行的代码进行运行性能的评估记录,通常是调用OS API的做法,比较通用. 但若是特定条件下,则可以利用CPU本身的特点进行更高效的评估记录. 如下是一个例子:



//这个例子里用了X86 Pentinum CPU 的RDTSC指令
//RDTSC 指令是用来获取CPU内部的64bit 时间戳记数器的值timestamp.
//RDTSC 运行后EDX放timestamp高32bit值,EAX放timestamp低32bit值
//实际应用时要注意RDTSC本身也有执行时间.

unsigned long rdtsc_high0,rdtsc_low0;
unsigned long rdtsc_high1,rdtsc_low1;

unsigned long total_high,total_low;

__asm {
   RDTSC;
   mov rdtsc_high0,edx;
   mov rdtsc_low0,eax;
}


.......//执行的网格任务代码
__asm {
   RDTSC;
   mov rdtsc_high1,edx;
   mov rdtsc_low1,eax;
}

if(rdtsc_high1>=rdtsc_high0)
{
   __asm {
       mov eax,rdtsc_low1;
       sub eax,rdtsc_low0;
       cmp eax,0;
       jg next1;
       neg eax;
   next1:
       mov total_low,eax;
       mov eax,rdtsc_high1;
       sub eax,rdtsc_high0;
       mov total_high,eax;
   }
}
else
{
   ......//归零处理
}

......//依据total_high,total_low评估处理

cjaizss 发表于 2008-07-13 02:29

不欣赏这么干

chenyx 发表于 2008-07-13 07:27

不懂,友情帮顶。。。

system888net 发表于 2008-08-24 02:44

原帖由 cjaizss 于 2008-7-13 02:29 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
不欣赏这么干
:)   不提倡也不禁止.

system888net 发表于 2008-08-24 02:45

原帖由 chenyx 于 2008-7-13 07:27 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
不懂,友情帮顶。。。
:) 友情谢谢.
页: [1]
查看完整版本: 网格处理中用CPU特定指令进行评估的一个方法