view example/many_task/spe/SpeProfile.cc @ 674:07351a5a51c9 draft

fix many task example (sort). Dummy task is now system supported.
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 06 Dec 2009 00:54:10 +0900
parents 768452fab95e
children
line wrap: on
line source

/**
 * SPU Decrementerを用いた処理時間計測
 */

#include "SpeProfile.h"
/* DMA転送に関する関数を使用するために必要なインクルードファイル */
#include <spu_intrinsics.h>
#include <stdio.h>

/* SPU Decrementerの初期値 */
#define SPU_DECREMENTER_INITIAL_VALUE 0x7FFFFFFFU

SpeProfile::SpeProfile(void): profile(0) {}

void SpeProfile::ProfStart(void)
{
    /* SPU Decrementerに初期値を設定 */
    spu_writech(SPU_WrDec, SPU_DECREMENTER_INITIAL_VALUE);

    /* 計測開始時間をSPU Decrementerから読み取る */
    profile = spu_readch(SPU_RdDec);    
}

void SpeProfile::ProfStop(void)
{
    /* 計測終了時間をSPU Decrementerから読み取り, 計測開始時間との差を計算 */
    profile -= spu_readch(SPU_RdDec);    
}

void SpeProfile::ProfPrint(void)
{
    /* 処理時間を出力 */
    printf("SPE time by SPU Decrementer: %f\n",
	   profile / 79800000.0f * 1000.0f);
}