SHARC汇编编程---emuclk,cmuclk2

Ref EE-141 Note

emuclk,cmuclk2时汇编指令中的时钟寄存器,主要功能是测试一段代码运行时间,然后对代码进行优化。

emuclk会随着每一条指令的运行而增长,不会受cache的丢失、延时等影响,当emuclk=0时,cmuclk2自动加一。

在使用它们的时候,主要是用下面的两个宏:

#define CYCLE_COUNT_START( cntr ) asm("r0 = emuclk; %0 = r0;": \

                                                                        "=k" (cntr):"d" (cntr): \

                                                                        "r0")

#define CYCLE_COUNT_STOP( cntr ) asm("r0 = emuclk; r1 = %1; r2 = 4; \

                                                                       r0 = r0 - r2; r0 = r0 - r1; %0 = r0;" : \

                                                                      "=k" (cntr) : \

                                                                       "d" (cntr) : "r0", "r1")

下面是一个demo:

#include <stdio.h> 

/* Cycle Count Example Code */

/* Infamous cycle count macros */

#define CYCLE_COUNT_START( cntr ) asm("r0 = emuclk; %0 = r0;": \

                                                                        "=k" (cntr):"d" (cntr): \

                                                                        "r0")

#define CYCLE_COUNT_STOP( cntr ) asm("r0 = emuclk; r1 = %1; r2 = 4; \

                                                                       r0 = r0 - r2; r0 = r0 - r1; %0 = r0;" : \

                                                                      "=k" (cntr) : \

                                                                       "d" (cntr) : "r0", "r1")

// test vectors

float dm Vector_A[256];

float pm Vector_B[256];

float dm Vector_C[256];

 

int cnt0; // does not have to be global

main() {

int i;

// read contents of EMUCLK and store in cnt0

CYCLE_COUNT_START(cnt0);

// perform loop

for (i=0; i<256;i++) {

Vector_C[i] = Vector_A[i] * Vector_B[i];

}

// calculate total number of cycles and store result in cnt0

CYCLE_COUNT_STOP(cnt0);

// print the results of the benchmark

printf("The cycle count for vector multiplication execution was %d cycles.\n",cnt0);

printf("The cycle count for each vector element was %f.\n",((float)cnt0*(1.0/256.0)));

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值