Mercurial > hg > Members > kono > Cerium
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(); }