view TaskManager/Cell/CellTaskManagerImpl.cc @ 66:1034077dd217

*** empty log message ***
author gongo
date Sun, 17 Feb 2008 18:29:08 +0900
parents 519d24aa7ac8
children 7d2874fb0671
line wrap: on
line source

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "CellTaskManagerImpl.h"
#include "CellBufferManager.h"
#include "types.h"
#include "error.h"

void
CellTaskManagerImpl::init(void)
{
    TaskManagerImpl::init();

    bufferManager = new CellBufferManager();
    bufferManager->init();

    speThreads = new SpeThreads(machineNum);
    speThreads->init();
}

/**
 * mail_list は ppe 側の mail なので、変更せず渡す。
 * その前に spe からのメールをチェックする
 */
MailQueuePtr
CellTaskManagerImpl::mail_check(MailQueuePtr mail_list)
{
    int id;
    int data;
    unsigned int send;

    for (id = 0; id < machineNum; id++) {
	while (1) {
	    data = speThreads->get_mail(id);
	    if (data < 0) break;

	    // 名前あとでちゃんと決めよう => MY_SPE_... とかじゃなくて
	    if (data == MY_SPE_STATUS_READY) {
		__debug_ppe("[SPE %d] finish\n", id);
	    } else {
		__debug_ppe("[PPE] recv from [SPE %d] : 0x%x\n", data, id);
		bufferManager->check_task_finish((HTaskPtr)data);
	    }

	    send = (unsigned int)id;
	    //テスト用
	    speThreads->send_mail(id, &send);
	}
    }

    return TaskManagerImpl::mail_check(mail_list);
}


TaskManagerImpl*
create_impl(int num)
{
    return new CellTaskManagerImpl();
}