Mercurial > hg > Members > kono > Cerium
diff TaskManager/Cell/CellTaskManagerImpl.cc @ 321:f64d75473f95
merge 317
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 10 Jun 2009 15:23:25 +0900 |
parents | 7efc5ede2c03 |
children | 20f2459041cb |
line wrap: on
line diff
--- a/TaskManager/Cell/CellTaskManagerImpl.cc Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Cell/CellTaskManagerImpl.cc Wed Jun 10 15:23:25 2009 +0900 @@ -1,3 +1,5 @@ +#define DEBUG +#include "error.h" #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -5,7 +7,6 @@ #include "CellBufferManager.h" #include "PpeScheduler.h" #include "types.h" -#include "error.h" CellTaskManagerImpl::~CellTaskManagerImpl(void) { @@ -13,8 +14,8 @@ delete [] speTaskList; delete [] speTaskList_bg; /** - * bufferManager は - * ppeManager のなかで delete してもらう + * bufferManager + * ppeManager delete */ // delete bufferManager; delete [] flag_sendTaskList; @@ -43,7 +44,7 @@ flag_sendTaskList[i] = 1; } - // PPE 側の管理をする Manager + // PPE 眼膊∞ Manager ppeManager = new FifoTaskManagerImpl(machineNum); ppeManager->init(new PpeScheduler, bufferManager); } @@ -61,22 +62,22 @@ } } -// SPE_ANY が指定されていた時に -// これをインクリメントしつつ呼ぶことにする。 -// 乱数使ってもいいけどさ。 +// SPE_ANY 絎 +// ゃ潟<潟ゃゅ若吟 +// 箙掩遺戎c int cur_anySpeid = 0; /** - * ActiveTaskQueue から Task を - * 各 SPE に渡す TaskList に入れる + * ActiveTaskQueue Task + * SPE 羝< TaskList ャ * - * ここの activeTaskQueue は FifoTaskManagerImpl のと意味が違い、 - * spe に渡される Task だけ入っている + * activeTaskQueue FifoTaskManagerImpl 潟 + * spe 羝< Task ャc */ void CellTaskManagerImpl::set_runTaskList(void) { - // ここ...直すかな + // ...眼 TaskListPtr list; TaskQueuePtr queue; TaskQueuePtr d; @@ -99,16 +100,16 @@ cur_anySpeid = (cur_anySpeid < machineNum) ? cur_anySpeid : 0; } else { - // -1 してるのは - // htask->cpu_type - CPU_SPE で - // SPE0 = 1, SPE1 = 2, ... SPE5 = 6 ってなってるので - // 配列的 (SPE0 = arr[0], SPE1 = arr[1]) にするため + // -1 + // htask->cpu_type - CPU_SPE + // SPE0 = 1, SPE1 = 2, ... SPE5 = 6 cc + // (SPE0 = arr[0], SPE1 = arr[1]) speid = htask->cpu_type - CPU_SPE - 1; - // SPU の数以上が指定されていれば - // とりあえず MAX_USE_SPE_NUM (実際に動く SPE の最大数) で - // あまり求めてそれを使うことにする。 - // ここで判定するもんでもないか? + // SPU 遺札筝絎 + // MAX_USE_SPE_NUM (絎 SPE 紊ф) + // 障羆篏帥 + // уゅс鐚 if (speid >= machineNum) { speid %= machineNum; } @@ -145,18 +146,18 @@ TaskListPtr ppeTaskList = NULL; MailQueuePtr ppeMail = NULL; - // PPE 側で動く TaskList です - // FifoTaskManagerImpl::run と上手く合うように - // こんなことやってますよ + // PPE 眼у TaskList с + // FifoTaskManagerImpl::run 筝 + // c障 ppeTaskList = ppeManager->get_runTaskList(); if (!ppeTaskList) { goto cont; } - // SPE からの Mailbox Check は - // PPE 側の schedule から抜けて来たときに行う - // (speThreads で Blocking Mailbox read と - // セマフォとか使ってやってもいいが、今はこの方式で) + // SPE Mailbox Check + // PPE 眼 schedule ャ茵 + // (speThreads Blocking Mailbox read + // 祉篏帥cc篁劫) do { ppeMail = ppeManager->schedule(ppeTaskList); cont: @@ -165,37 +166,37 @@ } /** - * SPE からのメールをチェックする + * SPE <若с * * @param [mail_list] - * PPE 側で動く Scheduler からのメールリスト - * この中で PPE 側の mail check も行う + * PPE 眼у Scheduler <若鴻 + * 筝 PPE 眼 mail check 茵 * - * @return PPE Scheduler に対してのメール。 - * 次に実行する TaskList のアドレスや、終了コマンドを送る + * @return PPE Scheduler 絲障<若 + * 罨<絎茵 TaskList ≪鴻腟篋潟潟 */TaskListPtr CellTaskManagerImpl::mail_check(MailQueuePtr mail_list) { - // PPE Scheduler からの mail check + // PPE Scheduler mail check ppeManager->mail_check(mail_list, &waitTaskQueue); do { unsigned int data; - // SPE Scheduler からの mail check + // SPE Scheduler mail check for (int id = 0; id < machineNum; id++) { while (speThreads->check_mail(id, 1, &data)) { /** - * MY_SPE_STATUS_READY: SPE が持ってた Task 全て終了 - * MY_SPE_NOP: 特に意味のないコマンド - * それ以外:終了したタスク(PPEにあるのでアドレス + * MY_SPE_STATUS_READY: SPE c Task 腟篋 + * MY_SPE_NOP: 鴻潟潟潟 + * 篁ュ鐚腟篋帥鴻(PPEс≪ * - * MY_SPE_NOP が 0 なので、 - * 下のように data > MY_SPE_NOP とかしています。 - * 一目でよくわからない書き方なんで、直したいところですが。。。 + * MY_SPE_NOP 0 с + * 筝 data > MY_SPE_NOP 障 + * 筝с吾鴻с眼с */ - // 名前あとでちゃんと決めよう => MY_SPE_... とかじゃなくて + // с<羆冴 => MY_SPE_... if (data == MY_SPE_STATUS_READY) { __debug_ppe("[SPE %d] finish\n", id); flag_sendTaskList[id] = 1; @@ -203,7 +204,7 @@ __debug_ppe("[PPE] MALLOC COMMAND from [SPE %d]\n", id); /** - * info[0] = alloc_id; (CellScheduler::mainMem_alloc 参照) + * info[0] = alloc_id; (CellScheduler::mainMem_alloc ) * info[1] = alloc_addr; */ unsigned int alloc_info[3]; @@ -217,10 +218,11 @@ alloc_info[1] = (unsigned int)allocate(alloc_size); /* - * allocate された領域は今の SPE buffer にリンクとして接続する - * ここでは TaskList を allocate(new) して登録してやろうか + * allocate 篁 SPE buffer 潟・膓 + * с TaskList allocate(new) 脂蚊 */ + __debug_ppe("[PPE] MALLOCED 0x%x from [SPE %d]\n", alloc_info[1],id); speThreads->add_output_tasklist(command, alloc_info[1], alloc_size); speThreads->send_mail(id, 2, alloc_info); @@ -231,37 +233,37 @@ } } - // 依存関係を満たしたタスクをアクティブに + // 箴絖≫羣帥鴻≪c wakeup_waitTask(); - // SPE に送る TaskList の準備 + // SPE TaskList 羣 set_runTaskList(); - // TaskList 待ちの SPE に TaskList を送る + // TaskList 緇< SPE TaskList for (int i = 0; i < machineNum; i++) { if (flag_sendTaskList[i] == 1 && speTaskList_bg[i]->length >= 1 ) { send_taskList(i); } } - // 現在の FifoTaskManager の仕様では - // ・PPE で実行するタスクが無くなれば終了する - // であり、この場合もし SPE にタスクが残っていても - // メインループから抜けてプログラム終了となってしまうので - // ここでストップかけてます。 + // 憜 FifoTaskManager 篁罕с + // PPE у茵帥鴻<亥篋 + // с翫 SPE 帥鴻罧c + // <ゃ潟若違腟篋c障 + // с鴻障 } while (!ppeManager->activeTaskQueue && waitTaskQueue); return ppeManager->get_runTaskList(); } /** - * 条件を満たしたら SPE に TaskList を送信する - * 条件1. SPE が持ってた TaskList を終了して、次の TaskList を待ってる - * 条件2. SPE に送る TaskList に Task がある + * >散羣 SPE TaskList 篆< + * >散1. SPE c TaskList 腟篋罨< TaskList 緇c + * >散2. SPE TaskList Task * - * SPE で実行終了した TaskList [speTaskList] と - * これから実行する TaskList [speTaskList_bg] のバッファを入れ替える - * ついでに実行終了したやつは clear しておく。 + * SPE у茵腟篋 TaskList [speTaskList] + * 絎茵 TaskList [speTaskList_bg] <ャ帥 + * ゃс絎茵腟篋ゃ clear */ void CellTaskManagerImpl::send_taskList(int id) @@ -286,7 +288,7 @@ posix_memalign(&buff, DEFAULT_ALIGNMENT, size); - // bzero はコストが高いのでやりたくない + // bzero 潟鴻蕭с bzero(buff, size); return buff;