Mercurial > hg > Members > kono > Cerium
diff TaskManager/Cell/CellTaskManagerImpl.cc @ 629:8843edf37c0e
Cell 64 bit tried, but not yet worked.
Cell's list DMA is 32bit.
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 18 Nov 2009 13:32:58 +0900 |
parents | 5b178db5988a |
children | 8cc609285bbe |
line wrap: on
line diff
--- a/TaskManager/Cell/CellTaskManagerImpl.cc Tue Nov 17 01:35:12 2009 +0900 +++ b/TaskManager/Cell/CellTaskManagerImpl.cc Wed Nov 18 13:32:58 2009 +0900 @@ -123,18 +123,9 @@ } task = &list->tasks[list->length++]; -#if 0 - task->command = htask->command; - task->inData = htask->inData; - task->outData = htask->outData; - task->self = (unsigned int)htask; -#else - memcpy(task, (Task*)htask, sizeof(Task)); -#endif - - // activeTaskQueue->free_(queue); + TaskPtr stask = (TaskPtr) task; + *stask = *(TaskPtr) htask; } - } void @@ -178,12 +169,11 @@ ppeManager->mail_check(mail_list, waitTaskQueue); do { - unsigned int data; + memaddr data; // 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: 特に意味のないコマンド @@ -194,36 +184,39 @@ * 一目でよくわからない書き方なんで、直したいところですが。。。 */ // 名前あとでちゃんと決めよう => MY_SPE_... とかじゃなくて - if (data == MY_SPE_STATUS_READY) { + if (data == (memaddr)MY_SPE_STATUS_READY) { //__debug_ppe("[SPE %d] finish\n", id); flag_sendTaskList[id] = 1; - } else if (data == MY_SPE_COMMAND_MALLOC) { + } else if (data == (memaddr)MY_SPE_COMMAND_MALLOC) { //__debug_ppe("[PPE] MALLOC COMMAND from [SPE %d]\n", id); /** * info[0] = alloc_id; (CellScheduler::mainMem_alloc 参照) * info[1] = alloc_addr; */ - unsigned int alloc_info[3]; - int alloc_size; - int command; + memaddr alloc_info[2]; + long alloc_size; + long command; speThreads->get_mail(id, 2, alloc_info); - command = alloc_info[0]; - alloc_size = alloc_info[1]; + command = (long)alloc_info[0]; + alloc_size = (long)alloc_info[1]; - alloc_info[1] = (unsigned int)allocate(alloc_size); + alloc_info[1] = (memaddr)allocate(alloc_size); /* * allocate された領域は今の SPE buffer にリンクとして接続する * ここでは TaskList を allocate(new) して登録してやろうか */ - //__debug_ppe("[PPE] MALLOCED 0x%x from [SPE %d]\n", alloc_info[1],id); + //__debug_ppe("[PPE] MALLOCED 0x%lx from [SPE %d]\n", alloc_info[1],id); + // 今のところ何もしてない。どうも、この allocate を free + // するのは、SPE task が返した値を見て行うらしい。それは、 + // 忘れやすいのではないか? speThreads->add_output_tasklist(command, alloc_info[1], alloc_size); speThreads->send_mail(id, 2, alloc_info); - } else if (data > MY_SPE_NOP) { + } else if (data > (memaddr)MY_SPE_NOP) { //__debug_ppe("[PPE] recv from [SPE %d] : 0x%x\n", id, data); HTaskPtr task = (HTaskPtr)data; task->post_func(schedTaskManager, task->post_arg1, task->post_arg2); @@ -275,8 +268,7 @@ taskListImpl->clear_taskList(speTaskList_bg[id]); - //speThreads->send_mail(id, 1, (unsigned int *)&speTaskList[id]); - speThreads->send_mail(id, 1, (unsigned int *)&speTaskList[id]); + speThreads->send_mail(id, 1, (memaddr *)&speTaskList[id]); flag_sendTaskList[id] = 0; }