网格处理中用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评估处理
复制代码
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
不欣赏这么干
不懂,友情帮顶。。。
不提倡也不禁止.
友情谢谢.