# HG changeset patch # User Shinji KONO # Date 1244041597 -32400 # Node ID f872cc000fe0b9cd8c848213acc79a6778881d75 # Parent bbc2375153d7a9de72762add67da45299da74dc8# Parent 64b57b4ba9e2aebfe566e7adc30f296456a97c43 merge diff -r 64b57b4ba9e2 -r f872cc000fe0 Document/Cerium_2009.mm --- a/Document/Cerium_2009.mm Wed Jun 03 22:14:20 2009 +0900 +++ b/Document/Cerium_2009.mm Thu Jun 04 00:06:37 2009 +0900 @@ -13,9 +13,16 @@ +<<<<<<< local + +======= +>>>>>>> other +<<<<<<< local +======= +>>>>>>> other diff -r 64b57b4ba9e2 -r f872cc000fe0 TAGS --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TAGS Thu Jun 04 00:06:37 2009 +0900 @@ -0,0 +1,344 @@ + +Renderer/Cell/Engine.h,22 +class CellEngine 1,0 + +Renderer/Cell/SceneGraph2PolygonTask.h,34 +class SceneGraph2PolygonTask 1,0 + +Renderer/DataPack/DataPackEngine.h,26 +class DataPackEngine 1,0 + +Renderer/Simple/SimpleEngine.h,24 +class SimpleEngine 1,0 + +TaskManager/Cell/CellBufferManager.cc,30 +CellBufferManager::init(6,94 + +TaskManager/Cell/CellHTaskInfo.cc,33 +CellHTaskInfo::extend_pool(6,71 + +TaskManager/Cell/CellTaskListInfo.cc,61 +#define NEXT_ADDR(5,70 +CellTaskListInfo::extend_pool(9,147 + +TaskManager/Cell/CellTaskManagerImpl.cc,388 +CellTaskManagerImpl::~CellTaskManagerImpl(10,188 +CellTaskManagerImpl::init(26,497 +CellTaskManagerImpl::append_activeTask(52,1213 +int cur_anySpeid 67,1612 +CellTaskManagerImpl::set_runTaskList(77,1822 +CellTaskManagerImpl::run(143,3358 +CellTaskManagerImpl::mail_check(177,4277 +CellTaskManagerImpl::send_taskList(258,6705 +CellTaskManagerImpl::allocate(274,7038 +create_impl(287,7242 + +TaskManager/Cell/PpeScheduler.cc,29 +PpeScheduler::allocate(6,73 + +TaskManager/Cell/SpeThreads.cc,258 +SpeThreads::SpeThreads(5,64 +SpeThreads::~SpeThreads(7,115 +SpeThreads::spe_thread_run(32,579 +SpeThreads::frontend_thread_run(65,1738 +SpeThreads::init(79,2028 +SpeThreads::get_mail(120,2877 +SpeThreads::check_mail(127,3073 +SpeThreads::send_mail(151,3716 + +TaskManager/kernel/main.cc,109 +defaultTMend(11,193 +TaskManager *manager;manager13,216 +static char help_str[help_str14,238 +main(20,374 + +include/TaskManager/BufferManager.h,104 +#define INCLUDED_BUFFER_MANAGER2,32 +class BufferManager 20,316 +private:BufferManager::private51,965 + +include/TaskManager/CellBufferManager.h,141 +#define INCLUDED_CELL_BUFFER_MANAGER2,37 +class CellBufferManager 12,197 + CellBufferManager(CellBufferManager::CellBufferManager14,254 + +include/TaskManager/CellDmaManager.h,219 +#define INCLUDED_CELL_DMA_MANAGER2,34 +#define SPU_PROFILE 14,209 +class CellDmaManager 16,232 + typedef struct dma_list CellDmaManager::dma_list20,321 + } DmaList, *DmaListPtr;CellDmaManager::DmaListPtr23,379 + +include/TaskManager/CellHTaskInfo.h,65 +#define INCLUDED_CELL_HTASK_INFO2,33 +class CellHTaskInfo 8,128 + +include/TaskManager/CellScheduler.h,65 +#define INCLUDED_CELL_SCHEDULER2,32 +class CellScheduler 12,178 + +include/TaskManager/CellTaskInfo.h,64 +#define INCLUDED_CELL_TASK_INFO2,32 +class CellTaskInfo 12,177 + +include/TaskManager/CellTaskListInfo.h,72 +#define INCLUDED_CELL_TASK_LIST_INFO2,37 +class CellTaskListInfo 8,143 + +include/TaskManager/CellTaskManagerImpl.h,212 +#define INCLUDED_CELL_TASK_MANAGER_IMPL2,40 +class CellTaskManagerImpl 16,301 + CellTaskManagerImpl(CellTaskManagerImpl::CellTaskManagerImpl19,384 +#undef Cerium_malloc47,1009 +#define Cerium_malloc(50,1038 + +include/TaskManager/DmaBuffer.h,56 +#define INCLUDED_DMA_BUFFER2,28 +class DmaBuffer 8,110 + +include/TaskManager/DmaManager.h,681 +#define INCLUDED_DMA_MANAGER2,29 +enum dma_tag 16,224 + DMA_READ 17,239 + DMA_WRITE 18,259 + DMA_READ_IN_LIST 19,279 + DMA_READ_OUT_LIST 20,307 + DMA_READ_TASKLIST 21,335 +class DmaManager 24,367 + virtual ~DmaManager(DmaManager::~DmaManager26,394 + virtual void dma_load(DmaManager::dma_load31,491 + virtual void dma_store(DmaManager::dma_store32,570 + virtual void dma_wait(DmaManager::dma_wait33,649 + virtual void mail_write(DmaManager::mail_write36,736 + virtual uint32 mail_read(DmaManager::mail_read37,780 + virtual void dma_loadList(DmaManager::dma_loadList40,869 + virtual void dma_storeList(DmaManager::dma_storeList41,940 + +include/TaskManager/HTask.h,105 +#define INCLUDED_HTASK2,23 +class HTask 22,296 +#define wait_for 39,743 +typedef HTask* HTaskPtr;42,775 + +include/TaskManager/HTaskInfo.h,91 +#define INCLUDED_HTASK_INFO2,28 +class HTaskInfo 8,109 +private:HTaskInfo::private28,477 + +include/TaskManager/ListData.h,235 +#define INCLUDED_LIST_DATA2,27 +#define MAX_LIST_DMA_SIZE 8,108 +class ListElement 10,137 +typedef ListElement* ListElementPtr;18,241 +class ListData 20,279 + void clear(ListData::clear30,584 +typedef ListData* ListDataPtr;36,641 + +include/TaskManager/MailManager.h,139 +#define INCLUDED_MAIL_MANAGER2,30 +typedef struct mail_queue 4,61 +} MailQueue, *MailQueuePtr;MailQueuePtr7,141 +class MailManager 9,170 + +include/TaskManager/MainScheduler.h,122 +#define INCLUDED_MAIN_SCHEDULER2,32 +class MainScheduler 12,190 + ~MainScheduler(MainScheduler::~MainScheduler14,239 + +include/TaskManager/PpeScheduler.h,62 +#define INCLUDED_PPE_SCHEDULER2,31 +class PpeScheduler 8,132 + +include/TaskManager/Random.h,92 +#define INCLUDED_RANDOM2,24 +class Random 4,49 +typedef Random *RandomPtr;RandomPtr13,171 + +include/TaskManager/SchedExit.h,57 +#define INCLUDED_SCHED_EXIT2,28 +class SchedExit 16,240 + +include/TaskManager/SchedMail.h,173 +#define INCLUDED_SCHED_MAIL2,28 +class SchedMail 18,260 + void read(SchedMail::read33,555 + void exec(SchedMail::exec34,623 + void write(SchedMail::write35,691 + +include/TaskManager/SchedNop.h,55 +#define INCLUDED_SCHED_NOP2,27 +class SchedNop 18,258 + +include/TaskManager/SchedNop2Ready.h,155 +#define INCLUDED_SCHED_NOP2READY2,33 +class SchedNop2Ready 22,329 + void read(SchedNop2Ready::read37,625 + void write(SchedNop2Ready::write38,698 + +include/TaskManager/SchedTask.h,1596 +#define INCLUDED_SCHED_TASK2,28 +class SchedTask 25,361 + virtual int run(SchedTask::run90,2190 + class STaskManager SchedTask::STaskManager146,3708 + STaskManager(SchedTask::STaskManager::STaskManager148,3745 + int get_cpuid(SchedTask::STaskManager::get_cpuid156,3850 + void* get_input(SchedTask::STaskManager::get_input160,3910 + void* get_output(SchedTask::STaskManager::get_output164,3999 + uint32 get_inputAddr(SchedTask::STaskManager::get_inputAddr168,4091 + uint32 get_outputAddr(SchedTask::STaskManager::get_outputAddr172,4171 + uint32 get_inputSize(SchedTask::STaskManager::get_inputSize176,4253 + uint32 get_outputSize(SchedTask::STaskManager::get_outputSize180,4333 + int get_param(SchedTask::STaskManager::get_param184,4415 + TaskPtr create_task(SchedTask::STaskManager::create_task188,4484 + void wait_task(SchedTask::STaskManager::wait_task192,4557 + void* global_alloc(SchedTask::STaskManager::global_alloc196,4631 + void* global_get(SchedTask::STaskManager::global_get200,4718 + void global_free(SchedTask::STaskManager::global_free204,4785 + void mainMem_alloc(SchedTask::STaskManager::mainMem_alloc208,4846 + void mainMem_wait(SchedTask::STaskManager::mainMem_wait212,4927 + void* mainMem_get(SchedTask::STaskManager::mainMem_get216,4986 + void *allocate(SchedTask::STaskManager::allocate220,5055 + void dma_load(SchedTask::STaskManager::dma_load224,5122 + void dma_store(SchedTask::STaskManager::dma_store228,5238 + void dma_wait(SchedTask::STaskManager::dma_wait232,5355 +const int SCHED_TASK_NORMAL 240,5456 +const int SCHED_TASK_RENEW 241,5489 + +include/TaskManager/SchedTaskBase.h,448 +#define INCLUDED_SCHED_TASK_BASE2,33 +class SchedTaskBase 14,198 + SchedTaskBase(SchedTaskBase::SchedTaskBase17,250 + virtual ~SchedTaskBase(SchedTaskBase::~SchedTaskBase18,277 + virtual void load(SchedTaskBase::load23,378 + virtual void read(SchedTaskBase::read24,410 + virtual void exec(SchedTaskBase::exec25,442 + virtual void write(SchedTaskBase::write26,474 + virtual SchedTaskBase* next(SchedTaskBase::next29,527 + +include/TaskManager/SchedTaskList.h,230 +#define INCLUDED_SCHED_TASKLIST2,32 +class SchedTaskList 18,268 + void exec(SchedTaskList::exec39,709 + void write(SchedTaskList::write40,781 +const int SCHED_TASKLIST_NORMAL 45,865 +const int SCHED_TASKLIST_RENEW 46,902 + +include/TaskManager/Scheduler.h,667 +#define INCLUDED_SCHEDULER2,27 +#define MAX_USER_TASK 36,549 +#define MAX_SYSTEM_TASK 37,574 +#define MAX_TASK_OBJECT 38,600 +#define MAX_GLOBAL_AREA 39,656 +#define MAX_MAINMEM_AREA 40,683 +class Scheduler 46,772 + typedef SchedTask* (*TaskObject)Scheduler::TaskObject113,2567 + virtual void init_impl(Scheduler::init_impl125,2802 + virtual void *allocate(Scheduler::allocate152,3685 + virtual void mainMem_alloc(Scheduler::mainMem_alloc154,3741 + virtual void mainMem_wait(Scheduler::mainMem_wait155,3794 +#define SchedConstructor(172,4323 +#define SchedDefineTask(176,4418 +#define SchedExternTask(182,4547 +#define SchedRegisterTask(186,4643 + +include/TaskManager/SpeThreads.h,131 +#define INCLUDED_SPE_THREADS2,29 +#define SPE_ELF 7,102 +typedef struct arg 9,130 +} thread_arg_t;12,193 +class SpeThreads 14,210 + +include/TaskManager/SymTable.h,244 +#define INCLUDED_SYMTABLE2,26 +#define SYM_MAX_SIZE 4,53 +class SymTable 6,78 + typedef int (*FuncObject)SymTable::FuncObject10,125 + typedef struct sym_table SymTable::sym_table12,172 + } SymTb, *SymTbPtr;SymTable::SymTbPtr15,238 + +include/TaskManager/Task.h,158 +#define INCLUDED_TASK2,22 +#define MAX_PARAMS 16,209 +class Task 18,231 +#define add_inData(37,741 +#define add_outData(39,824 +typedef Task* TaskPtr;43,913 + +include/TaskManager/TaskGroup.h,140 +#define INCLUDED_TASK_GROUP2,28 +class TaskGroup 12,171 + TaskGroup(TaskGroup::TaskGroup14,197 +typedef TaskGroup* TaskGroupPtr;39,746 + +include/TaskManager/TaskList.h,122 +#define INCLUDED_TASKLIST2,26 +#define TASK_MAX_SIZE 13,197 +class TaskList 15,223 +typedef TaskList* TaskListPtr;27,466 + +include/TaskManager/TaskListInfo.h,102 +#define INCLUDED_TASK_LIST_INFO2,32 +class TaskListInfo 12,175 +private:TaskListInfo::private33,630 + +include/TaskManager/TaskManager.h,61 +#define INCLUDED_TASK_MANAGER2,30 +class TaskManager 12,189 + +include/TaskManager/TaskManagerImpl.h,141 +#define INCLUDED_TASK_MANAGER_IMPL2,35 +class TaskManagerImpl 16,264 + virtual ~TaskManagerImpl(TaskManagerImpl::~TaskManagerImpl20,352 + +include/TaskManager/TaskQueue.h,97 +#define INCLUDED_TASK_QUEUE2,28 +class TaskQueue 14,180 +typedef TaskQueue* TaskQueuePtr;26,384 + +include/TaskManager/TaskQueueInfo.h,65 +#define INCLUDED_TASK_QUEUE_INFO2,33 +class TaskQueueInfo 8,128 + +include/TaskManager/base.h,65 +# define BASE_NEW_DELETE(8,79 +# define BASE_NEW_DELETE(23,795 + +include/TaskManager/error.h,169 +# define __debug(3,34 +# define __debug(7,132 +# define __debug_ppe(12,202 +# define __debug_ppe(16,312 +# define __debug_spe(21,386 +# define __debug_ppe(25,496 + +include/TaskManager/types.h,794 +#define INCLUDED_TYPES2,23 +typedef uint32_t uint32;6,68 +typedef uint64_t uint64;7,93 +#define SPE_ALIGNMENT 9,119 +#define SPE_ALIGNMENT_FULL 10,144 +#define SPE_ALIGN 11,175 +#define SPE_ALIGN_FULL 12,233 +#define ROUND_UP_ALIGN(13,300 +#define DEFAULT_ALIGNMENT 15,398 +#define DMA_MAX_SIZE 18,486 +#define round_up16(20,514 +#define round_up128(21,567 + MY_SPE_NOP 27,710 + MY_SPE_COMMAND_EXIT,28,730 + MY_SPE_COMMAND_GO,29,755 + MY_SPE_STATUS_BUSY,32,793 + MY_SPE_STATUS_READY,33,817 + MY_SPE_COMMAND_MALLOC,34,842 +#define MAX_USE_SPE_NUM 37,873 + CPU_PPE 40,915 + CPU_SPE 41,943 + SPE_ANY 42,960 + SPE_ANY = CPU_SPE,42,960 + SPE_0 43,983 + SPE_1 44,998 + SPE_2 45,1013 + SPE_3 46,1028 + SPE_4 47,1043 + SPE_5 48,1058 +} CPU_TYPE;49,1073 diff -r 64b57b4ba9e2 -r f872cc000fe0 TaskManager/Cell/CellTaskManagerImpl.cc --- a/TaskManager/Cell/CellTaskManagerImpl.cc Wed Jun 03 22:14:20 2009 +0900 +++ b/TaskManager/Cell/CellTaskManagerImpl.cc Thu Jun 04 00:06:37 2009 +0900 @@ -221,8 +221,7 @@ * ¤ŗ¤ŗ¤Į¤Ī TaskList ¤ō allocate(new) ¤ˇ¤ÆÅĐĪŋ¤ˇ¤Æ¤ä¤í¤Ļ¤Ģ */ - speThreads->add_output_tasklist(command, alloc_info[1], alloc_size); - + speThreads->add_output_tasklist(command, &alloc_info[1], alloc_size); speThreads->send_mail(id, 2, alloc_info); } else if (data > MY_SPE_NOP) { __debug_ppe("[PPE] recv from [SPE %d] : 0x%x\n", id, data); diff -r 64b57b4ba9e2 -r f872cc000fe0 TaskManager/Cell/spe/CellDmaManager.cc --- a/TaskManager/Cell/spe/CellDmaManager.cc Wed Jun 03 22:14:20 2009 +0900 +++ b/TaskManager/Cell/spe/CellDmaManager.cc Thu Jun 04 00:06:37 2009 +0900 @@ -2,6 +2,9 @@ #include #include "CellDmaManager.h" +unsigned int CellDmaManager::wait_time, CellDmaManager::busy_time; +unsigned long long CellDmaManager::global_busy_time, CellDmaManager::global_wait_time; + /** * DMA Load * @@ -37,22 +40,31 @@ * * @param[in] mask Tag for Wait DMA process */ -void + +static void CellDmaManager::start_dmawait_profile() { wait_time = spu_readch(SPU_RdDec); + // global 変数ãĢする global_busy_time += busy_time - wait_time; spu_writech(SPU_WrDec, 0xffffffff); } -void +static void CellDmaManager::end_dmawait_profile() { wait_time = spu_readch(SPU_RdDec); + // global 変数ãĢする global_wait_time += 0xffffffff - wait_time; busy_time = wait_time; } +// ここでプãƒĒãƒŗト、ppu側から Task ãĢしãĻ投げる +void +CellDmaManager::print_wait() +{ +} + void CellDmaManager::show_dma_wait(int cpu) { diff -r 64b57b4ba9e2 -r f872cc000fe0 TaskManager/Cell/spe/SchedMail.cc --- a/TaskManager/Cell/spe/SchedMail.cc Wed Jun 03 22:14:20 2009 +0900 +++ b/TaskManager/Cell/spe/SchedMail.cc Thu Jun 04 00:06:37 2009 +0900 @@ -13,12 +13,22 @@ { delete p; + // dma wait + scheduler->start_dmawait_profile(); params_addr = scheduler->mail_read(); + scheduler->end_dmawait_profile(); __debug("[SchedMail:%s]\n", __FUNCTION__); +<<<<<<< local + if ((int)params_addr == MY_SPE_COMMAND_EXIT) { + // ppu 側から spu ãŽåŽŸčĄŒįŠļæŗčĄ¨į¤ēį”¨ Task を投げる + // counter は global + return new SchedExit(m); +======= if ((int)params_addr == MY_SPE_COMMAND_EXIT) { return new SchedExit(); +>>>>>>> other } else { return new SchedTaskList(params_addr, m); } diff -r 64b57b4ba9e2 -r f872cc000fe0 TaskManager/ChangeLog --- a/TaskManager/ChangeLog Wed Jun 03 22:14:20 2009 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1888 +0,0 @@ -2009-02-13 Wataru MIYAGUNI - - * kernel/ppe/Random.cc (reset): fix - urandom -> random とおれもčĒ­ã‚ãĒかãŖたら - gettimeofday() でぎ時間から seed ã‚’æą‚ã‚ã‚‹ã‚ˆã†ãĢ - -2009-02-12 Wataru MIYAGUNI - - * add: kernel/ppe/Random.cc - äšąæ•°į”Ÿæˆã‚¯ãƒŠã‚šã€‚ - ã‚˛ãƒŧムだとãƒĻãƒŧã‚ļäŊŋうでしょうきãŖと。 - 一åŋœ /dev/random から seed 取る様ãĢしãĻぞす - -2009-02-04 Wataru MIYAGUNI - - * kernel/ppe/TaskManager.cc (TaskManager::allocate): rename - malloc -> allocate - - * kernel/main.cc (main): fix - cerium_main をå‘ŧãļぎではãĒく、TMmain という名前ãĢしぞした。 - ãĄã‚‡ãŖと SDLmain をパクãŖた感じで。 - ぞあ TaskManager ぎ main で cerium_* ãŖãĻ名前は垎åĻ™ãĢ変だからね。 - - * kernel/ppe/TaskManager.cc (TaskManager::set_TMend): add - cerium_main があるんだから、cerium_end があãŖãĻもいいじゃãĒい。 - もãŖã¨č¨€ã†ã¨ã€TaskManager ãĢ main を隠すãŖãĻæĩã‚ŒãĒんだけお - įĩ‚äē†ã‚’検įŸĨできãĒã„ãŽã¯ãĄã¨ã‚„ã‚ŠãĨらいかãĒと。 - たとえばæ¸Ŧ厚とか。Task ぎ post_func とかでもやれãĒいことはãĒいけおね。 - というわけで、ãƒĻãƒŧã‚ļが、プログナムįĩ‚äē†æ™‚ãĢå‘ŧばれるé–ĸæ•°ã‚’č¨­åŽšã§ãã‚‹ã‚ˆã†ãĢ。 - -2009-01-20 Wataru MIYAGUNI - - * Cell/spe/SchedTask.cc (SchedTask::get_cpuid): add - printf デバッグ時ãĢ、おぎ CPU かãŖãĻįŸĨりたい時があるぎで。 - - PPE = 0 - SPE = 0〜spu_num-1; - - PPE は 0 äģĨ外ãĢ分かりやすい数字がいいんだけおãĒãƒŧ。SPE とčĸĢるし。 - -1 とかはエナãƒŧãŖãŊいからåĨŊかãĒい。ぞあいいんだけお。 - - User Task ではäģĨ下ぎ様ãĢäŊŋį”¨ã—ぞす - - int cpuid = smanager->get_cpuid(); - - - * Cell/SpeThreads.cc (SpeThreads::spe_thread_run): fix - SPE_EXIT がå‡ēる時はæ­Ŗ常įĩ‚äē†ã ã‘お、これだと - エナãƒŧでたようãĒãƒĄãƒƒã‚ģãƒŧジãĢčĻ‹ãˆãĻしぞう(äŋēがそうčĻ‹ãˆãĻしぞãŖた)ぎで - ã“ã“ã¯čĄ¨į¤ēしãĒくãĻもいいかãĒ。 - - * kernel/ppe/MailManager.cc (MailManager::destroy): fix - į„Ąé™ãƒĢãƒŧプãĢãĒãŖãĻた。こぎ for() 間違ãŖãĻるかãĒ。 - ãĒんか TaskQueueInfo.cc とかでも、įĩåą€ while() ãĢį›´ã—ãĻるし。 - - * kernel/ppe/TaskManager.cc (TaskManager::~TaskManager): add - kernel/main.ccで - - delete manager; - - としãĻいるぎãĢ、TaskManagerImpl::~TaskManagerImpl がå‘ŧãŗå‡ēされず - おうしãĻかãĒと思ãŖたら、そもそも ~TaskManager がį„Ąã‹ãŖた。あãģか - -2009-01-05 Wataru MIYAGUNI - - * all : fix - Scheduler::curIndex_taskList を削除し、 - SchedTask ãĢ持たせる様ãĢ変更。(SchedTask::__cur_index) - それãĢäŧ´ã„、SchedTask::__init__() も cur_index をå…Ĩれる様ãĢ変更 - -2008-12-24 Wataru MIYAGUNI - - * kernel/schedule/SchedTask.cc (SchedTask::ex_init_renew) - (SchedTask::ex_init_normal): add - (SchedTask::__init__): fix - - init でも ex_init をäŊŋえる様ãĢ。 - あと、ã‚ŗãƒŗ゚トナクã‚ŋã§æ¸Ąã—ãĻいたåŧ•æ•°ã‚’ __init__() ãĢæ¸Ąã™æ§˜ãĢした。 - ã‚ŗãƒŗ゚トナクã‚ŋぎåŧ•æ•°ã‚ると、įļ™æ‰ŋする時ãĢã„ãĄã„ãĄčĻĒクナ゚ぎも書かãĒいと - いけãĒかãŖた。これįœį•ĨできãĒいんだよãĒ。めんおくさい。 - - 例. - class Hoge : public SchedTask { - Hoge(int i) : Task(i) {} - }; - - ãĒぎで、äģŠãžã§ã¯ Scheduler.h ãĢ SchedConstructor ãŖãĻマクロを書いãĻ - クナ゚名å…Ĩれるだけで上ぎ様ãĒåŊĸãĢãĒるようãĢしãĻいた。 - でも、䞋えば - - SchedTask -> Hoge -> Fuge ãŖãĻいうようãĢ Fuge ãŖãĻã‚ŋ゚クを - äŊœã‚ŠãŸã„とき、上ぎぞぞだと SchedTask ãĢåŧ•æ•°æ¸Ąã—ãĻしぞうぎでだめ。 - もうめんおくさいãŖãĻことで、ã‚ŗãƒŗ゚トナクã‚ŋ全ãĻデフりãƒĢトãĢしãĻ、 - __init__() ぎåŧ•æ•°ãĢæ¸Ąã™æ§˜ãĢしぞした。 - - (SchedTask::__set_renewFlag): add - - ここで、PPEでį”Ÿæˆã•ã‚ŒãŸã‹(normal)、SPE でį”Ÿæˆã•ã‚ŒãŸã‹(renew) ぎ - åˆ¤åŽšã‚’čĄŒã„ã€ex_xxx ãŽč¨­åŽšã‚‚ã™ã‚‹ - - (SchedTask::get_inputSize, SchedTask::get_outputSize): add - - ã‚ĸドãƒŦ゚だけじゃãĒく、そぎã‚ĩイã‚ēも取れた斚がいいだろう - - -2008-12-23 Wataru MIYAGUNI - - * Cell/spe/SchedTask.cc (SchedTask::get_outputAddr) - (SchedTask::get_inputAddr): add - - in/out ぎデãƒŧã‚ŋだけじゃãĒく、そぎã‚ĸドãƒŦ゚も取れた斚がいいだろう - -2008-12-22 Wataru MIYAGUNI - - * Cell/spe/SchedTask.cc (SchedTask::__init__, SchedTask::read) - (SchedTask::exec, SchedTask::write): fix - (SchedTask::ex_read_normal, SchedTask::ex_read_renew) - (SchedTask::ex_exec_normal, SchedTask::ex_exec_renew) - (SchedTask::ex_write_normal, SchedTask::ex_write_renew): add - - SPE 内でį”Ÿæˆã•ã‚ŒãŸã‚ŋ゚クは、PPE でį”Ÿæˆã•ã‚ŒãŸã‚‚ぎと違い - - - add->inData - : PPE から DMA or SPE 内ぎもぎをそぎぞぞäŊŋう - - PPE ãĢã‚ŋ゚クがįĩ‚äē†ã—たことをįŸĨらせる - : į”Ÿæˆã•ã‚ŒãŸã‚ŋ゚クを垅つåŋ…čĻãŒã‚ã‚‹ãĒら、そぎ時į‚šã§ã¯é€ã‚‰ãĒい - - とか、ぞあいろいろå‡Ļį†ãŒé•ã†ã‚ã‘です。 - そしãĻ、ã‚ŋ゚ク内į”Ÿæˆã‚ŋ゚クぎ判断をする - - __flag_renewTask ? 0 = PPE でį”Ÿæˆ : 1 = SPE でį”Ÿæˆ - - という変数がある。これでいくつかå‡Ļį†ã‚’分けãĻるんだけお、 - äģŠãžã§ã¯ - - if (__flag_renewTask) { - } else { - } - - ãŖãĻやãŖãĻた。これではいかんというäē‹ã§ã€ - __init__() 内で、é–ĸ数ポイãƒŗã‚ŋãĢ、 - - ex_xxxx_normal: PPE でį”Ÿæˆã•ã‚ŒãŸã‚ŋ゚クãĢ寞するå‡Ļį† - ex_xxxx_renew: SPE でį”Ÿæˆã•ã‚ŒãŸã‚ŋ゚クãĢ寞するå‡Ļį† - - とå…ĨれãĻ、if 文į„Ąã—でやãŖãĻãŋた。 - äģŠã¯ ex_write_xxx しか書いãĻãĒいが、これからread/exec でも - å‡ēãĻくると思うぎで、äŊœãŖãĻおいた - - -2008-12-19 Wataru MIYAGUNI - - * Cell/spe/CellDmaManager.cc (CellDmaManager::dma_wait) - (CellDmaManager::mail_write, CellDmaManager::mail_read): fix - writech、readch ぎé–ĸ数を、wrap (ãŖãĻč¨€ã„æ–šã§ãŠkīŧŸ)されたé–ĸ数ãĢ変更。 - 最遊化掛かãŖãĻるãŖãŊã„ã—ã€é•ˇã„ã‚ˆã‚Šã¯ã‚ã‹ã‚Šã‚„ã™ã„ã—ã€‚ããŽãŸã‚ãŽ wrap。 - - 例: - - before - spu_readch(SPU_RdInMspu_readch(SPU_RdInMbox); - - after - spu_read_in_mbox(void); - -2008-11-05 Wataru MIYAGUNI - - * add: Task 内でぎ API - Task 外でぎ API は、äģŠãžã§é€šã‚Š manager->create_task とかですが - ã‚ŋ゚ク内でも、「ã‚Ēブジェクト->é–ĸ数」ぎå‘ŧãŗå‡ēしがいいんじゃãĒいか - ãŖãĻ芹ãĢãĒãŖたぎで、äģ˜ã‘加えぞした。äģŠãŽã¨ã“ろ、SchedTask.h ぎ - 内部クナ゚としãĻ - - STaskManager - - ãŖãĻぎを加えãĻ、ãƒĻãƒŧã‚ļはそぎイãƒŗã‚šã‚ŋãƒŗ゚である - - smanager - - からAPIãĢã‚ĸクã‚ģ゚しぞす。 - äģŠãžã§ã¯ __scheduler->dma_load とかいろいろやãŖãĻたんですが - これからは全ãĻ smanager ãĢしぞした。 - というわけで、ここãĢäŊŋえる API 一čĻ§ã€‚ã„ãšã‚Œã‚˛ãƒŧムį­ wikiぎ斚ãĢも。 - - - get_input, get_output, get_param - - create_task, wait_task - - global_alloc, global_get, global_free - - mainMem_alloc, mainMem_wait, mainMem_get - - dma_load, dma_store, dma_wait - - allocate - - äŊŋい斚はčŋŊ々描きぞすが、 - äģŠãŽã¨ã“ろ上ãĢ変更しãĒくãĻã‚‚ããŽãžãžãŽč¨˜čŋ°ã§å‹•ãã¯ãšã§ã™ã€‚ - いずれは全ãĻį§ģčĄŒã—ãĻもらうことãĢãĒりぞすがきãŖと。 - - - * kernel/schedule/SchedTask.cc: - いろいろé–ĸ数がåĸ—えãĻぞすが、ナッパãƒŧです。 - -2008-11-01 Wataru MIYAGUNI - - * add: kernel/main.cc - main loop をãƒĻãƒŧã‚ļãĢ書かせるぎはめんおくさいぎで、 - ナイブナãƒĒ側で main() を書くäē‹ãĢしぞした。 - ãƒĻãƒŧã‚ļ側では main() ぎäģŖわりãĢ cerium_main() を - 書かせるようãĢしãĻいぞす。åŧ•æ•°ã¯ main() ãŽã‚’ããŽãžãžæ¸Ąã™æ„Ÿã˜ã§ã€‚ - - Cerium 標æē–ぎã‚Ēãƒ—ã‚ˇãƒ§ãƒŗとしãĻ、-cpu はäģ˜ã‘ぞした。 - ã‚˛ãƒŧムフãƒŦãƒŧムワãƒŧクãŖãĻことで、-width とか -height は - 標æē–でつけãĻもいいかãĒãŖãĻ芹ãĒぎで、これは垌æ—Ĩ原čŖ…。 - 標æē–ã‚Ēãƒ—ã‚ˇãƒ§ãƒŗで受け取ãŖた値ãĢã‚ĸクã‚ģ゚する斚æŗ•ã‚‚č€ƒãˆãĒいと。 - manager->cpu とか manager->width とかは厉易かīŧŸ - - * add: Cell/PpeScheduler.cc - MainScheduler をそぎぞぞäŊŋうと、 - PPE ぎã‚ŋ゚クで mainMem_alloc でįĸēäŋã—た領域がã‚ĸãƒŠã‚¤ãƒĄãƒŗト - 取れãĻいãĒいため、SPE でäŊŋうとäŊ™čŖ•ã§ãƒã‚šã‚¨ãƒŠãƒŧ。 - - Scheduler->allocate で poxis_memalign でäŊŋえるようãĢ。 - - * move: kernel/schedule/FifoDmaManager.cc, MainScheduler.cc - kernel というよりは Fifo バãƒŧジョãƒŗį”¨ãĒぎで Fifo/ ãĢį§ģ動。 - - -2008-10-21 Wataru MIYAGUNI - - * kernel/ppe/TaskManagerImpl.cc (TaskManagerImpl::systask_init): fix - 下ãĢčŋ°ãšãĻる SysTask_Finish を regist する部分 - - (TaskManagerImpl::spawn_task): - - SysTask_Finish ãĢ寞しãĻ、ã‚ŋ゚クが spawn されるたãŗãĢ - wait_for を掛けãĻ、垅つようãĢしãĻいる。 - - * add: kernel/systask/ - 䚅々ぎ更新䚙 - - プログナム動かすとき、ã‚ŋ゚クが SPE だけで、 - PPE で垅ãŖãĻるã‚ŋ゚クがį„Ąã„とそぎぞぞプログナムがį´ é€šã‚Šã™ã‚‹ãŖãĻことで - äģŠãžã§ã¯ãƒĻãƒŧã‚ļãĢ、全ãĻぎã‚ŋ゚クを垅たせるã‚ŋ゚クãŖãĻぎを書かせãĻた。 - ãžã‚ã‚‚ãĄã‚ã‚“ã‚ã‚“ãŠãã•ã„ãŽã§ã€ã„ã„åŠ æ¸›čŋŊ加した。 - - system task ãŖつãƒŧことで、spawn された全ãĻぎã‚ŋ゚クを垅つ - SysTask_Finish をäŊœãŖãŸã€‚ã“ã‚Œã§ã„ãĄã„ãĄ task_finish とかäŊœã‚‰ãĒくãĻおk - -2008-08-10 Wataru MIYAGUNI - - * thinking: add_update() ? - įžåœ¨ã€ã‚ŋ゚クは input/output があるわけですよ。 - で、䞋えば - - - å…Ĩ力デãƒŧã‚ŋ : PolygoPpack - - å‡ē力デãƒŧã‚ŋ : SpanPack - - ãŖãĻãĒわけですが、åˆĨぎã‚ŋ゚クで - - - å…Ĩ力デãƒŧã‚ŋ : SceneGraphPack (更新前) - - å‡ē力デãƒŧã‚ŋ : SceneGraphPack (更新垌) - - ãŖãĻぎがある。つぞり Update ãĒわけだ。 - äģŠãŽã¨ã“ろ、同じã‚ĸドãƒŦã‚šã‚’ add_inData, add_outData ãĢč¨­åŽšã—ãĻ - ã‚ŋ゚ク内で memcpy(wbuf, rbuf, sizeof(SceneGraphPack) とかしãĻる。 - ぞあそれはそれでいいぎかわるいぎか。 - - in/out だけじゃãĒくãĻ update もåŋ…čĻīŧŸ - -2008-08-08 Wataru MIYAGUNI - - * add: ../include/TaskManager/base.h - 通常ぎ new/delete では、RTTI とか 䞋外å‡Ļį†ã¨ã‹ã§ - -fno-exceptions や -fno-rtti をã‚ŗãƒŗパイãƒĢã‚Ēãƒ—ã‚ˇãƒ§ãƒŗãĢしãĻも - 劚かãĒかãŖたんだけお、operator new/delete をã‚ĒãƒŧバãƒŧナイドしãĻ - 中čēĢを晎通ぎ malloc/free ãĢすると、上ぎå‡Ļį†ãŒį„ĄããĒるぎで - ã‚Ēãƒ—ã‚ˇãƒ§ãƒŗが劚くようãĢãĒる。įĩæžœã‚ŗãƒŧドã‚ĩイã‚ēも減ると。 - SPE ぎ場合、70〜80KBは減りぞした。äŊŋわãĒい手はį„Ąã„。 - つãƒŧことで、一åŋœå‹•ã„ãĻる。。。といいたけお動いãĻãĒいorz - 最遊化 (-O2 とか -O9) をかけるとæ­ĸぞる。SPE 上でね。 - FIFO バãƒŧジョãƒŗã ã¨å•éĄŒãĒい。SPEだとだめだ。 - äģŠã‚ã‹ãŖãĻる、æ­ĸぞる場所は Scheduler::run() 内ぎ - - task3->write(); - - だ。task1~3ぞでぎnewは(多分)できãĻいるんだけお - そこをå‘ŧãŗå‡ēすと SPE č‡ĒäŊ“がįĩ‚äē†ã—ãĻしぞう。čŦŽã  - - 一åŋœã€äŋēäŊœãŽ new/delete は base.h ãĢ厚įžŠã—ãĻあãŖãĻ、 - 通常ぎ API とぎ切りæ›ŋえは、base.h ãĢある - BASE_NEW_DELETE を切りæ›ŋえるだけでおk。 - 全ãĻãŽãƒ•ã‚Ąã‚¤ãƒĢではãĒく、įžåœ¨ã¯ SPE でäŊŋいそうãĒところだけやãŖãĻぞす。 - いずれは全部やãŖたãģうがいいかãĒ〜 - - ナイブナãƒĒ側ぎ最遊化はã‚ĸã‚Ļトだけお、ãƒĻãƒŧã‚ļå´ã§ã¯å•éĄŒãĒいです。 - ãĒぎで、äģŠã¯ - - ナイブナãƒĒ側(libspemanager.a)は最遊化į„Ąã—(-O0) - ãƒĻãƒŧã‚ļ側(SchedTaskをįļ™æ‰ŋしたやつね)は最遊化しãĻもį„Ąå•éĄŒ (-O9) - - でãŖす。ここらへん厌į’§ãĒれば、だいãļæĨŊãĢãĒる。 - つãƒŧかもう C++ やめ(ry - - -2008-08-07 Wataru MIYAGUNI - - * change: mainMem_set -> mainMem_wait - allocate を垅つんだから、ãĒんとãĒく wait かãĒ。 - あと、ãƒĻãƒŧã‚ļもäŊŋえるぎで、wait ぎ斚がわかりやすいと思ãŖたり。 - -2008-08-05 Wataru MIYAGUNI - - * add: mainMem_alloc, mainMem_set, mainMem_get - SPE から ãƒĄã‚¤ãƒŗãƒĄãƒĸãƒĒぎ領域ãĢ寞しãĻ allocate できãĒいと - SceneGraphぎį”Ÿæˆã‚„ら、įĩæ§‹ã‚¯ãƒĒテã‚Ŗã‚ĢãƒĢãĒå‡Ļį†ã‚’ - 全部 PPE でやらãĒいといけãĒくãĒるãŖãĻことで原čŖ…しぞした。 - - æĩã‚Œã¨ã—ãĻ - - 1 ã‚ŋ゚ク中ãĢ、mainMem(id,size) ã‚’åŽŸčĄŒã™ã‚‹äē‹ã§ã€ - ãƒĄã‚¤ãƒŗãƒĄãƒĸãƒĒãĢ寞しãĻ allocate ぎã‚ŗマãƒŗドをį™ēčĄŒã€‚ - - 1.1 Scheduler から PPE ãĢ寞しãĻ - - commmand (MY_SPE_COMMAND_MALLOC) - - id (PPEからæˆģãŖãĻくるã‚ŗマãƒŗドãĢåŋ…čĻ) - - size - を mailbox で送る - - 1.2 įĸēäŋã—た領域はそぎã‚ŋ゚ク内では取垗できãĒい(NULL がæĨぞす) - æ­ŖįĸēãĢは、čŋ”äē‹ãŽ mail をここでは read しãĻãĒいから - - 2. PPE では、受äŋĄã—た mail が MY_SPE_COMMAND_MALLOC だãŖたら - æŦĄãĢæĨる mail が id と size であるとしãĻ read ã‚’čĄŒã„ã€ - size を元ãĢ allocate する。allocate が厌äē†ã—たら - - id - - allocate された領域ぎã‚ĸドãƒŦã‚š - を SPE ãĢ mail で送る - - 3. SPE Scheduler では、SchedTaskList::read で、 - 一つ前ぎ TaskList ä¸­ã§åŽŸčĄŒã•ã‚ŒãŸ mainMem_alloc ぎ数だけ - PPE ã‹ã‚‰ãŽãƒĄãƒŧãƒĢを垅つ。mainMem_set() ぎå‡Ļį†ã§ã™ã€‚ - - 4. create_task されたã‚ŋ゚ク内で mainMem_get(id) とすると - allocate ã—ãŸãƒĄã‚¤ãƒŗãƒĄãƒĸãƒĒ領域ぎã‚ĸドãƒŦ゚が垗られる。 - - こんãĒ感じ。įĩæ§‹ã ã•ã„原čŖ…ãĒãŽã§ã€ã‚‚ã†ãĄã‚‡ã„ã‚šãƒžãƒŧトãĢいきたいよね。 - äž‹éĄŒã¯ Game_project/student/master/gongo/MainMemMalloc ãĢありぞす。 - README ãĢもおんãĒじこと書いãĻぞす。 - - * memo: The number of available entries of Inbound/Outbound Mailbox - Outbound (SPE -> PPE) ぎmailboxデãƒŧã‚ŋキãƒĨãƒŧäŋæŒæ•°ã¯ - - /* SPE プログナム中 */ - #include - spu_stat_out_mbox(void); - - でčĒŋずるäē‹ãŒå‡ēæĨる。 - - --- 記čŋ°äž‹ --- - printf("Available capacity of SPU Outbound Mailbox\n"); - printf(" %d\n", spu_stat_out_mbox()); - - --- åŽŸčĄŒįĩæžœ -- - Available capacity of SPU Outbound Mailbox - 1 - - Inbound (PPE -> SPE) ぎ mailbox デãƒŧã‚ŋキãƒĨãƒŧäŋæŒæ•°ã¯ - - /* PPE プログナム中 */ - #include - spe_in_mbox_status(spe_context_ptr_t); - - でčĒŋずられぞす。 - - --- 記čŋ°äž‹ --- - printf("the number of available entries = %d\n", - spe_in_mbox_status(spe_ctx)); - - --- åŽŸčĄŒįĩæžœ --- - the number of available entries = 4 - - Outbound が少ãĒいãĒãƒŧ。 - In/Out å…ąãĢ、キãƒĨãƒŧが MAX ぎ場合、減るぞで wait 掛かるんだよãĒ。 - それがおこぞでåŊąéŸŋあるかは原際ãĢやらãĒいと、ãŖãĻことか。 - - * fix: ãƒ•ã‚Ąã‚¤ãƒĢ名ぎ変更 (*.cpp -> *.cc) - 前々から先į”ŸãĢį›´ã›č¨€ã‚ã‚ŒãĻたぎで。 - - cvs ãŽãƒ•ã‚Ąã‚¤ãƒĢ名を変える斚æŗ•ã¯į°Ąå˜ãĢäēŒã¤(ãĻかこれだけīŧŸ) - - 1. cvs rm hoge.cpp; cvs add hoge.cc - 2. ãƒĒポジトãƒĒをį›´æŽĨ変更 mv hoge.cpp,v hoge.cc,v - - めんおくさかãŖたぎで 2 でやりぞした。 - Attic (å‰Šé™¤ã•ã‚ŒãŸãƒ•ã‚Ąã‚¤ãƒĢがあるãƒĒポジトãƒĒデã‚ŖãƒŦクトãƒĒīŧŸ)ãĢも - 同じå‡Ļį†ã‚’čĄŒãˆã°ã€tag で update かけãĻã‚‚ãĄã‚ƒã‚“ã¨åæ˜ ã•ã‚Œãžã—ãŸã€‚ - -2008-07-22 Wataru MIYAGUNI - - * tag: open-campus-2008 - æŦĄã‚„ã‚‹äē‹ã¯ã€Cell/spe äģĨ下ぎã‚ŗãƒŧドã‚ĩイã‚ēを減らすためãĢ - new/delete をæļˆã—ãĻ malloc/free でįĩąä¸€ã™ã‚‹äē‹ã€‚ - placement_new ãŖãĻぎをäŊŋえば、ã‚ŗãƒŗ゚トナクã‚ŋはå‘ŧずãĻ - new ãģおã‚ĩイã‚ē圧čŋĢしãĒいからこれãĢしようかãĒ。 - 逆ぎ placement_delete ãŖãĻぎはč‡Ē分で小į´°åˇĨしãĒã„ã¨čĄŒã‘ãĒいらしい。 - ãžã‚ã€ã“ã‚ŒãŒæ—¨ãčĄŒã‘ã° 80KB ãģお減るから。やるずきだろう。 - - * Cell/spe/Scheduler.cpp (Scheduler::dma_load): ã‚ĸホãĒミ゚そぎ2 - č‡Ē分で __scheduler->dma_store をやãŖãĻもデãƒŧã‚ŋが送れãĒい。 - そんãĒéĻŦéšŋãĒ。つãƒŧことでいろいろčĒŋずãĻもわからãĒい。 - ã‚ĸドãƒŦã‚šã‚„ã‚ĩイã‚ēが違うぎかとčĒŋずãĻも違う。 - こうãĒãŖたらãŖつãƒŧことでナイブナãƒĒãĢ printf 加えãĻãŋãŸã‚‰čĄ¨į¤ēされãĒい - あれ、おかしいãĒ。たしかãĢ Connector::dma_store ãĢ加えたはzãƒģãƒģ - - Scheduler::dma_store(void *buf, uint32 addr, uint32 size, uint32 mask) - { - <<< - connector->dma_load(buf, addr, size, mask); - ======== - connector->dma_store(buf, addr, size, mask); - >>> - } - - ãĒぜ store から load をå‘ŧã‚“ã§ã‚‹ãŽã‹ä¸æ€č­°ã ãŖた。 - Scheduler::dma_load をã‚ŗピペしãĻ dma_store ãĢした垌、 - 中ぎ connector->dma_load を変えãĒかãŖたãŖãĻã‚ĒチだãĒ。 - 下ぎミ゚と合わせãĻ5,6時間č˛ģやしたよHAHAHA - - * Cell/spe/SchedTask.cpp (SchedTask::exec): ã‚ĸホãĒミ゚そぎ1 - Test/test_render で、 - SpanPack ぎデãƒŧã‚ŋが時々åŖŠã‚ŒãĻる感じがする。 - 送る前ぞではæ­Ŗ常だからį”ŸæˆãĢå•éĄŒã¯į„Ąã„はず。 - つãƒŧことでいろいろčĒŋずたがわからず。 - printf ãƒ‡ãƒãƒƒã‚°ã™ã‚‹ã¨å‹•ãä¸æ€č­° - ãĒんだ、printf で遅くãĒãŖたらできるãŖãĻことは - DMA が厌äē†ã™ã‚‹å‰ãĢ SchedTask::run ãĢきãĻんぎかīŧŸ - いやいや、そんãĒばかãĒ。だãŖãĻãĄã‚ƒã‚“ã¨ wait しãƒģãƒģãƒģ - - <<< - ============ - __scheduler->dma_wait(DMA_READ); - >>> - - はいはい wait しåŋ˜ã‚Œ wait しåŋ˜ã‚Œ - -2008-07-16 Wataru MIYAGUNI - - * memo: if 文æļˆã—た成果2 īŧ† memcpy するかしãĒいかか - Renew Task では、inListData,outListData は新たãĢ allocate しãĻ - äŊŋãŖãĻいるぎで、SchedTask ãĢそãŖãĻåŽŸčĄŒã™ã‚‹å ´åˆã€ - - __scheduler->dma_load(__inListData, (uint32)__task->inData, - sizeof(ListData), DMA_READ_IN_LIST); - __scheduler->dma_load(__outListData, (uint32)__task->outData, - sizeof(ListData), DMA_READ_OUT_LIST); - - ぎäģŖわりãĢ - - memcpy(__inListData, __task->inData, sizeof(ListData)); - memcpy(__outListData, __task->outData, sizeof(ListData)); - free(__task->inData); - free(__task->outData); - - もしくは - - __inListData = __task->inData; - __outListData = __task->outData; - (__task->inData と __task->outData は Destructor で free する) - - とやãŖãĻいぞす。 - memcpy が重いぎはわかるんですが、下ぎ斚æŗ•ã§ã¯ - Destructor で if 文äŊŋãŖãĻ free() しãĻいるわけです(こぎã‚ŋ゚クが Renew かåĻか)。 - ですぎで、おãŖãĄãŒæ—Šã„ã‹čŠĻしãĻãŋた。 - - /** - * memcpy() しãĻ、すぐ free() する version - */ - void - test_cpy(int flag, int *src) - { - if (flag) { - memcpy(data, src, sizeof(int)*length); - free(src); - } - } - - /** - * 参į…§ã§æ‰ąãŖãĻ、最垌ãĢ free() する version - */ - void - test_nocpy(int flag, int *src) - { - if (flag) { - data = src; - } - - // こぎ部分を SchedTask::~SchedTask() と - // 思ãŖãĻください - if (flag) { - free(data); - } - } - - - これらぎé–ĸ数を10000回ãƒĢãƒŧプしぞした。 - src ぎ allocate はé–ĸ数ぎ外でやãŖãĻãŠã‚Šã€ããŽéƒ¨åˆ†ã¯åŽŸčĄŒæ™‚é–“ãĢåĢぞれãĻぞせん - flag は 1 or 0 ぎįš°ã‚Ščŋ”しです。 - - - åŽŸčĄŒįĩæžœ (1) - :no copy - SPE time by SPU Decrementer: 0.035500 - :copy - SPE time by SPU Decrementer: 0.057500 - - memcpy しãĒいãģうが速いらしいです。 - ためしãĢ、flag を ずãŖと 1 ãĢしãĻãŋぞした。 - - - åŽŸčĄŒįĩæžœ (2) - :no copy - SPE time by SPU Decrementer: 0.055250 - :copy - SPE time by SPU Decrementer: 0.053389 - - äģŠåēĻは copy するãģã†ãŒæ—Šã„ã¨ã„ã†ä¸æ€č­°ã€‚ - でもぞあ、ずãŖと 1 ãŖãĻことはãĒいと思いぞすし、 - むしろ flag == 1 ãĢãĒるãģうが少ãĒいと思うぎで、 - no_copy version でやãŖたãģうがいいかãĒ。 - - ãŠãžã‘ã§ã€åŽŸčĄŒįĩæžœ (1) ぎį’°åĸƒã§ã€test_nocpy を変えãĻãŋた - - void - test_nocpy(int flag, int *src) - { - if (flag) { - data = src; - } - - free((void*)(flag*(int)data)); - } - - キãƒŖ゚トしぞくりですが、単į´”ãĢ free(flag*data) だと - 「invalid operands of types 'int' and 'int*' to binary 'operator*'」ãŖãĻ - å‡ēるぎで、キãƒŖ゚トで逃げぞした。 - ã§ã€åŽŸčĄŒįĩæžœãĒんですが - - - åŽŸčĄŒįĩæžœ (3) - :no copy - SPE time by SPU Decrementer: 0.040375 - :copy - SPE time by SPU Decrementer: 0.059500 - - 遅くãĒãŖãĻãƒŧら。キãƒŖ゚トがæ‚Ēいぎか。䚗įŽ—が重いぎか。 - branch がį„Ąã„īŧŸ spe ぎ if 文と寞æąēしãĻも遅いぎかãƒŧ。 - äž‹éĄŒãŒé–“é•ãŖãĻる可čƒŊ性もあるがãƒģãƒģãƒģ if 文はäŊŋãŖãĻいくかãĒãƒŧ - - -2008-07-10 Wataru MIYAGUNI - - * fix: TaskGroup->group - äģŠãžã§ slist ãŖãĻいう、ナイブナãƒĒぎ単斚向ãƒĒ゚ト構造äŊ“īŧŸã‚’ - äŊŋãŖãĻたんだけお、ぞあいろいろあãŖãĻ、TaskQueue をäŊŋうようãĢしぞした。 - 最初からこれãĢするつもりではあãŖたけおね。 - RenewTask や static_alloc とかぎ原čŖ…ã‚’å„Ē先したぎで - ナイブナãƒĒをäŊŋいぞした。といãŖãĻも、書いãĻãŋると - それãģã¨č¨˜čŋ°é‡į„Ąã„ãŽã§æœ€åˆã‹ã‚‰čĄŒãŖãĻã‚‚č‰¯ã‹ãŖたかãĒãƒŧと思ãŖたり。 - - そんãĒわけで動いãĻぞす。つãƒŧか、やめãĻよかãŖたよ slist。 - slist をäŊŋãŖたやつとäŊŋãŖãĻãĒいåĨ´ãŽãƒ•ã‚Ąã‚¤ãƒĢã‚ĩイã‚ēがやばい - - -rwxr-xr-x 1 gongo gongo 120672 2008-07-10 14:29 spe-main* - -rwxr-xr-x 1 gongo gongo 180368 2008-07-10 13:40 spe-main.bak* - - .bak が slist をäŊŋãŖãĻる、上ぎやつがäŊŋãŖãĻãĒいversionです。 - ぞさか 60k も違ãŖãĻくるとは思わãĒかãŖた。 - SPE LS ぎ厚量が 256k ã¨č€ƒãˆã‚‹ã¨ã€ã‹ãĒりぎį—›æ‰‹ã ãŖたよ。ã‚ĸブねえ。 - イãƒŗナイãƒŗとか最遊化掛けぞくãŖãĻãĻ、ã‚ŗãƒŧド量がåĸ—えãĻるからかãĒãƒŧ。 - - 「SPU C/C++ 言čĒžæ‹Ąåŧĩ」とかで、C++ ぎナイブナãƒĒがSPUでもäŊŋえるよ〜 - ãŖãĻ書いãĻたからå…ĨれãĻãŋたんだけお。įŊ ã ãŖたか。 - おそらく SPU ãĢį§ģ植した側ぎäēēも「ã‚ĩイã‚ēがåĸ—えるぎをčĻšæ‚Ÿã§äŊŋえ」ãŖãĻ - ことだãŖたんだろう。ãĒかãŖたら文åĨč¨€ã†äēēã‚‚åą…ãã†ã ã—ã€‚ - -2008-07-09 Wataru MIYAGUNI - - * fix: TaskGroup でぎ task ãŽæ‰ąã„ - 下ãĢもかいãĻいるけお (į›´ã—たいところ (1)) - TaskGroup->group が持つčĻį´ ã¯ int で持ãŖãĻãĻ、 - それらは、同じく TaskGroup が持つ cur_id をイãƒŗクãƒĒãƒĄãƒŗトしãĻいãŖãĻ、 - それをčĻį´ ã¨ã—ãĻいぞした。つぞり、TaskGroup->group は、åŽŗ密ãĢいえば - 「おぎ Task があるか」ではãĒく、「いくつぎã‚ŋ゚クがあるか」を - あらわしãĻいるだけでした。slist をäŊŋう意å‘ŗもãĒかãŖたわけです。 - - そこで、SchedTask が持つ、RenewTaskList ぎč§Ŗ攞ぎã‚ŋイミãƒŗグを - RenewTaskList ぎ一į•Ē最垌ぎã‚ŋ゚クが delete されるときãĢしぞした。 - これãĢよãŖãĻ、ã‚ĸドãƒŦ゚がčĸĢることがãĒくãĒãŖたぎで - TaskGroup->group ぎčĻį´ ã‚’ TaskPtr ãĢできぞした。 - こぎ斚が、TaskGroup ぎ意å‘ŗįš„ãĢもしãŖくりくるぎでよかばãŖãĻん。 - - * memo: if 文æļˆã—た成果 - - #ifdef FREE_TEST - free((ListDataPtr)(__flag_renewTask*(int)(__inListData))); - free((ListDataPtr)(__flag_renewTask*(int)(__outListData))); - free((TaskListPtr)(__flag_renewTask*(int)(__list))); - #else - if (__flag_renewTask) { - free(__inListData); - free(__outListData); - free(__list); - } - #endif - - こんãĒ感じで、いくつかか if 文をæļˆã—ãĻãŋた。 - そしãĻ、PPE側ぎ main.cc で gettimeofday ã§č¨ˆæ¸ŦしãĻãŋた (各10回) - - - - if 文æļˆã—た場合 - time: 1.222000 - time: 1.230000 - time: 1.241000 - time: 1.230000 - time: 1.223000 - time: 1.257000 - time: 1.219000 - time: 1.228000 - time: 1.220000 - time: 1.229000 - avarage: 1.2299 - - - if 文æļˆã—ãĻãĒい場合 - time: 1.225000 - time: 1.215000 - time: 1.229000 - time: 1.218000 - time: 1.223000 - time: 1.214000 - time: 1.225000 - time: 1.215000 - time: 1.224000 - time: 1.219000 - avarage: 1.2207 - - あぞり変わらãĒ(ryむしīŊ’(ry - äŊŋい斚がぞずいぎか、もãŖとと回数をåĸ—やせば変わãŖãĻくるぎかね。。。 - PPE でãĒく、 SPE ぎãģã†ã§č¨ˆæ¸ŦすずきãĒぎかãĒãƒŧとか思ãŖたり思わãĒかãŖたり。 - - -2008-07-08 Wataru MIYAGUNI - - * add: Renew Task ぎ wait - Renew Task はäģŠãžã§ã€Œį”Ÿæˆã•ã‚ŒãŸã‚„つ全部垅つ」だãŖたぎを - - void SchedTask::wait_task(TaskPtr task); - - ãŖãĻぎをäŊœãŖãĻ、äģģ意ぎã‚ŋ゚クãĢ wait 掛けれるようãĢしぞした。 - 名前が思いつかãĒかãŖたお。。。 - 動äŊœįĸēčĒæ¸ˆãŋãƒģãƒģãƒģã ã¨æ€ã„ãžã™ã€‚äž‹éĄŒãƒģãƒģãƒģčĒ°ã‹äž‹éĄŒã‚’īŧ(äŋēが - - - * fix: SchedTask ぎ変数名 - ãƒĻãƒŧã‚ļがįļ™æ‰ŋしãĻäŊŋう SchedTask クナ゚ãĒんですが、 - äģŠãžã§å¤‰æ•°ã¯ list, task ãĒおをäŊŋãŖãĻぞした。 - が、これは一čˆŦãĢäŊŋわれやすい変数名です。 - そぎč¨ŧ拠ãĢ、äŋēã‚‚äž‹éĄŒæ›¸ã„ãĻいる時ãĢ task ãŖãĻ名前がčĸĢãŖãĻぞした。 - - run(r, w) - { - ... - - //TaskPtr task; <= åŽŖč¨€ã—ãĻãĒいぎãĢエナãƒŧãĢãĒらãĒい - task = create_task(TASK_EXEC); - } - - ãŖãĻã‚ŗãƒŧドを書いãĻたせいで、Scheduler がäŊŋį”¨ã™ã‚‹ task を - 上書きしたせいでバグãŖãĻぞした。ãŖãĻことがありぞした。 - 上ぎようãĢ、åŽŖč¨€ã—ãĻãĒいぎãĢ晎通ãĢ通ãŖãĻるぎを気ãĨきぞせんでした。 - äģŠãŽã¨ã“ろ変数名は __task とか __list ãĢしãĻありぞす。 - private ãĢしãĻもいいんだけおさ。 - - -2008-07-07 Wataru MIYAGUNI - - * fix: if 文をį„Ąãã—ãĻãŋた - 下ぎ斚ãĢ 「if () が多い」ãŖãĻ書きぞしたが、いろいろ小į´°åˇĨを。 - SchedTask をやãŖãĻãŋぞした。䞋えば - - if (cmd != 0) { - delete taskGroup; - scheduler->mail_write(cmd); - } - - ãŖãĻぎがありぞした。cmd ãŖãĻぎは taskGroup->status で - もし cmd が 0 でãĒければ、taskGroup はすでãĢįŠēãŖãŊで - 垅つずきã‚ŋ゚クはすずãĻįĩ‚äē†ã—たぎで、taskGroup を delete し、 - mailbox で cmd を PPE ãĢ送りぞす(cmd ãĢはすでãĢ送るずきã‚ŗマãƒŗドがある) - でぞあ、これくらいãĒら - - delete (int*)((cmd != 0)*(int)(taskGroup)); - scheduler->mail_write(cmd); - - ぐらいãĢį›´ã›ãžã—た。 - delete や free では NULL ã‚’æ¸Ąã—ãĻもäŊ•ã‚‚しãĒい(?)ãŖãĻ動äŊœãĒぎで - ã“ã‚Œã§ã‚‚å•éĄŒãĒい。つぞり、cmd == 0 ãĒら、taskGroup を - č§Ŗ攞するåŋ…čĻã¯į„Ąã„ぎで NULL が delete ãĢæ¸Ąã•ã‚Œã‚‹ã‚ã‘ã§ã™ - int* でキãƒŖ゚トしãĻるぎは、そぎぞぞ 0 ã‚’æ¸Ąã™ã¨ã€ - 「int型を delete するぎはできãĒい」įš„ãĒエナãƒŧがでるからです。 - 。。。だãŖたら int* じゃãĒくãĻ TaskGroupPtr じゃねīŧŸã¨ã‹æ€ãŖたäģŠã€‚ - - あと、PPE 側で 「mail == 0 ãĒら NOP」 įš„ãĒå‡Ļį†ã‚’å…Ĩれぞした。 - これãĢよãŖãĻ、cmd が 0 かそぎäģ–で if を書くåŋ…čĻãŒãĒくãĒりぞした。 - å•éĄŒãŒã‚ã‚‹ã¨ã™ã‚Œã°ã€ SPE -> PPE ぎ mailbox ぎ queue ãŽé•ˇã•ã€‚ - NOP ã‚ŗマãƒŗドを送ãŖãĻ、queue ぎåˆļ限ãĢåŧ•ãŖかかãŖãĻ - mail_write がæ­ĸぞるんじゃãĒいかãĒãƒŧとか少しåŋƒé…ã§ã™ã€‚ - ここらへんは optimize ぎ時間ãĢč€ƒãˆã‚‹äē‹ã‹ãĒ。 - おうせ PPE では mail しかčĒ­ã‚“でãĒいし、 - そこぞで queue が埋ぞるäē‹ã¯į„Ąã„と思いたい。 - - - - あとはこんãĒ感じかãĒ - - #if 1 // fix - free((void*)(flag_renewTask*(int)(list))); - #else - if (flag_renewTask) { - free(list); - } - #endif - - 動いãĻるぎはįĸēčĒã—たし、gdb で x/20i とかしたら - branch å‘Ŋäģ¤ãŒæ¸›ãŖãĻるぎはįĸēčĒã—た。 - ぞあ -O9 とかで最遊化掛けるとおãŖãĄã‚‚åŒã˜ãĢãĒるけおãĒ。 - - - * add (API): static_alloc, static_get, static_free - SchedTask č‡ĒčēĢだけが持つ領域ではãĒく、 - SPE 上ãĢč¤‡æ•°ãŽã‚ŋã‚šã‚¯ãŒå…ąæœ‰ã—ãŸã„é ˜åŸŸã‚’äŊœã‚‹ - これは task::run() 内でäŊŋį”¨ã™ã‚‹ã€‚ - - - void* static_alloc(int id, int size); - @param [id] 領域ID。įžåœ¨ã¯ 0〜31 ぞでäŊŋį”¨å¯čƒŊ (Scheduler.h で厚įžŠ) - @param [size] 領域ぎã‚ĩイã‚ē - @return allocate した領域ぎポイãƒŗã‚ŋ。下ぎ static_get ぎčŋ”り値と同じ - - - void* static_get(int id); - @param [id] static_alloc でäŊœãŖた領域 ID。 - @return 領域ぎポイãƒŗã‚ŋ - - - void static_free(int id); - @param [id] č§Ŗ攞したい領域ぎ ID - - こんãĒ感じかãĒãƒŧ。 - static_free はさすがãĢãƒĻãƒŧã‚ļãĢäģģせるだろう。 - static_free しåŋ˜ã‚Œã‚‹ã¨ SPE ãĢã¯č‡´å‘Ŋįš„ãĒぎで、ここはよくäŧãˆã‚‹åŋ…čĻæœ‰ - - äž‹éĄŒã¯ - cvs: firefly:Game_project/student/master/gongo/Static - - ぞあ Renew と大äŊ“同じですけおね。 - int 型配列 data ã‚’å…ąæœ‰ãĢしãĻ、各ã‚ŋ゚クでイãƒŗクãƒĒãƒĄãƒŗトしãĻる - - * TODO: TaskGroup ãŽæ‰ąã„ - 通常ぎ Task では、task->self ãĢは - č‡Ē分がįĩ‚äē†ã—た時ãĢ PPE ãĢ送るã‚ŗマãƒŗド(č‡Ē分č‡ĒčēĢ)ãĢãĒりぞすが、 - ã‚ŋ゚ク中ãĢį”Ÿæˆã•ã‚ŒãŸã‚ŋ゚ク(もうäŊ•åēĻも書くぎめんおいんで Renew で)では - task->self は、task ã‚’åž…ãŖãĻいる TaskGroup ã‚’čĄ¨ã—ãžã™ã€‚ - - self という名前で意å‘ŗが違うぎでこういうことはやめたいんだが。。。 - といいãĒがらやめãĒいぎが(ry - - * memo: - 下ぎ į›´ã—たいところ (1) ãŖãĻやつがよくわからんぎで、 - įžåœ¨ãŽįŠļæŗã ã‘ - - scheduler->add_groupTask() をするたãŗãĢ - - group.insert_front(cur_id++); - - されぞす。 - そしãĻ、scheduler->remove_groupTask() されると - - group.remove(--cur_id); - - されぞす。čĻã™ã‚‹ãĢ、おぎã‚ŋ゚クでも - cur_id だけが insert/remove されぞす。 - 「おぎã‚ŋ゚クがあるか」ではãĒく「おれだけぎã‚ŋ゚クがあるか」ですね。 - 原際ãĢはしãŖかりと TaskPtr でįŽĄį†ã—たかãŖたんですが、 - 下ãĢも書いたã‚ĸドãƒŦ゚がčĸĢるäē‘ã€…ãŽå•éĄŒã§ãã‚Œã‚‚ã§ããšã€‚ - やり斚はあると思うんですが。 - - うãƒŧん、うぞくčĒŦ明できãĒいãĒ。 - - * tag: v20080707 - ã‚ŋ゚ク内ã‚ŋ゚クį”Ÿæˆã‚’äŊœã‚Šãžã—た。 - - [TODO] - SPE ä¸Šã§é ˜åŸŸã‚’å…ąæœ‰ã™ã‚‹ API ぎ - - - static_alloc - - static_get - - static_free - - を速æ”ģで原čŖ…しよう。。 - - * add: ã‚ŋ゚ク内ã‚ŋ゚クį”Ÿæˆ - 一åŋœã§ããŸã‚“ですが、į›´ã—たい。。。 - äģ•æ§˜ã¨ã—ãĻは - - - įžåœ¨ãŽã‚ŋ゚ク(T1) ぎ中でã‚ŋ゚クをį”Ÿæˆã—たとする (Tc = T2, T3, ...) - - æœŦæĨ、T1 がįĩ‚äē†æŦĄįŦŦ、T1 がįĩ‚わãŖたäē‹ã‚’ PPE ãĢäŧãˆã‚‹ãŒã€ - ここでは、Tc が全ãĻįĩ‚わãŖãĻから、T1 ぎįĩ‚äē†ã‚’ PPE ãĢäŧãˆã‚‹ - - Tc 内で再ãŗã‚ŋ゚クがį”Ÿæˆã•ã‚ŒãĻも(Tcc)、Tcc がįĩ‚わãŖãĻから T1 を(ry - - įžåœ¨ã¯ã€į”Ÿæˆã—たã‚ŋ゚クすずãĻãĢ寞しãĻ wait_for をかけãĻる感じ。 - しかし、䞋えば Frame Buffer ãĢ書きčžŧむ時は垅つåŋ…čĻãĒい(はず)ãĒぎで - ã‚ŋ゚ク毎ãĢ wait_for を選ずるようãĢした斚がいいだろう。 - - __ 例題 - cvs firefly:Game_project/student/master/gongo/Renew - - ãĢありぞす。 - ã‚‚ã†ãĄã‚‡ã„ãĄã‚ƒã‚“ã¨ã—ãŸäž‹éĄŒãŒæŦ˛ã—いところです。 - - - __ į›´ã—たいところ (1) - - įžåœ¨ã€Tc をįŽĄį†ã™ã‚‹æ§‹é€ äŊ“としãĻ、TaskGroup をäŊŋãŖãĻぞす - - class TaskGroup { - unsigned int command; // T1 が PPE ãĢ送るã‚ŗマãƒŗド - __gnu_cxx::slist group; // Tc がある Linked List - - // function はįœį•Ĩ - }; - - slist じゃãĒくãĻ、TaskQueue ãŋたいãĢč‡Ē分でäŊœãŖãĻã‚‚č‰¯ã‹ãŖたんだけお。 - group.empty() == true ãĢãĒãŖたら、command を PPE ãĢ送るãŖãĻ感じです。 - - で、slist が持つデãƒŧã‚ŋが TaskPtr じゃãĒくãĻ int ぎį†į”ąã€‚ - ぞあいろいろあるんだけお(äŊ•)、ã‚ĸドãƒŦã‚šãŒé‡č¤‡ã—ãĻしぞうことです。 - 最初は、create_task で垗られた TaskPtr をキãƒŧとしãĻäŊŋうつもりだãŖたけお - そぎ TaskPtr は TaskList から取ãŖたį‰Šã§ (&list->takss[index] ãŋたいãĒ) - ãĒんでそれじゃだめãĒぎか。buff_taskList[2] (Scheduler.cpp 参į…§) を - äŊŋうと、äē¤äē’ãĢäŊŋį”¨ã™ã‚‹ãŽã§ã‚ĸドãƒŦ゚はčĸĢる。 - 新たãĢ allocate ã™ã‚Œã°å•éĄŒã¯į„Ąã„が (t1とする)、SPE ぎ LS ãŽå•éĄŒã§ - äŊŋわãĒくãĒãŖた TaskList は free しãĻいかãĒいといけãĒい。 - で、free -> 再ãŗ allocate したとき (t2とする)、t1 と t2 ぎ - ã‚ĸドãƒŦ゚がčĸĢることがあãŖた。åŊ“į„ļ TaskPtr もčĸĢると。 - だから、ã‚ĸドãƒŦ゚ではãĒく、TaskGorup が持つ - unsigned int cur_id をäŊŋうäē‹ãĢしぞした。 - - ãĒんかここぞでč‡Ē分で書いãĻãĻ、 - ãĒんでå‡ēæĨãĒいぎかぞだわからんくãĒãŖãĻきた。 - - ぎでčŠĻしãĢæˆģしãĻãŋたら īŧŠã€€ã§ã€€īŧŠã€€ãã€€īŧŠã€€ãžã€€īŧŠã€€ã— īŧŠã€€ãŸã€€īŧŠ - わけわからん。ぞあ勘違いだãŖたぎか、いろいろåˆĨぎところをį›´ã—ãĻã‚‹ã†ãĄãĢ - įŸĨらずįŸĨらずミ゚ãŖãĻたところもæ˛ģãŖãĻたぎか。ぞあいいか。 - - と思ãŖãĻいろいろčŠĻしたらぞた動かãĒくãĒãŖた。。もうだめãŊ - とりあえず、ぞた unsigned int ãĢæˆģしぞした。 - äģŠãŽã¨ã“ろ、0 <= cur_id <= 0xffff (65535) ぎį¯„å›˛ãŽã‚­ãƒŧをäŊŋうようãĢ。 - - - __ į›´ã—たいところ (2) - if 文が多い。 - äģŠã¯ã€ã€Œé€šå¸¸ãŽ Task」「ã‚ŋ゚ク内でį”Ÿæˆã•ã‚ŒãŸã‚ŋ゚ク」で挙動が違いぞす。 - 䞋えば - - - SPE で allocate されたデãƒŧã‚ŋをäŊŋうぎで、通常 DMA をäŊŋうところは - ã‚ĸドãƒŦ゚参į…§ã‚„ memcpy をäŊŋう - - TaskGroup ã‚’ã€ä¸Šč¨˜ãŽ Tc や Tcc へåŧ•ãįļ™ãŒã›ã‚‹ã¨ã“ろ - - ãĒぎで、flag_renewTask とかいう変数で、ãģãŧ if 文 で書いãĻぞす。 - SPE でこぎ書き斚はかãĒã‚Šãžãšã„æ°—ãŒã—ãžã™ã€‚č‰¯ã„æ›¸ãæ–šã¯ãĒいもぎか。。。 - 「通常ぎ(ry」「ã‚ŋ゚ク内(ry」で新たãĢイãƒŗã‚šã‚ŋãƒŗã‚šã‚’äŊœã‚‹ãŖãĻぎも - č€ƒãˆã¯ã—ãžã—ãŸãŒ (SchedTask = 通常、SchedRenewTask = ã‚ŋ゚ク内(ry とか) - これだと ãƒĻãƒŧã‚ļãƒŧ側も こぎäēŒã¤ã‚’選んでやることãĢãĒりぞす。 - 「こぎã‚ŋ゚クは SchedRenewTask 、こぎã‚ŋ゚クは通常」とかやるぎは - かãĒりめんおくさいと思う。だからナイブナãƒĒ側で分けるずきか。。。 - 多重įļ™æ‰ŋとかãŖãĻこんãĒときåŊšãĢįĢ‹ã¤ã‚“īŧŸ - - -2008-07-03 Wataru MIYAGUNI - - * TODO: - - add_param ã§æ¸Ąã›ã‚‹ãƒ‘ãƒŠãƒĄãƒŧã‚ŋぎ数をåĸ—やす。15もあればいいんじゃねīŧŸ - - äģŠãŽåŽŸčŖ…では、 - - 1. PPE でã‚ŋ゚ク(T1)がį”Ÿæˆã•ã‚Œã‚‹ - 2. SPE で T1 ãŒåŽŸčĄŒã•ã‚Œã‚‹ - 3. T1 がįĩ‚わãŖたäē‹ã‚’ PPE ãĢ mailbox で送る - é€ã‚‹æƒ…å ąã¯ T1 č‡ĒčēĢ。(PPE でį”Ÿæˆã•ã‚ŒãŸæ™‚ぎã‚ĸドãƒŦã‚š) - - ãĒわけです。しかし、もし T1 から新たãĢã‚ŋ゚クがį”Ÿæˆã•ã‚ŒãŸæ™‚はおうするか - äģŽãĢ T1 から T2, T3, T4 がäŊœã‚‰ã‚ŒãŸã¨ã™ã‚‹ã€‚ - こぎとき、 - - 1. T1 がįĩ‚わãŖた時į‚šã§ã€T1 からįĩ‚äē†ã‚ŗマãƒŗドを送る - 2. T1 だけでãĒく、T1 内でäŊœã‚‰ã‚ŒãŸ T2, T3, T4 がįĩ‚わãŖãĻから - įĩ‚äē†ã‚ŗマãƒŗドを送る - - ぎäēŒã¤ãŒč€ƒãˆã‚‰ã‚Œã‚‹ã€‚ - PPE 側では T1 しかčĒč­˜ã—ãĻいãĒいため、こぎ判厚は SPE 内でやることãĢãĒる - åŋ…čĻãĒå‡Ļį†ã‹ã¨č¨€ã‚ã‚Œã‚‹ã¨åžŽåĻ™ã ãŒã€æŦ˛ã—くãĒるぎは間違いãĒい。 - つãƒŧことでäģŠã“れを原čŖ…中です。 - - - * tag: v20080703 - - ã‚ŋ゚クãĢ 32 bits ãƒ‘ãƒŠãƒĄãƒŧã‚ŋã‚’æ¸Ąã™ add_param を原čŖ…(įžåœ¨ã¯3個ぞで) - - SPE 内部でã‚ŋ゚クį”ŸæˆãŒã§ãã‚‹ã‚ˆã†ãĢãĒãŖた - - * add (API): SPE内部でぎ create_task - äģŠãžã§ã€SPE ではã‚ŋ゚クをį”Ÿæˆã™ã‚‹äē‹ã¯å‡ēæĨず、 - PPE から送られãĻくるã‚ŋã‚šã‚¯ã‚’åŽŸčĄŒã™ã‚‹ã ã‘ã§ã—ãŸã€‚ - それだと不äžŋだãŖãĻことで SPE 内部でもできるようãĢしぞした。 - æ–šæŗ•ã¯PPEでやるぎと同じく - - task = create_task(TASK_EXEC); - task->add_inData(buff, sizeof(Buff)); - task->add_param(data); - - ãŋたいãĒ感じでいいです。 - spawn() や wait_for() は原čŖ…しãĻいぞせん。 - SPE 内部でį”Ÿæˆã™ã‚‹ã‚ŋ゚ク同åŖĢで䞝存é–ĸäŋ‚äŊœã‚‹ãŽãŒ - įĩæ§‹ã‚ã‚“おくさいからです。spawn() も、しãĒくãĻも勝手ãĢåŽŸčĄŒã—ãžã™ã€‚ - PPE とそろえる意å‘ŗでäŊœãŖãĻもいいんだけおね。 - そぎためãĢは SPE ãĢも TaskManager がåŋ…čĻãĢãĒãŖãĻくるãĒãƒŧ。 - - -2008-06-24 Wataru MIYAGUNI - - * add (API): add_param, get_param - DMA で送れãĒいけお、åŋ…čĻãĢãĒãŖãĻくる 4 ãƒã‚¤ãƒˆãŽæƒ…å ąãŒã‚ã‚‹ã¨ã—ãĻ - それはäģŠãžã§ã¯ - - add_inData(param, 0); - - とかしãĻ、「ã‚ĩイã‚ē == 0 ãĒら 32 bit ぎデãƒŧã‚ŋ」としãĻいたけお - それはäŊ™ã‚ŠãĢも変ãĒぎで(é–ĸ数ぎ意å‘ŗįš„ãĢもおかしい)ぎで、 - - add_param(parameter); - - ãŖãĻぎをčŋŊ加しぞした。ã‚ŋ゚ク側では - - get_param(index); - - とかしぞす。index は、add_param をå‘ŧãŗå‡ēした順į•Ēでæąēぞりぞす - - add_param(x); - add_param(y); - add_param(z); - - とあるとき、ã‚ŋ゚ク側では - - int x = get_param(0); - int z = get_param(2); - - としぞす。 - äģŠãŽã¨ã“ろ parameter は 3つしか送れãĒいことãĢãĒãŖãĻぞすが - 垌ãģお、上限をあげぞす。15くらいあればäŊ™čŖ•ã ã¨æ€ã†ã‚“だがおうだいīŧŸ - äģŠã¯ã€SPE でぎã‚ŋ゚クぎį”ŸæˆãŽãƒĢãƒŧチãƒŗを書くためãĢ、最äŊŽé™ãĒ部分だけ - ãŖãĻことで 3 つãĢしãĻぞす。それがå‡ēæĨæŦĄįŦŦ、これもやりぞす。 - - -2008-06-12 Wataru MIYAGUNI - - * Cell/CellTaskManagerImpl.cpp (CellTaskManagerImpl::set_runTaskList): - ã‚ĸホãĒミ゚(ry - - 「list が持つ TASK_MAX_SIZE をčļ…えると、æŦĄãŽ list へ next を」ãŖãĻいう - 前回į›´ã—たところがぞたミ゚ãŖãĻãĻだãĒ。 - į°Ąå˜ãĢč¨€ã†ã¨ - - TaskPtr task = &list[list->length++]; - [task ぎ初期化] - - if (list->length > TASK_MAX_SIZE) { - [newList į”Ÿæˆ] - newList = append(newList, topList[speid]); - topList[speid] = newList; - } - - ãŖãĻやãŖãĻたわけ。これだと、toplist[speid] ãĢ - length = 0 ぎ list がæĨる可čƒŊ性があると。 - で、spe ãĢ TaskList ã‚’é€ã‚‹æĄäģļは - - 1. taskList[speid]->length >= 1 - 2. speid がæŦĄãŽ TaskList ã‚’åž…ãŖãĻいるįŠļ態 - - で、1 ãŽæĄäģļãĢč§ĻれãĻしぞい、TaskList が送られãĒくãĒãŖãĻ - プログナムがįĩ‚äē†ã—ãĒいと。ã‚ĸホですね〜 - 上ぎ if 文を &list[list->length++]; ぎ前ãĢ持ãŖãĻčĄŒãã ã‘ã§ãŠk。 - -2008-06-10 Wataru MIYAGUNI - - * Cell/CellTaskManagerImpl.cpp (CellTaskManagerImpl::set_runTaskList): - ã‚ĸホãĒミ゚しãĻぞした。 - list が持つ TASK_MAX_SIZE をčļ…えると、æŦĄãŽ list へ - next をįš‹ã’るはずãĒんだけお、speTaskList_bg[speid] とかčĒ­ã‚€æ™‚ãĢ - ãĄã‚ƒã‚“ã¨įš‹ã’られãĻãĒかãŖたというかãĒんというか。 - į°Ąå˜ãĢč¨€ã†ã¨ã€ã‚ŋ゚ク多くãĒるとčŊãĄ(ry - - * add (API): set_post - - create_task(id, 0); - - とかわざわざ 0 äģ˜ã‘るぎもã‚ĸãƒŦãĒぎで、もうそれようãĢ - - task->set_post(func) - - をčŋŊ加しぞした。func は void (*func)(void) です。 - せãŖかくだから、åŧ•æ•°ãĢ void* とかäģ˜ã‘ãĻもいいんじゃãĒいかと。 - - - * fix (API): ListDMA API - ã‚ŋ゚ク側で、ListDMA で指厚したデãƒŧã‚ŋぎ取り斚 - - run(rbuf, wbuf) としãĻ - - // index は add_inData や add_outData で指厚した(順į•Ē-1) - get_input(rbuf, index); - get_input(wbuf, index); - - čŋ”り値は void* ãĒぎで、malloc ãŖãŊくキãƒŖ゚トしãĻください。 - あと、4バイトäģĨ下ぎデãƒŧã‚ŋを送りたい場合、main で - - add_inData(data, 0) - - と、ã‚ĸドãƒŦ゚は送りたいデãƒŧã‚ŋを則値で、ã‚ĩイã‚ēは 0 で指厚するとおk。 - get_input で int ãĒりãĒんãĒりでキãƒŖ゚トすればいいじゃãĒいīŧ - äž‹éĄŒã¯ - - Game_project/student/master/gongo/arr_cal - - ã§č¤‡æ•°ãƒ‡ãƒŧã‚ŋæ‰ąãŖãĻたり4バイト送ãŖãĻたりしãĻぞす。 - - - * tag: v20080610 - 前回とぎ違いは - - - ListDMA ぎ導å…Ĩ - - å‡ĄãƒŸã‚šfix - - とかかãĒ。äŊ•æ°—ãĢここãĢは ListDMA ぎ API 書いãĻãĒかãŖたãĒ。 - - - task->add_inData(addr, size); // input - - task->add_outData(addr, size); // output - - これで Input/Output ぎデãƒŧã‚ŋ領域を指厚可čƒŊã€‚č¤‡æ•°ã§ããžã™ã€‚ - čŠŗしくはいずれドキãƒĨãƒĄãƒŗトãĢ書くäēˆåŽšã ãŒã€ - - - addr は 16 バイトã‚ĸãƒŠã‚¤ãƒĄãƒŗトãĢ取れãĻãĒã„ã¨čĄŒã‘ãĒい - - size は 16 バイト倍数 - - ãŖãĻぎが最äŊŽæĄäģļ。 - 16 バイトæœĒæē€ãŽãƒ‡ãƒŧã‚ŋを送りたいとき(整数を2,3個とか)ã¯č€ƒãˆä¸­ã€‚ - addr ãĢį›´æŽĨæ¸Ąã™ãŖãĻ手æŗ•ã¯ã§ãã‚‹ã¨ã‚ã‹ãŖãĻるぎで、それでもいいかãĒ。 - ãžã‚ã„ã‚ã„ã‚å•éĄŒã¯ã‚ã‚Šãžã™ãŒã€å°‘ã—ã¯ã§ããŸã‚“ã˜ã‚ƒãĒいかãĒ。 - - æŦĄã‹ã‚‰ã¯ SPE 内でぎã‚ŋ゚クį”Ÿæˆ(再čĩˇå‹•īŧŸ)を書くäēˆåŽš - - * Cell/CellTaskManagerImpl.cpp (CellTaskManagerImpl::set_runTaskList): - if (speid > machineNum) { - speid %= MAX_USE_SPE_NUM; - } - - から - - if (speid >= machineNum) { - speid %= machineNum; - } - - ãĢ。ãĒã‚“ã¨ã„ã†å‡ĄãƒŸã‚š - - * Cell/spe/CellDmaManager.cpp (CellDmaManager::dma_loadList): fix - ListData が持つ ListElement は - - class ListElement { - public: - int size; - unsigned int addr; - }; - - というデãƒŧã‚ŋ構造ãĒわけだが、これは、spu_mfcio.h が持ãŖãĻいãĻ - 且つ List DMA でäŊŋį”¨ã•ã‚Œã‚‹ - - typedef struct mfc_list_element { - uint64_t notify : 1; /** Stall-and-notify bit */ - uint64_t reserved : 16; - uint64_t size : 15; /** Transfer size */ - uint64_t eal : 32; /** Lower word of effective address */ - } mfc_list_element_t; - - と同じである。notify と reserved は 0 とãĒる (゚トãƒŧãƒĢはäģŠã¯ - č€ƒãˆãĻいãĒい)ぎで、įĩåą€ã¯ uint が 2 つぎ 8 バイト ぎデãƒŧã‚ŋ構造であれば - そぎぞぞ mfc_getl とか mfc_putl ãĢ遅れるわけである。 - äģŠãžã§ã¯ mfc_list_element_t 構造äŊ“ãĢ for æ–‡ã§ã„ãĄã„ãĄäģŖå…ĨしãĻたが - ぞあそれはãĒくãĒãŖたãŖつãƒŧことで。dma_storeList もね。 - - -2008-05-30 Wataru MIYAGUNI - - * change (API): TaskManager Memory Allocate - manager->cerium_malloc(&buff, DEFAULT_ALIGNMENT, sizeof(Data)) - - から - - buff = (Data*)manager->malloc(sizeof(Data)); - - ãĢ変更しぞした。 - alignment ぎ指厚は全ãĻ TaskManager ãĢ埋めčžŧんでありぞす。 - 記čŋ°ã¯ TaskManager.h ãĢ書いãĻありぞす。 - - void* TaskManager::malloc(int size) { - return m_impl->allocate(DEFAULT_ALIGNMENT, size); - } - -2008-05-29 Wataru MIYAGUNI - - * thinking: List DMA (4) - Cell į‰ˆã§ã‚‚動いたぎをįĸēčĒã€‚äģŠã€Cell į‰ˆã§ List DMA ãŒå‹•ãæĄäģļは - - 1. List ぎ各čĻį´ ãŽčģĸ送ã‚ĩイã‚ēが 16 バイト倍数でãĒければãĒらãĒい - 2. List ぎ各čĻį´ ãŽčģĸ送するデãƒŧã‚ŋぎã‚ĸドãƒŦ゚ぎã‚ĸãƒŠã‚¤ãƒĄãƒŗトをäŋč¨ŧ(16or128 - - 2ãĢé–ĸしãĻは Cell ぎäģ•æ§˜ãĒんでぞあいいんだけお、 - 1は、ドキãƒĨãƒĄãƒŗトčĻ‹ã‚‹åˆ†ãĢは - - - Cell Broadband Engine ã‚ĸãƒŧキテクチãƒŖ version 1.01 より - - 7.5.3 get list - > ãƒĒ゚トãƒģã‚ĩイã‚ēãƒģãƒ‘ãƒŠãƒĄãƒŧã‚ŋは、こぎDMAã‚ŗマãƒŗドぎ場合は - > 8バイトぎ倍数でãĒければãĒらず、ぞた、ãƒĒ゚トãƒģã‚ĸドãƒŦã‚šãƒģãƒ‘ãƒŠãƒĄãƒŧã‚ŋは、 - > ロãƒŧã‚ĢãƒĢ゚トãƒŦãƒŧジぎ8バイトåĸƒį•ŒãĢã‚ĸナイãƒŗされãĒければãĒりぞせん。 - - ãŖãĻ書いãĻるんだよãĒ。int が 10 個ぎ配列(40バイト) を送ãŖãĻも - čĻ‹äē‹ãĢåŧžã‹ã‚ŒãŸã‚“だよãĒ。おぎれバ゚エナãƒŧめīŧ - ã¨ã‚Šã‚ãˆãšã€ä¸ŠãŽæĄäģļをæē€ãŸã›ã°čĄŒã‘ぞした。 - 送るデãƒŧã‚ŋぎã‚ĸãƒ­ã‚ąãƒŧトは - - TaskManager::cerium_allocate(void **buff, int align, int size); - - ãŖãĻぎをäŊœã‚Šãžã—た。äŊŋい斚はåˆĨ項į›Žã§ã€‚だいたい posix_memalign æē–拠。 - - 動くぎはいいんだけお、これだとãƒĻãƒŧã‚ļãĢ全部äģģせるäē‹ãĢãĒりぞす。 - į‰šãĢ、配列をã‚ĸãƒ­ã‚ąãƒŧトした垌、そぎ途中ぎ部分をãƒĒ゚トãĢå…Ĩれたい時。 - そぎ配列ぎčĻį´ ãŽã‚ĩイã‚ēが16倍数じゃãĒいとそこでエナãƒŧがでると。 - それをãƒĻãƒŧã‚ļãĢ全部äģģせるぎは、ぞあいけãĒいこともãĒいけおさ。。。 - - - * Cell/CellTaskManagerImpl.cpp (CellTaskManagerImpl::mail_check): fix - CellTaskManager は FifoTaskManager ぎã‚Ēブジェクトを - ppeManager という変数で持ãŖãĻいãĻ、äŊœæĨ­ã‚’åˆĨ々ãĢ行ãŖãĻいるわけで。 - ã ã‘ãŠä¸Ąæ–šãŽã‚Ēブジェクトがもつ waitTaskQueue は同じじゃãĒいと - ãĒらãĒいぎで、最初は TaskQueuePtr * ã¨ã‹ã§æ¸Ąã—ãĻ - å…ąæœ‰ã—ãĻãŸã‚ã‘ã ã‘ãŠã€ã‚ˆãã‚ˆãč€ƒãˆã‚‹ã¨ã€ - - - waitTaskQueue ãĢ task が append される時 - CellTaskManager->append_waitTask() - - - waitTaskQueue から task が remove されるとき(䞝存æē€ãŸã—た時とか) - FifoTaskManagerImpl->mail_check() 及ãŗ - CellTaskManagerImpl->mail_check() です。 - - つぞり、waitTaskQueue ãŒå…ąæœ‰ã•ã‚Œã‚‹ãŽã¯ mail_check だけãĒぎで、 - CellTaskManagerImpl ぎ mail_check で - - ppeManager->mail_check(mail_list, &waitTaskQueue) - - としãĻ、ここで waitTaskQueue を参į…§æ¸Ąã—しãĻぞす。 - ppeManager->mail_check で waitTaskQueue ぎ整į†ãŒįĩ‚わãŖãĻ - æˆģãŖãĻくるäē‹ãĢは waitTaskQueue が更新されãĻいると。 - - ãĒんか文įĢ ãŒãŠã‹ã—いですね。気ãĢãĒるäēēはäŋēãĢį›´ã§ãŠéĄ˜ã„しぞす。 - čĻã™ã‚‹ãĢ、ppe と spe ぎそれぞれぎ TaskManagerImpl で - waitTaskQueue ãŽå…ąæœ‰ãŒä¸Šæ‰‹ãã„ãŖたというわけです。 - - -2008-05-24 Wataru MIYAGUNI - - * thinking: List DMA (3) - įžåœ¨åŽŸčŖ…中。Fifo į‰ˆã§ã¯å‹•ã„ãĻã„ã‚‹æ¨Ąæ§˜ã€‚ - å•éĄŒã¯ Cell だよãĒãƒŧã€‚č€ƒãˆãĒã„ã¨čĄŒã‘ãĒいäē‹ãŒã„くつか - - - Input/Output デãƒŧã‚ŋはã‚ĸãƒŠã‚¤ãƒĄãƒŗトされãĻいるīŧŸ - ã‚ĸãƒŠã‚¤ãƒĄãƒŗトされãĻいãĒくãĻも、こãŖãĄã§ã‚ĸドãƒŦ゚ずらしãĻ - DMAしãĻずらしãĻ run() ãĢæ¸Ąã—ãĻ〜とかもできるんだけお - かãĒりめんおくさい。それãĢ、In ãĒらともかく、 - Out は変ãĒ領域ãĢ書きčžŧãŋそうãĒぎでį„Ąį†ãã†ã€‚ - これはもうãƒĻãƒŧã‚ļが、送るデãƒŧã‚ŋはすずãĻ - Cerium_malloc įš„ãĒもぎを通したもぎだけ、ãŖãĻいう - åˆļį´„ãĢした斚がいいかもしれãĒい。ãĻかそうãĒんだãŖけ。 - - - 配列中ぎデãƒŧã‚ŋぎ指厚 - 上ぎ項į›Žã¨å°‘しé–ĸé€Ŗがあるんだが、䞋えば - - int data[100]; // ã‚ĸãƒŠã‚¤ãƒĄãƒŗトは取れãĻるとする - - ãŖãĻぎがあãŖãĻ、そぎãĒかぎ data[0]〜data[49]、 - data[50] 〜 最垌ぞで送りたいとする。 - 最初ぎやつは &data[0] ぎã‚ĸドãƒŦ゚は 16 bytes ã‚ĸãƒŠã‚¤ãƒĄãƒŗトだけお、 - &data[50] では、sizeof(int)*50 = おそらく 200 ずれãĻ - 16 bytes ã‚ĸãƒŠã‚¤ãƒĄãƒŗトではãĒくãĒると。これだと DMA できãĒい。 - ãƒĻãƒŧã‚ļãŒãã“ãžã§č€ƒãˆãĻ、䞋えば data[32] から送る、とかでもいいけお。 - ナイブナãƒĒå´ã§ã€å°‘ã—ã¯čžé€šåŠšãã‚ˆã†ãĢすずきかãĒ。 - やるãĒら、ã‚ĸドãƒŦ゚ずらしãĻ取ãŖãĻæĨãĻ、ãƒĻãƒŧã‚ļがčĻ‹ã‚‹ãƒ‡ãƒŧã‚ŋは - そぎずらした分æˆģしãĻからčĻ‹ã›ã‚‹ãŖãĻ感じ。変ãĒčĒŦ明だが。 - - うãƒŧん。äģŠã¯ã¨ã‚Šã‚えず全ãĻã‚ĸãƒŠã‚¤ãƒĄãƒŗト大丈å¤ĢãĒ斚向でやãŖãĻãŋるか。 - - -2008-05-23 Wataru MIYAGUNI - - * Cell/SpeThreads.cpp (SpeThreads::init): ã‚šãƒŦッドぎį”Ÿæˆ - äģŠãžã§äŊœã‚‰ã‚ŒãĻた゚ãƒŦッドは - - - spe_context_run ã‚’åŽŸčĄŒã™ã‚‹ã ã‘ãŽã‚šãƒŦッド (spe_thread_run) - - 上ぎ゚ãƒŦッドをå‘ŧãŗå‡ēし、įĩ‚äē†ã‚’垅つ゚ãƒŦッド (frontend_thread_run) - - īŧ’į•Ēį›ŽãĢäŊ•ãŽæ„å‘ŗがあるぎかということだが、 - SPE 毎ãĢã‚šãƒŦッドをįĢ‹ãĄä¸Šã’ãĻおいãĻ、 - それぞれぎSPEã‹ã‚‰ãŽãƒĄãƒŧãƒĢは、そぎ担åŊ“する゚ãƒŦッドがčĻ‹ã‚‹ã€ - ãŖãĻ構æƒŗでäŊœãŖãĻいぞした。だけお、äģŠã¯ mailbox ãŽæ‰ąã„ã¯ - Cell/CellTaskManagerImpl::mail_check ã§čĄŒãŖãĻいるため - わざわざīŧ’į•Ēį›ŽãŽã‚šãƒŦッドをäŊœã‚‹åŋ…čĻãŒãĒくãĒりぞした。 - つãƒŧことで、frontend_thread_run ではãĒく、 - 最初から spe_thread_run をčĩˇå‹•ã™ã‚Œã°ãŠkとãĒりぞした。 - - * Cell/SpeThreads.cpp (SpeThreads::get_mail): if 文排除 - äģŠãžã§ã¯ - - if (spe_out_mbox_read(spe_ctx[speid], &ret, 1) < 0) { - return ret; - else - return -1; - - とやãŖãĻいた。これは - - - デãƒŧã‚ŋをčĒ­ã‚ãŸã‚‰ãã‚Œ(ret)をčŋ”す - - デãƒŧã‚ŋがį„Ąã‹ãŖたら -1 をčŋ”す - - ãŖãĻことだãŖãŸã‚“ã ãŒã€ã‚ˆãã‚ˆãč€ƒãˆã‚‹ã¨ã€spe_out_mbox_read() は - デãƒŧã‚ŋがãĒかãŖた場合 ret ぎ値を変えãĒいぎで、最初ãĢ - - unsigned int ret = (unsigned int)-1; - - としãĻおけば、最įĩ‚įš„ãĢ if 文į„Ąã—ぎ - - spe_out_mbox_read(spe_ctx[speid], &ret, 1); - return ret; - - だけで済むわけだ。 - -2008-05-22 Wataru MIYAGUNI - - * thinking: List DMA (2) - MFC List DMA read ぎ場合は(少ãĒくともPPEでcreate_taskする時は) - read size がæąēぞãŖãĻいるぎでį„Ąå•éĄŒã€‚ - しかし、MFC List DMA write ぎ場合。同じã‚ŋ゚クでも - 違うã‚ĩイã‚ēをå‡ēåŠ›ã™ã‚‹ã¨ã„ã†ã“ã¨ã¯ã‚ã‚Šãˆã‚‹ãŽã§å•éĄŒã€‚ - äģŠãžã§ã‚‚、write ぎ場合は task->run() ぎčŋ”す値が write size としãĻ - äŊŋうäē‹ãĢしãĻいた。List DMA write ぎ場合は、おそらく - - - task->run() 内で write į”¨ãŽ List DMA 構造äŊ“ã‚’äŊœãŖãĻ Scheduler ãĢ - æ¸Ąã—ãĻ、task->write() でやãŖãĻもらう - - ãŖãĻ感じīŧŸ でも(上ぎ手æŗ•ãĢ限らず)、write ぎã‚ĩイã‚ēがæąēぞãŖãĻãĒいと - write į”¨ãƒãƒƒãƒ•ã‚Ąã‚’į”Ÿæˆã—ãĻおくäē‹ãŒã§ããĒいぎで - 書きčžŧめãĒい or あらかじめ多めãĢ取ãŖãĻおくãŖãĻことがåŋ…čĻãĢãĒる。 - åžŒč€…ã¯ SPE ãĢはį—›æ‰‹(昔はåŧˇåˆļ16KBįĸēäŋã¨ã‹ã‚„ãŖãĻたãĒ)ãĒぎで垎åĻ™ã€‚ - å‰č€…ã¯čĢ–外だろう。 - - うãƒŧん、おうすãŖかãĒ。Single DMA write ãŽé ƒã‹ã‚‰ã“ã‚Œã¯å•éĄŒã§ã‚ãŖãĻ。 - 最æ‚Ē、ãƒĻãƒŧã‚ļが「write ぎã‚ĩイã‚ēが変動しãĒいようãĒã‚ŋ゚クãĢする」とかīŧŸ - - * thinking: List DMA - - 構æƒŗとしãĻはäģĨ下ぎようãĒč€ƒãˆã€‚ - - class Task { - int cmd; - DataListDMA *rlist; - DataListDMA *wlist; - }; - - class DataListDMA { - int length; // ãƒĒ゚トぎ数 - unsigned int addr[128]; // ã‚ĸドãƒŦã‚š - int size[128]; // そぎã‚ĸドãƒŦ゚から取垗するデãƒŧã‚ŋぎã‚ĩイã‚ē - }; - - 128 という数字は、一つぎã‚ŋ゚クが持ãĻるãƒĒã‚šãƒˆãŽåˆč¨ˆã‚ĩイã‚ēを - 1KB (= 1024B) ãĢしようãŖãĻことで 4*128+4*128 = 1024 としぞした。 - ListDMA をäŊŋうæĩã‚Œã¨ã—ãĻは - - 1. Scheduler から cmd ãĢそãŖた Task をį”Ÿæˆã™ã‚‹ - 2. Task ぎã‚ŗãƒŗ゚トナクã‚ŋ(もしくは Task をį”Ÿæˆã™ã‚‹ implement 内 )で - task->rlist, task->wlist を DMA read しãĻおく (ここは通常ぎDMA) - 3. task->read() で MFC List DMA で List をčĒ­ã‚€ - - DataListDMA->length ãĢé–ĸしãĻは、Task ぎ中ãĢå…Ĩれるぎも有りかと思う。 - そぎ場合は、2 ぎ DMA read で、わざわざ 1KB 全部čĒ­ã‚€åŋ…čĻã¯į„ĄããĒる。 - - - * tag: v20080522 - - PPE 側ぎã‚ŋ゚クも SPE と同じく、クナ゚ã‚ĒブジェクトとしãĻį™ģ録 - - PPE、SPE 側ぎ TaskManagerImpl を整į†ã€‚čĻ‹ã‚„すくãĒãŖたと思われ - - こんãĒところかãĒãƒŧ。 - テ゚トプログナムは - - Game_project/student/master/gongo/hello - - ãĢありぞす。DMA ãŽäž‹éĄŒãžã ã ãŖたぜHAHAHA - ここからは List DMA ぎå‡Ļį†ã‚’å…ĨれãĻčĄŒããŸã„ã¨æ€ã„ãžã™ã€‚ - - įžåœ¨ãŽ simple_render ぎバãƒŧジョãƒŗは - PPE ぎã‚ŋ゚クがé–ĸ数ベãƒŧ゚だãŖた頃ぎãĒぎでそぎぞぞでは動きぞせん。 - List DMA ができるか、気晴らしãĢ描きį›´ã™ã¨æ€ã„ぞす。 - - * Task 厚įžŠãĢついãĻ - PPE も C++ ぎクナ゚ã‚ĒブジェクトとしãĻã‚ŋ゚クを厚įžŠã™ã‚‹ã‚ˆã†ãĢしぞした。 - ãĄã‚ƒã‚“ã¨ã—ãŸ API ã‚’č€ƒãˆãŸã‚‰æ”šã‚ãĻ書きぞす。 - - * ãƒĄãƒŧãƒĢチェックからæŦĄãŽã‚ŋ゚クãƒĒ゚トį”Ÿæˆãžã§ãŽæĩã‚ŒãŽå¤‰æ›´ - äģŠãžã§ãŽ FifoTaskManagerImpl ぎ mail_check では - - 1. mail_check - 1.1 check_task_finish - 1.1.1 notify_wait_taskQueue - 1.1.1.1 append_activeTask (䞝存æē€ãŸã—たã‚ŋ゚クを) - 1.2 get_runTaskList - - と、全ãĻ mail_check ぎ中でįĩ‚わãŖãĻたんですが、これを - - 1. mail_check - 1.1 check_task_finish - 1.1.1 notify_task_finish - 2. wakeup_waitTask (つぞり append_activeTask) - 3. get_runTaskList - - というようãĢåˆ†å‰˛ã—ãžã—ãŸã€‚ - おかげで CellTaskManagerImpl ぎ mail_check もすãŖきり。 - -2008-05-13 Wataru MIYAGUNI - - * Cell/CellTaskManagerImpl.cpp (CellTaskManagerImpl::set_task): - // set_task ãŖãĻ名前やめねīŧŸ - - おぎ SPE ãĢ振るかãŖãĻ判厚を少し変更。 - cur_anySpeid ぎåŽŖč¨€å ´æ‰€ãŽã‚ŗãƒĄãƒŗトãĢもあるけお、 - これはイãƒŗクãƒĒãƒĄãƒŗトじゃãĒくãĻäšąæ•°ãŽæ–šãŒ - より SPE_ANY ãŖãŊいぎか。むしろ「äģ•äē‹ã—ãĻãĒい斚ãĢå‰˛ã‚ŠæŒ¯ã‚‹ã€ãŖãĻぎが - SPE_ANY ぎåŊšį›ŽãĒ気がするãĒ。ã‚Ļãƒŧム。。。 - -2008-05-05 Wataru MIYAGUNI - - * Cell/CellTaskManagerImpl.cpp (CellTaskManagerImpl::mail_check): - PPE ãĢã¯åŽŸčĄŒã™ã‚‹ã‚ŋ゚クが一つもį„Ąã„時ぎ動äŊœãŒãŠã‹ã—かãŖた。 - čĻã™ã‚‹ãĢ、 - - PPE ã§åŽŸčĄŒã™ã‚‹ã‚ŋ゚クは全ãĻ SPE ã§åŽŸčĄŒä¸­ãŽã‚ŋã‚šã‚¯åž…ãĄ - - ãŖãĻ時。。。よけいわからãĒくãĒãŖたãĒ。 - ぞあãĒんだ、äģŠãžã§ åŋ…ずã‚ŋ゚クが PPE and SPE ãĢあãŖたんだけお - PPE or SPE ãŖãĻか、おãŖãĄã‹į‰‡æ–šã§ã—か動いãĻãĒいįŠļæŗã ã¨ - įĩ‚äē†åˆ¤åŽšã¨ã„うか、それがおかしかãŖたãŖãŊい。 - - Hello World でぎã‚ŋ゚クは - - 1. "Hello World!!" ã¨čĄ¨į¤ēするã‚ŋ゚ク (2.) をį™ēčĄŒã™ã‚‹ã‚ŋ゚ク - 2. 襨į¤ēするã‚ŋ゚ク - 3. 2 が全ãĻįĩ‚わãŖãŸã‚‰åŽŸčĄŒã•ã‚Œã‚‹ã€æœ€åžŒãŽã‚ŋ゚ク(į•Ēå…ĩįš„ãĒ - - こぎ時、(2) が SPE ã ã‘ã§åŽŸčĄŒã•ã‚ŒãĻると、 - (2) ぎįĩ‚äē†ã‚’垅つ (3) ぎ判厚īŧŸã¨ã„うか、それがおかしい - - - もうįœ ããĻわけわからん。 - 一åŋœå‹•ã„たんだけお、やはり描きį›´ã—ぞす。 - æ°—æŒãĄæ‚ĒいãģおやãŖつけãĒ書き斚しãĻるぎで。これはきもい。。。 - -2008-03-09 Wataru MIYAGUNI - - * memo: pthread_cond_wait - こぎ ChangeLog ãĢ書くもぎでもãĒã„ãŒã€ãžã‚ãƒĄãƒĸ。 - - ã‚ģマフりぎ P 動äŊœã¯ã€åŸēæœŦįš„ãĢ - - --------------------- - pthread_mutex_lock(&sem->mutex); - - while(sem->value == 0) { // čŗ‡æēãŒį„Ąã„ - // æĄäģļäģ˜ãå¤‰æ•°ãĢč‡Ē分をį™ģéŒ˛ã—ãĻ、ロックをč§Ŗ攞しãĻ、äģ–ぎ - // プロã‚ģ゚がčŗ‡æēã‚’č§Ŗ攞しãĻくれるぎを垅つ - pthread_cond_wait(&sem->cond,&sem->mutex); - } - // č‡Ē分ぎ分ぎčŗ‡æēãŒã‚ãŖたぎで、それをįĸēäŋã™ã‚‹ */ - sem->value--; - // ロックをč§Ŗ攞する - pthread_mutex_unlock(&sem->mutex); - ---------------------- - - こんãĒ感じ。でã‚ŗãƒĄãƒŗトãĢもあるようãĢ、 - pthread_cond_wait では、wait ぎ前ãĢ unlock する。 - これがよくわかãŖãĻãĒくãĻ、「while ぎ外で lock しãĻるぎãĢ - 「ãĒんでäģ–ぎプロã‚ģ゚が lock できるんだろう。」と。 - man čĻ‹ã‚ã‚ˆã¨æ€ãŖた。ãĻか先į”ŸãŽãƒšãƒŧジぎã‚ŗãƒĄãƒŗトãĢ書いãĻるよīŧ - - -2008-03-08 Wataru MIYAGUNI - - * memo: mailbox read ぎ blocking/non-blocking - spe_out_mbox_read は non-blocking API ãĒぎで、 - これをぐるぐる回すと busy-wait ãĢãĒるぎで、 - äģŠãŽæ‰€ ppe 側ぎ Scheduler がトップãĢæˆģるīŧŸæ™‚ãĢãƒĄãƒŧãƒĢįĸēčĒã™ã‚‹ã€‚ - で、spe_out_intr_mbox_read は blocking API 。 - spe_out_mbox_read ã¨ãŽč¨˜čŋ°ãŽé•ã„は、äēˆã‚ - spe_event_handler_register で SPE_EVENT_OUT_INTR_MBOX を - į™ģéŒ˛ã—ãĻおく。spe 側では、 - - spu_writech(SPU_WrOutMbox, data) - - じゃãĒくãĻ - - spu_writech(SPU_WrOutIntrMbox, data) - - をäŊŋうåŋ…čĻãŒã‚る。 - ä¸Ąč€…ãŽ mailbox read ぎ速åēĻをčĒŋずãĻãŋたけお、そんãĒãĢ違いは感じãĒい。 - ぞあベãƒŗチマãƒŧクぎ取り斚がへãŧいせいかもしれãĒいけお。 - ãŖãĻことで、こãŖãĄãŽ intr ぎ斚がいいんじゃãĒいかと思う。 - これと ã‚ģマフりをįĩ„ãŋ合わせãĻ mail ぎå‡Ļį†ã¯į°Ąå˜ãĢãĒると思う。 - ã‚ģマフりぎå‡Ļį†ãŒé‡ã„ãŖãĻčŠąã‚‚ã‚ã‚‹ãŒã€ãŠã†ãĒんだろうね。 - - * Test/simple_render/task/create_span.cpp (half_triangle): fix - į”ģéĸ外ぎ span を描į”ģしようとしãĻčŊãĄã‚‹ãŽã§ã€ãã‚ŒãŽäŋŽæ­Ŗ。 - polygon->span ぎ時į‚šã§å¤–しãĻるけお、span を外すより - Polygon ぎ時į‚šã§äŋŽæ­ŖするずきかãĒīŧŸ - - * kernel/ppe/TaskManagerImpl.cpp (TaskManagerImpl::set_task): fix - čŋ”す TaskList が、mainTaskList ぎ最垌尞ãĢãĒãŖãĻた。 - ãŖãĻことで、TaskList ぎトップである bufferManager->mainTaskList を。 - - * kernel/ppe/BufferManager.cpp (BufferManager::clear_taskList): fix - mainTaskList->length はクãƒĒã‚ĸしãĻるぎãĢ、 - mainTaskList->next をクãƒĒã‚ĸしåŋ˜ã‚ŒãĻた。 - だからįŠēぎ TaskList が送られãĻたぎかãƒģãƒģãƒģãĄãã—ã‚‡ã†īŧ - -2008-03-07 Wataru MIYAGUNI - - * bug-fix (Test/simple_render): yåē§æ¨™ãŽį§ģ動斚向 - (1) で、書きčžŧむ時ãĢ - - y = height - y - - としãĻいた。千į§‹ãĢčžã„ãĻãŋると、 - - 「ポãƒĒゴãƒŗぎ y をåĸ—やす(+)と、į”ģéĸ上ãĢé€˛ã‚€ã‚ˆã†ãĢした」 - - だそうです。ãĒるãģおねãƒŧ。ãŖãĻことで(2)でもやãŖたら上ãĢé€˛ã‚“ã ã‚ˆã€‚ - - ã—ã‹ã—ã€ã‚˛ãƒŧムįš„ãĢは上が + ぎ斚がわかりやすいかもしれんが、 - プログナミãƒŗグįš„ãĢは、framebuffer ベãƒŧ゚でやるぎで、 - 下ãĢいくと y++ ãŖãĻãģうがäŊœã‚Šã‚„すいかãĒãƒŧと思いつつ。おãŖãĄãŒã„ã„ã‹ã­ - - * bug (Test/simple_render): yåē§æ¨™ãŽį§ģ動斚向 - Viewer::run_draw で、垓æĨぎ、SpanPack をそぎぞぞ描į”ģする斚æŗ•(1)と、 - SPE ãĢæ¸Ąã™ã‚ˆã†ãĢ、8åˆ†å‰˛ã—ãŸã‚‚ãŽã¨ã—ãĻ描į”ģする斚æŗ•(2)で、 - それぞれぎ y ãĢ +0.5 とかしたら、į§ģ動する斚向が違う。 - (1)では上、(2)ã§ã¯ä¸‹ã¸čĄŒãã€‚ - 送られãĻくる span ãĢは違いがčĻ‹ã‚‰ã‚Œãšã€ - x 斚向や 回čģĸã¯å•éĄŒãĒいぎで、おそらく draw 時ぎ y ãŽč¨ˆįŽ—ぎバグだろう。 - - 1: polygon.cpp Polygon::draw(SPANPACK); - 2: task/span_pack_draw.cpp run(); - - * Test/simple_render/spe/SpuDraw.cpp: ↓ぎįļšããŽč§Ŗæąē - render_y &= ~7 - - これでおkでした。先į”Ÿã‚りがとうございぞす。 - äģŠã¯ãƒžã‚¯ãƒ­ã¨ã—ãĻ - - #define YTOP(y) (y & ~7) - - ãŖãĻやãŖãĻぞすわ。 - -2008-03-05 Wataru MIYAGUNI - - * memo: MFC List DMA ぎ element ぎ最大値 - 「Cell Broadband Engine Architecture Version 1.02」 より - - P.55 - The maximum number of elements is 2048. - Each element describes a transfer of up to 16 KB. - - ãŖãĻことらしいです。一åēĻぎčģĸ送でぎåˆļ限は晎通ぎDMAと変わらず16KB。 - mfc_list_element_t は 2048 å€‹ãžã§č¨­åŽšã§ãã‚‹ãŖãĻことか。 - テク゚チãƒŖぎロãƒŧãƒ‰ã§ã€åˆ†å‰˛ã—ãĒいãĒら MFC List DMA をäŊŋうことãĢãĒるが、 - 2048 個もあれば充分īŧŸ - - - * Test/simple_render/spe/SpuDraw.cpp: ↓ぎįļšã - と思ãŖたけお、やãŖãąã‚Šãšã‚Œã‚‹ãĒあ。うãƒŧむ。 - とりあえずäģŠã¯ - - if (render_y < 0) { - int tmpy = render_y%8; - render_y -= tmpy + (tmpy != 0)*8; - } else { - render_y -= (render_y%8); - } - render_y += 1080/2; - - でčŊãĄį€ãã“とãĢ。うãƒŧむ。 - もãŖã¨č‰¯ã„č¨ˆįŽ—ã‚’č€ƒãˆã‚‹ã‚ˆã‚Šã¯ span ぎį”Ÿæˆæ™‚で - いろいろやるãģうがいいぎかãĒãƒŧ - -2008-03-04 Wataru MIYAGUNI - - * Test/simple_render/spe/SpuDraw.cpp: ↓ぎįļšã - ã‚ˆãã‚ˆãč€ƒãˆãĻだãĒ。。。マイナ゚が気ãĢãĒるãĒら - - if (render_y < 0) { - int tmpy = render_y%8; - render_y -= tmpy + (tmpy != 0)*8; - } else { - render_y -= (render_y%8); - } - render_y += 1080/2; - - じゃãĒくãĻ - - render_y += 1080/2; - render_y -= (render_y%8); - - これでよくねīŧŸãŖãĻか元々そぎためぎ 1080/2 だãŖた気が。。。 - - * Test/simple_render/spe/SpuDraw.cpp: render_y ãŽč¨ˆįŽ—ぎäŋŽæ­Ŗ - sp->span[0].y (SpanPack ãĢæ ŧį´ã•ã‚ŒãĻる最初ぎ Span ぎ y åē§æ¨™) から - こぎ SpanPack が描į”ģするį¯„å›˛ãŽä¸€į•Ē上ぎ y åē§æ¨™ã‚’čĒŋずる。 - - おういうことかãŖãĻいうと、䞋えば SpanPack ãĢå…ĨãŖãĻる Span が持つ - y åē§æ¨™ãŒ 1 ~ 8 ぎ時 - - 1 ----- - -- - -------- - ---- - --------- - 8 -- - - '-' は描į”ģしãĻいると思ãŖãĻください。 - こぎ場合は、y = 1 がこぎ SpanPack ぎ一į•Ē上、åŸēæē–とãĒる åē§æ¨™ãŖãĻこと。 - framebuffer ãĢ書きčžŧむとき、y = 1 から順々ãĢ書いãĻčĄŒããžã™ã€‚ - - で、sp->span[0].y ãŖãĻぎが、そぎåŸēæē–とãĒる y であるäŋč¨ŧがį„Ąã„ぎで、 - sp->span[i].y 、つぞりおぎ y からでも、åŸēæē–とãĒる y ã‚’æą‚ã‚ã‚‹ - åŋ…čĻãŒã‚ã‚‹ã€‚ããŽč¨ˆįŽ—をミ゚ãŖãĻぞした。 - - 1 ////////// - <- ãĒぜか書きčžŧぞれãĻいãĒい - ////////// - ////////// - - ãŋたいãĢ、歯抜けした部分があãŖたぎで、いろいろčĒŋずãĻãŋたら - こぎ render_y がずれãĻるãŖãĻことが判明しぞした。 - äģŠãžã§ã¯ - - render_y = sp->span[0].y; - render_y += 1080/2; - render_y = (render_y/8)*8; - - ãŖãĻことしãĻたんだけお、これだと sp->span[0].y が マイナ゚ぎとき - ずれることが判明。ãĒぎで - - if (render_y < 0) { - int tmpy = render_y%8; - render_y -= tmpy + (tmpy != 0)*8; - } else { - render_y -= (render_y%8); - } - render_y += 1080/2; - - こうするとできぞした。。。が、į›´ã—たい。 - もう少しåĨ‡éē—ãĢ描けると思うんだけおãĒãƒŧ。if 文ぐらいは外したい - -2008-03-03 Wataru MIYAGUNI - - * memo: 最遊化ぎįĩæžœ - ppe/spe ともãĢ最遊化ãĒしぎ場合 - 263.444 FPS - - ppe だけ -O9 で最遊化 - 317.425 FPS - - spe だけ -O9 で最遊化 - 812.539 FPS - - ppe/spe ともãĢ -O9 で最遊化 - 1610.58 FPS (吚いた - - - 最初、ダブãƒĢ最遊化ぎį”ģ像をčĻ‹ãŸæ™‚ぎ - あぞりぎ旊さãĢãŗãŗãŖた。 - 逆ãĢ「こ、これはバグかīŧīŧŸã€ã¨æ€ãŖた - - -2008-02-28 Wataru MIYAGUNI - - * kernel/ppe/BufferManager.cpp: remove_taskQueue_all() - taskQueue ぎ create と free がé‡Ŗり合ãŖãĻį„ĄããĻ、 - queue がčļŗりãĒくãĒる -> extend_pool -> čļŗりãĒく(ry - ãŖãĻぎをįš°ã‚Ščŋ”しãĻãƒĄãƒĸãƒĒįš„ãĒã‚ģã‚°ãƒĄãƒŗテãƒŧã‚ˇãƒ§ãƒŗフりãƒĢとがå‡ēãĻ - ãĒんでかãĒと思ãŖたら、task->wait_me をæļˆåŽģしãĻãĒかãŖた。 - task->wait_i は notify(ry で削除されるんだけお、 - task->wait_me は、notify(ry ãĢæ¸Ąã—ãŸåžŒãģãŖたらかしだãŖた。 - ãŖãĻことで、wait_me を全æļˆã—するé–ĸ数をäŊœã‚Šãžã—たとさ。 - æ°—æŒãĄé€ŸåēĻがåĸ—した気がする。気ね。 - - -2008-02-17 Wataru MIYAGUNI - - * Todo: 悊んでる所 - - - * fix: kernel/ppe/HTask.cpp - äģŠãžã§ã€manager->create_task でį”Ÿæˆã—たã‚ŋ゚クは - - - dependency ãŽč¨­åŽš - manager->set_task_depend(master, slave) // slave は master を垅つ - - - åŽŸčĄŒã‚­ãƒĨãƒŧへぎčŋŊ加 - manager->spawn_task(master); - manager->spawn_task(slave); - - と、manager をäģ‹ã—ãĻやãŖãĻいぞした。 - ぞあそれでもいいんだけお、į‰šãĢ dependency ぎ所は - おãŖãĄãŒãŠãŖãĄã‚’åž…ã¤ãŽã‹ãŖãĻぎは、APIčĻ‹ã‚‹ã ã‘じゃわからãĒい。 - そこで、Task (HTask ぎこと) ãĢ、上äēŒã¤ãĢ寞åŋœã™ã‚‹ã‚ˆã†ãĒ - - void set_depend(HTaskPtr) と void spawn(void) をčŋŊ加しぞした。 - - - Usage - slave->set_depend(master); // slave は master を垅つ - slave->spawn(); // slave をキãƒĨãƒŧへčŋŊ加 - - įĩåą€ã¯ã€ãã‚Œãžã‚ŒãŽé–ĸ数ぎ中では、上ぎ set_task_depend とかを - å‘ŧんでるんだけお、ãƒĻãƒŧã‚ļ側からするとこぎ斚がわかりやすいと思いぞす。 - -2008-02-16 Wataru MIYAGUNI - - * tag: beta3 - ダブãƒĢãƒãƒƒãƒ•ã‚ĄãƒĒãƒŗグをčŋŊ加し、ぞあãĒんとか動いãĻるんじゃãĒいīŧŸãŖãĻ - ã¨ã“ã‚ãžã§ã§ã™ãŒã€æ‰€čŠŽ Fifo バãƒŧジョãƒŗãĒぎで、 - そろそろ Cell を書き上げãĻ、ä¸Ļ列ãĢãĄã‚ƒã‚“ã¨å‹•ã„ãĻるかįĸēかめãĒいとね - - * add: kernel/ppe/DmaBuffer.cpp - ダブãƒĢãƒãƒƒãƒ•ã‚ĄãƒĒãƒŗグį”¨ãĢäŊœãŖたんだけお、 - せãŖかくãĒぎで、DMA は、こぎã‚Ēブジェクト(が持つäēŒã¤ãŽé ˜åŸŸ)でしか - čĄŒãˆãĒいようãĢする。ãŖãĻぎでおうでしょう。ãŖãĻčŠąã‚’å…ˆį”Ÿã¨ã—ぞした。 - ä¸Ļ列å‡Ļį†ã ã—、ダブãƒĢãƒãƒƒãƒ•ã‚ĄãƒĒãƒŗグがデフりでいいでしょう。 - というか、したくãĒければ swap_buffer とかしãĒければおk。 - - -Usage - DmaBuffer *buffer = manager->allocate(sizeof(SceneGraphPack)); - - äģŠãžã§ã¨é•ã„、create_task ぎ in_addr と out_addr ãĢは - DmaBuffer をいれãĻください。ãƒĻãƒŧã‚ļがč‡Ē分で malloc/new したやつは - エナãƒŧをå‡ēすようãĢしãĻる(seg faultだけおねīŧ) - æąšã„ã‚Ŋãƒŧ゚だが、原際ãĢäŊŋãŖãĻる様子は Test/simple_render ぎ - viewer.cpp でäŊŋãŖãĻぞす。sgp_buff と pp_buff ãŖãĻやつね。 - - もうすこしãƒĻãƒŧã‚ļãĢå„ĒしいAPIをäŊœã‚ŠãŸã„ãƒģãƒģãƒģ - -2008-02-11 Wataru MIYAGUNI - - * add: Test/simple_render - chiaki ぎ DataPack をäŊŋãŖた Cube ãŽčĄ¨į¤ēプログナム。 - į°Ąå˜ãĢ DataPack を TaskManager ぎ scheduler (SpeManager) ãĢæ¸Ąã—ãĻ - å‡Ļį†ã—ãĻã‚ŗピãƒŧしãĻ、をįš°ã‚Ščŋ”しãĻるだけãĒんだけお - ぞあ動いãĻる気がするぎでいいんじゃãĒいでしょうか。 - - -2008-02-10 Wataru MIYAGUNI - - * tag: beta1 - こぎįŠļæŗã ã¨ã€ã§ãã‚‹ã“とよりもできãĒいことを書くずきīŧŸé•ã†ã‹ã€‚ - - - task (čĻĒ) 中で task (子) をį”Ÿæˆã™ã‚‹ã“とはできãĒい - æ­ŖįĸēãĢは「į”Ÿæˆã¯ã§ãã‚‹ã€ã ã‘お、そぎ 子task が - čĻĒtask ãĢ䞝存しãĻいるåˆĨぎ task をį„ĄčĻ–しãĻ動くぎで - ãĄã‚ƒã‚“ã¨ã—ãŸįĩæžœãĢãĒらãĒいと。 - 8æ—Ĩぎ Todo ãĢも書いãĻあるけお、äģŠãŽåŽŸčŖ…では - task が task をį”Ÿæˆã™ã‚‹ã“とをæƒŗ厚しãĻãĒい感じãĒぎで。 - 厌全ãĢ spe į”¨ãĢぎãŋį‹™ã„ã‚’įĩžãŖた原čŖ…であãŖãĻ - OS ãŖãĻč¨€ãˆãĒい原čŖ…であるからしãĻ、書きį›´ã™ãŽīŧŸ - 全ãĻぎé–ĸ数を task しようとするとこうãĒるč¨ŗで、 - ある部分だけやるãŖãĻぎはぞあできるんだろうけお、うãƒŧん。 - - - chiaki ぎ simple_render が動かãĒい - (čŋŊ記) č§Ŗæąēしぞした - 単ãĢ read/write buffer ぎã‚ĩイã‚ēがčļŗりãĒいだけだãŖた。ã‚ĸポwww - ãžã‚čžąã‚ãŽį‚ēぎ下は掋しãĻおこう - - ぞだ cvs ãĢ commit しãĻãĒいけお、chiaki が書いた、 - DataPack 寞åŋœãŽ simple_render ãĢ TasKManager をįĩ„ãŋčžŧんでãŋた。 - といãŖãĻも、OSãŖãŊく書いたんじゃãĒく、äģŠã¯ - update_sgp と create_pp だけを task 化しãĻãŋた。 - でぞあ動いãĻるようãĒ気はするけお、もぎすãŖごい malloc įŗģぎ warning が。 - æ™‚ã€…é•ˇãå‹•ãã‚ˆã­ãŋたいãĒ感じãĢãĒãŖãĻしぞãŖãĻいる。 - TaskManager がæ‚Ēいぎか、simple_render がæ‚Ēいぎか。 - こぎ TaskManager、ある部分でぎ malloc įŗģãŽå•éĄŒãĢ敏感だãĒあ。 - ぞあそうでãĒかãŖたらバグぎæŽĸしようもį„Ąã„ã—ã€č‰¯ã„ãŖãĄã‚ƒãƒŧč‰¯ã„ã‚“ã ãŒã€‚ - - -2008-02-08 Wataru MIYAGUNI - - * add: kernel/ppe/SymTable.cpp - äģŠãžã§ func[] = {add, sum, ...} - とかやãŖãĻかãŖã“ã‚ã‚‹ã„č¨€ã‚ã‚ŒãžããŖãĻたぎで - čŠąã—åˆã„ãŽé€šã‚Š Symbol Table ãŋたいãĒもぎをäŊœã‚‹ã“とãĢ - - // į–‘äŧŧã‚ŗãƒŧドね - struct sym_table { - char *sym; // ã‚ˇãƒŗボãƒĢ - void *address; // ã‚ˇãƒŗボãƒĢがį¤ēすã‚ĸドãƒŦã‚š - } sym_table[] = {{"Sum", &Sum} , {"Draw", &draw}}; - - int fd = get_fd("Sum"); - void *addr = get_address(fd); - - table ãĢは "Sum" と "Draw" ãŖãĻいうäēŒã¤ãŽã‚ˇãƒŗボãƒĢがį™ģéŒ˛ã•ã‚ŒãĻいる。 - 䞋えば、ãƒĻãƒŧã‚ļ(ã‚ĢãƒŧネãƒĢīŧŸ)が "Sum" ãŖãĻã‚ˇãƒŗボãƒĢãĢã‚ĸクã‚ģ゚したい場合、 - ぞずは get_fd で "Sum" ãĢ寞する、file descripter をčŋ”す。 - ãƒĻãƒŧã‚ļは、そぎ fd ãĢåž“ãŖãĻ get_address を取垗することがå‡ēæĨる。 - TaskManager įš„ãĒäŊŋい斚をするãĒら - - // äŋēはäģŠã€Draw é–ĸ数をäŊŋうã‚ŋ゚クをį”Ÿæˆã—たい - int fd = manager->open("Draw"); - manager->create_task(fd, size, in, out, func); - manager->open では get_fd と同じäŊŋい斚です。 - - ãžã æ”šč‰¯ãŽäŊ™åœ°ã‚りそうですが、äģŠã¯å‹•ã„ãĻるãŖãĻことで。 - - - - čŖœčļŗ - ãĒぜ file descripter ã¨čĄ¨ã™ã‹ - - OS ぎ昨æ—ĨとしãĻ、 fopen とかと同じäŊŋい斚もできるじゃãĒいīŧ - - - * Todo: task が task をį”Ÿæˆã™ã‚‹éš›ãŽå‡Ļį† - äģŠãžã§ã€ task ãŒčĄŒã†äŊœæĨ­ã¯ã€æŧ”įŽ—ぎãŋã‚’čĄŒã†ã‚ˆã†ãĒ - 単į´”ãĒ原čŖ…ãĢæąēã‚æ‰“ãĄã•ã‚ŒãĻいるわけです。 - しかし、OS ãĒんかだと、ã‚ŋ゚ク中からåˆĨぎã‚ŋ゚クをį”Ÿæˆã™ã‚‹ã¨ã‹ - ありありだと思われる。ãĻかäģŠãŽãƒ†ã‚šãƒˆãƒ—ログナムでãĒãŖた。 - - Test/Sum ãĢあるプログナムでäŊŋわれるã‚ŋ゚ク - - - init2 // 貧į›¸ãĒ名前ですぞãĒい - æŧ”įŽ—ã™ã‚‹æ•°å€¤ã¨ã‹ãƒãƒƒãƒ•ã‚ĄãŽåˆæœŸåŒ– - - - sum1 - あるį¯„å›˛ãŽæ•´æ•° (i から i+16 とか) ぎįˇå’Œ - - - sum2 - sum1 ã§æą‚ã‚ã‚‰ã‚ŒãŸã€č¤‡æ•°ãŽį¯„å›˛ãŽįˇå’Œã‚’一つãĢぞとめる - (ex. č¤‡æ•°ãŽ sum1 が 1->16, 17->32, 33->48 ぎįˇå’Œã‚’č¨ˆįŽ—し、 - sum2 で 上ぎ3つぎįˇå’Œã‚’č¨ˆįŽ—する - čĻã¯ 1->48 ぎįˇå’Œã‚’åˆ†å‰˛ã™ã‚‹ãŖãĻいうプログナムね - - - finish - sum2 ã§æą‚ãžãŖãŸå€¤ã‚’čĄ¨į¤ē - - こぎ Sum というプログナム、というか OS ã¨č¨€ãŠã†ã€‚SumOS ね。 - SumOS は最初ãĢ TaskManager (所čŦ‚ kernel) をčĩˇå‹•ã—、 - init をčĩˇå‹•ã™ã‚‹ã€‚init では、äēˆã‚æąēめられたã‚ŋ゚クである - init2 と finish ぎäēŒã¤ãŽã‚ŋ゚クを create しãĻį™ģéŒ˛ã™ã‚‹ã€‚ - init2 と finish ãĢは䞝存é–ĸäŋ‚がある (init2 がįĩ‚わãŖたら finish) - init2 ぎ中で、sum1 と sum2 というã‚ŋ゚クがäŊœã‚‰ã‚Œã‚‹ã€‚ - sum1 と sum2 ãĢも䞝存é–ĸäŋ‚はある (sum1 がįĩ‚わãŖたら sum2) - - äģŠãŽåŽŸčŖ…だと、ã‚ŋ゚クがįĩ‚äē†ã—ãĻ初めãĻæŦĄãŽã‚ŋã‚šã‚¯ã¸čĄŒãã€‚ - ぞあåŊ“たり前ãĒんだけお、䞋えばそぎã‚ŋ゚クぎ中で - 新たãĢã‚ŋ゚クがäŊœã‚‰ã‚ŒãŸå ´åˆã€ããŽã‚ŋ゚クがįĩ‚äē†ã™ã‚‹ãžã§ã¯ - åŽŸčĄŒã•ã‚ŒãĒくãĒãŖãĻしぞう。 - でぞあ、äģŠã¯ã€manager->create_task されるåēĻãĢ - manager->run とかしãĻ、į„Ąį†ã‚„ã‚Ščĩˇå‹•ã—ãĻるč¨ŗさ。 - äŊ•ãŒį„Ąį†įŸĸį†ã‹ãŖãĻいうと、scheduler ぎåŊšį›Žã‚’しãĻいる - SpeManager (これも名前変えãĒいと) を2åēĻå‘ŧãŗå‡ēしãĻるč¨ŗ。 - つぞり、ã‚ŋ゚ク中でã‚ŋ゚クをäŊœã‚‹åēĻãĢ、SpeManager ã‚Ēブジェクトを - new しãĻるわけさ。いいぎかīŧŸã„や、動いãĻるけおねīŧŸ - - ãĄãĒãŋãĢ、Cell version だと spe が勝手ãĢ取ãŖãĻいãŖãĻくれるから - 大丈å¤ĢかãĒと思いつつ、もし spe を1つしかäŊŋわãĒã„č¨­åŽšã ãŖたら垎åĻ™ã€‚ - - čĻã™ã‚‹ãĢ、ã‚ŋ゚ク中でã‚ŋ゚クがäŊœã‚‰ã‚Œã‚‹å ´åˆãŽå‡Ļį†ã‚’č€ƒãˆãĒいとね。 - -2008-02-07 Wataru MIYAGUNI - - * memo: プログナミãƒŗグぎå§ŋå‹ĸ - scheduler とか、task ぎįŽĄį†ã‚’する部分は - kernel programing ぎつもりで、 - example とか、task ãĢå‰˛ã‚ŠåŊ“ãĻるå‡Ļį†ã‚’æąēめたりする部分は - user programing ぎつもりで。 - - それぞれ違ãŖたčĻ–į‚šã§čĻ‹ã‚‹åŋ…čĻãŒã‚ã‚‹ - - * memo: OS というもぎ - OS čĩˇå‹•ãŽæĩã‚Œ - - - PC ぎé›ģæēã‚’å…Ĩれる - - BIOS がįĢ‹ãĄä¸ŠãŒã‚‹ (OpenFirmWare, EFI, BIOS) - - čĩˇå‹•ãƒ‡ãƒã‚¤ã‚šã‚’チェック (å„Ē先åēĻとかį¨ŽéĄžã¨ã‹) - - čĩˇå‹•ãƒ‡ãƒã‚¤ã‚šã‹ã‚‰ Boot loader をčĩˇå‹• - + BIOS ãĢよãŖãĻ、čĒč­˜ã§ãã‚‹ãƒ•ã‚Ąã‚¤ãƒĢã‚ˇã‚šãƒ†ãƒ ãŒé•ã†(だãŖけīŧŸ) - + ãƒ•ã‚Ąã‚¤ãƒĢã‚ˇã‚šãƒ†ãƒ ãŽãŠã“ãĢ Boot Loader があるかįŸĨãŖãĻいる - + grub, grub2, lilo, kboot ãĒおがある - - Boot Loader が kernel をčĩˇå‹• - + ネットワãƒŧクブãƒŧトぎ場合、TCP/IP や - ネットワãƒŧクデバイ゚(イãƒŧã‚ĩとかīŧŸ)ぎドナイバを持ãŖãĻるåŋ…čĻãŒã‚ã‚‹ - - kernel は、最初ãĢ scheduler をčĩˇå‹•ã™ã‚‹ - - scheduler ぎ初期化 (init をå‘ŧãļīŧŸ) - - init では、äē‹å‰īŧŸãĢč¨­åŽšã•ã‚ŒãĻいる゚クãƒĒプトとかをå‘ŧãļ - + linux とかだと /etc/rc ãĢあるやつを init がå‘ŧãļ - - login form がčĩˇå‹• - - čŖœčļŗ こãŖからãƒĻãƒŧã‚ļ - - login する - - shell をå‘ŧãļ - + login shell かおうかįĸēかめる - - ãƒĻãƒŧã‚ļãĢč¨­åŽšã•ã‚ŒãĻるčĩˇå‹•ã‚šã‚¯ãƒĒプトīŧŸã‚’åŽŸčĄŒ - - 晴れãĻログイãƒŗ - -2008-02-06 Wataru MIYAGUNI - - * kernel/spe/*.cpp: new と placement new - įžåœ¨ã€spe kernel ぎã‚ŋ゚クは、切りæ›ŋわる毎ãĢ - new/delete をįš°ã‚Ščŋ”しãĻいぞす。äģŠã¯ã“れでいいんだけお、 - 速åēĻįš„ãĢも、いずれはį›´ã•ãĒいといけãĒいと思うわけで。 - で、äēˆã‚ allocate された領域を刊į”¨ã—た placement new をäŊŋえば - new よりもそれãĒりãĢ旊くãĒるãŖãŊい。 - äž‹éĄŒã¨ã—ãĻ、与えられた回数分 new/delete をįš°ã‚Ščŋ”すプログナムと、 - 同じ回数分、placement new したときぎ速åēĻぎ比čŧƒ - - for (int i = 0; i < num; i++) { - - < task = new Task; - < task->init(i); - < task->printID(); - < delete task; - --- - > task = new(buff) Task; // buff = malloc(BUFF_SIZE); - > task->init(id); - > task->printID(id); - } - - placement new では、delete ぎåŋ…čĻã¯į„Ąã„。 - そぎ中で新たãĢ allocate しãĻるãĒらåŋ…čĻã‹ã‚‚しれãĒいが。 - 速åēĻ比čŧƒã¯äģĨ下。no_new が placement new で、ln_new が new/delete 。 - - % ./a.out 10 // 10 回 - no_new: time: 0.012135(msec) - ln_new: time: 0.003572(msec) - - % ./a.out 100 - no_new: time: 0.022453(msec) - ln_new: time: 0.018989(msec) - - % ./a.out 1000 - no_new: time: 0.115277(msec) - ln_new: time: 0.136335(msec) - - % ./a.out 10000 - no_new: time: 1.056156(msec) - ln_new: time: 1.322709(msec) - - % ./a.out 100000 - no_new: time: 10.622221(msec) - ln_new: time: 13.362414(msec) - - % ./a.out 1000000 - no_new: time: 109.436496(msec) - ln_new: time: 136.956872(msec) - - 10、100 å›žã ã¨č˛ ã‘ãĻるが、ぞあį„ĄčĻ–しよう(ぇ - 回数が多くãĒるãĢつれãĻ、ãģんぎ少しだが no_new が勝ãŖãĻる。 - おうãĒã‚“ã ã‚ã†ã­ã€‚ãĄãĒãŋãĢ printID をį„Ąãã™ã¨ - - % ./a.out 1000000 - no_new: time: 0.008512(msec) - ln_new: time: 27.100296(msec) - - I/O ãĢåˇĻåŗされ過ぎ。ぞあそんãĒもんだろうけおさ。 diff -r 64b57b4ba9e2 -r f872cc000fe0 TaskManager/Fifo/FifoDmaManager.cc diff -r 64b57b4ba9e2 -r f872cc000fe0 TaskManager/Test/test_render/Makefile.def --- a/TaskManager/Test/test_render/Makefile.def Wed Jun 03 22:14:20 2009 +0900 +++ b/TaskManager/Test/test_render/Makefile.def Thu Jun 04 00:06:37 2009 +0900 @@ -1,6 +1,19 @@ TARGET = test_nogl +<<<<<<< local CERIUM = ../../.. +======= +# include/library path +# ex: macosx +#CERIUM = /Users/gongo/Source/Concurrency/Game_project/Cerium +#CERIUM = /Users/gongo/Source/hg/Cerium + +# ex: linux/ps3 +CERIUM = /home/gongo/Cerium +#CERIUM = /Users/tkaito/hg/Game/Cerium + +#CERIUM = ../../.. +>>>>>>> other CC = g++ CFLAGS = -O9 -g -Wall# -DDEBUG diff -r 64b57b4ba9e2 -r f872cc000fe0 TaskManager/Test/test_render/spe/DrawSpan.cpp --- a/TaskManager/Test/test_render/spe/DrawSpan.cpp Wed Jun 03 22:14:20 2009 +0900 +++ b/TaskManager/Test/test_render/spe/DrawSpan.cpp Thu Jun 04 00:06:37 2009 +0900 @@ -9,23 +9,42 @@ SchedDefineTask(DrawSpan); +<<<<<<< local #define TEX_LOAD1 0 #define TEX_LOAD2 1 #define SPAN_PACK_LOAD 2 #define FB_STORE 3 +======= +<<<<<<< local +static TileHashPtr hash; +======= +<<<<<<< local +static const int hashsize = 263; +>>>>>>> other +<<<<<<< local DrawSpan::~DrawSpan(void) { smanager->dma_wait(FB_STORE); free((void*)((int)linebuf*doneWrite)); } +======= +static TilePtr hash_table[hashsize] = {NULL}; +>>>>>>> other +<<<<<<< local inline vector float spu_re_nrm(vector float a) { vector float unit = (vector float){1.0, 1.0, 1.0, 1.0}; vector float approximation; +======= +unsigned short PRIME[8] = { + 0x002, 0x065, 0x0c7, 0x133, 0x191, 0x1f3, 0x259, 0x2bd, +}; +>>>>>>> other +<<<<<<< local approximation = spu_re(a); return spu_madd(spu_nmsub(approximation, a, unit), approximation, approximation); @@ -44,6 +63,10 @@ return getLocalPositionVec(x, split_screen_w); } +======= +>>>>>>> other +static TileListPtr tileList; +>>>>>>> other /** * テク゚チãƒŖは、TEXTURE_SPLIT_PIXEL^2 ぎブロックãĢåˆ†å‰˛ã™ã‚‹ @@ -102,6 +125,9 @@ int block = getTexBlock(tx, ty, tw); return tex_addr_top + block*TEXTURE_BLOCK_SIZE; } +======= +static unsigned char *tex; +>>>>>>> other /** * FrameBuffer ãĢ書きčžŧむ rgb ぎ領域初期化 @@ -184,7 +210,11 @@ tile->texture_addr = addr; +<<<<<<< local + //int index = hash->put(tile->texture_addr, tile); +======= hash->put(tile->texture_addr, tile); +>>>>>>> other smanager->dma_load(tile->pixel, (uint32)addr, sizeof(uint32)*TEXTURE_BLOCK_SIZE, tag); } @@ -597,6 +627,26 @@ int tl_tag_flg1 = 0; int tl_tag_flg2 = 1; +<<<<<<< local +======= + float *zRow = (float*)smanager->get_input(1); + int **linebuf = (int**)smanager->allocate(sizeof(int*)*rangey); + + for (int i = 0; i < rangey; i++) { + linebuf[i] = (int*)smanager->get_output(i); +<<<<<<< local + linebuf_init(linebuf[i], rangex, 0xffffffff); +======= +<<<<<<< local + linebuf_init(linebuf[i], rangex, 0xffffff); +======= + //linebuf_init(linebuf[i], rangex, 0x00ff00ff); + linebuf_init(linebuf[i], rangex, 0); +>>>>>>> other +>>>>>>> other + } + +>>>>>>> other do { /** * SpanPack->next が存在する場合、 @@ -610,6 +660,7 @@ next_spack = NULL; } +<<<<<<< local SpanPtr resume_span = &nop_span; int resume_span_x = 0; @@ -617,6 +668,9 @@ SpanPtr next_span; int next_span_x; +======= + for (int t = spack->info.start; t < spack->info.size; t++) { +>>>>>>> other span = &spack->span[t]; /** @@ -666,5 +720,24 @@ */ free(free_spack); +<<<<<<< local +======= + free(linebuf); +<<<<<<< local +======= + free(zRow); +<<<<<<< local +======= +<<<<<<< local + free(tileList); + free(tilist); + free(next_tilist); +>>>>>>> other +>>>>>>> other + +======= + free(tex); +>>>>>>> other +>>>>>>> other return 0; } diff -r 64b57b4ba9e2 -r f872cc000fe0 TaskManager/Test/test_render/spe/DrawSpanRenew.cpp --- a/TaskManager/Test/test_render/spe/DrawSpanRenew.cpp Wed Jun 03 22:14:20 2009 +0900 +++ b/TaskManager/Test/test_render/spe/DrawSpanRenew.cpp Thu Jun 04 00:06:37 2009 +0900 @@ -216,6 +216,10 @@ free(zRow); free(args); +<<<<<<< local + //FINISH: +======= +>>>>>>> other /** * linebuf, zRow, args ¤Ī RenewTask ¤Ŧ°ú¤­ˇŅ¤° */ diff -r 64b57b4ba9e2 -r f872cc000fe0 TaskManager/Test/test_render/task/CreateSpan.cpp --- a/TaskManager/Test/test_render/task/CreateSpan.cpp Wed Jun 03 22:14:20 2009 +0900 +++ b/TaskManager/Test/test_render/task/CreateSpan.cpp Thu Jun 04 00:06:37 2009 +0900 @@ -128,7 +128,8 @@ /** - * span ぎ width,height と texture ぎ width,height を比ずãĻ + * span ぎ width と Triangle ぎ height ãĢ寞しãĻ、 + * texture ぎ width,height をそれぞれ比ずãĻ * span を描į”ģする際ãĢäŊŋう texture ぎ比įŽ‡ã‚’æą‚ã‚ã‚‹ * * @param[in] width Width of span @@ -399,7 +400,13 @@ * ここãĢ SIMD åŒ–ã—ãŸč¨˜čŋ°ã‚’しようとしãĻ断åŋĩ */ +<<<<<<< local #endif +======= + //scale = (8 > tex_scale_max) ? tex_scale_max : 8; + + uint32 *tapestry = getTapestry(tex_width, tex_height, scale, tex_addr); +>>>>>>> other } @@ -441,9 +448,18 @@ for (int i = 0; i < pp->info.size; i++) { triPack = &pp->tri[i]; +<<<<<<< local TriangleTexInfoPtr tri_tex_info = &triPack->tex_info; +======= + // 参į…§æ¸Ąã—だからãƒŦジ゚ã‚ŋãĢ䚗らãĒいでãģげãģげ〜で + // 最遊化でいうと垎åĻ™īŧŸ +>>>>>>> other make_vertex(triPack, &vMin, &vMid, &vMax); +<<<<<<< local +======= + +>>>>>>> other make_vMid10(vMid10, vMin, vMid, vMax); /** diff -r 64b57b4ba9e2 -r f872cc000fe0 TaskManager/Test/test_render/task/DrawSpan.cpp --- a/TaskManager/Test/test_render/task/DrawSpan.cpp Wed Jun 03 22:14:20 2009 +0900 +++ b/TaskManager/Test/test_render/task/DrawSpan.cpp Thu Jun 04 00:06:37 2009 +0900 @@ -580,6 +580,7 @@ next_spack = NULL; } +<<<<<<< local SpanPtr resume_span = &nop_span; int resume_span_x = 0; @@ -587,6 +588,9 @@ SpanPtr next_span; int next_span_x; +======= + for (int t = spack->info.start; t < spack->info.size; t++) { +>>>>>>> other span = &spack->span[t]; /** diff -r 64b57b4ba9e2 -r f872cc000fe0 TaskManager/Test/test_render/task/update_sgp.cpp --- a/TaskManager/Test/test_render/task/update_sgp.cpp Wed Jun 03 22:14:20 2009 +0900 +++ b/TaskManager/Test/test_render/task/update_sgp.cpp Thu Jun 04 00:06:37 2009 +0900 @@ -8,6 +8,108 @@ SchedDefineTask(Update_SGP); +<<<<<<< local +======= +typedef void (*moveFunc)(SceneGraphNodePtr, int, int); +typedef void (*collFunc)(SceneGraphNodePtr, int, int); + +static moveFunc moveList[3]; +static collFunc collList[3]; + +static void +move0(SceneGraphNodePtr node, int w, int h) +{ + static float dest_x = 0.3f; + static float dest_y = 0.5f; + + node->angle[1] += 1.0f; + if (node->angle[1] > 360.0f) { + node->angle[1] = 0.0f; + } + + node->obj_pos[0] += dest_x; + if ((int)node->obj_pos[0] > w || (int)node->obj_pos[0] < 0) { + dest_x = -dest_x; + } + + node->obj_pos[1] += dest_y; + if ((int)node->obj_pos[1] > h || (int)node->obj_pos[1] < 0) { + dest_y = -dest_y; + } +} + +static void +move1(SceneGraphNodePtr node, int w, int h) +{ + node->angle[1] += 1.0f; + if (node->angle[1] > 360.0f) { + node->angle[1] = 0.0f; + } + + static float dest_x = 0.5f; + static float dest_y = 1.3f; + + node->obj_pos[0] += dest_x; + if ((int)node->obj_pos[0] > w || (int)node->obj_pos[0] < 0) { + dest_x = -dest_x; + } + + node->obj_pos[1] += dest_y; + if ((int)node->obj_pos[1] > h || (int)node->obj_pos[1] < 0) { + dest_y = -dest_y; + } +} + +static void +move2(SceneGraphNodePtr node, int w, int h) +{ + node->angle[1] += 1.0f; + if (node->angle[1] > 360.0f) { + node->angle[1] = 0.0f; + } + + static float dest_x = 1.0f; + static float dest_y = 0.8f; + + node->obj_pos[0] += dest_x; + if ((int)node->obj_pos[0] > w || (int)node->obj_pos[0] < 0) { + dest_x = -dest_x; + } + + node->obj_pos[1] += dest_y; + if ((int)node->obj_pos[1] > h || (int)node->obj_pos[1] < 0) { + dest_y = -dest_y; + } +} + +static void +move4(SceneGraphNodePtr node, int w, int h) +{ + node->angle[1] += 1.0f; + if (node->angle[1] > 360.0f) { + node->angle[1] = 0.0f; + } +} + + +static void +coll(SceneGraphNodePtr node, int w, int h) +{ +} + +static void +init(void) +{ + moveList[0] = move0; + moveList[1] = move4; + moveList[2] = move2; + + collList[0] = coll; + collList[1] = coll; + collList[2] = coll; +} + +>>>>>>> other int Update_SGP::run(void *rbuf, void *wbuf) { diff -r 64b57b4ba9e2 -r f872cc000fe0 TaskManager/Test/test_render/viewer.cpp --- a/TaskManager/Test/test_render/viewer.cpp Wed Jun 03 22:14:20 2009 +0900 +++ b/TaskManager/Test/test_render/viewer.cpp Thu Jun 04 00:06:37 2009 +0900 @@ -336,7 +336,9 @@ //break; // Draw Background (įžåœ¨ã¯åĄ—りつãļし) task_draw = manager->create_task(TASK_DRAW_BACK); +<<<<<<< local task_draw->add_param(0xffffffff); +<<<<<<< local for (int k = 0; k < rangey; k++) { task_draw->add_outData( @@ -350,6 +352,23 @@ //0xFFFFFFFF, (this->width)*sizeof(int)*rangey/sizeof(wchar_t)); break; #endif +======= +======= +<<<<<<< local + task_draw->add_param(0xffffff); +======= + //task_draw->add_param(0x00ffcc55); + task_draw->add_param(0); +//task_draw->add_param(st_rgb); +>>>>>>> other +>>>>>>> other + } + + for (int k = 0; k < rangey; k++) { + task_draw->add_outData( + &pixels[(startx-1)+this->width*(k+starty-1)], + (endx - startx + 1)*sizeof(int)); +>>>>>>> other } task_draw->add_param(startx); diff -r 64b57b4ba9e2 -r f872cc000fe0 TaskManager/kernel/main.cc --- a/TaskManager/kernel/main.cc Wed Jun 03 22:14:20 2009 +0900 +++ b/TaskManager/kernel/main.cc Thu Jun 04 00:06:37 2009 +0900 @@ -1,5 +1,6 @@ #include -#include +//#include +#include #include #include "TaskManager.h" @@ -11,7 +12,15 @@ defaultTMend(void) {} TaskManager *manager; +<<<<<<< local +<<<<<<< local +static std::string help_str = "\n\ +======= +static char help_str[] = "\n\ +>>>>>>> other +======= const char *help_str = "\n\ +>>>>>>> other * Cerium program option *\n\ -help Print this message \n\ -cpu Number of CPU (default 1) \n"; diff -r 64b57b4ba9e2 -r f872cc000fe0 TaskManager/libCellManager.a Binary file TaskManager/libCellManager.a has changed diff -r 64b57b4ba9e2 -r f872cc000fe0 TaskManager/libFifoManager.a diff -r 64b57b4ba9e2 -r f872cc000fe0 TaskManager/libspemanager.a Binary file TaskManager/libspemanager.a has changed diff -r 64b57b4ba9e2 -r f872cc000fe0 example/HelloWorld/Makefile.def --- a/example/HelloWorld/Makefile.def Wed Jun 03 22:14:20 2009 +0900 +++ b/example/HelloWorld/Makefile.def Thu Jun 04 00:06:37 2009 +0900 @@ -5,7 +5,12 @@ #CERIUM = /Users/gongo/Source/Cerium # ex: linux/ps3 +<<<<<<< local +#CERIUM = /home/gongo/Cerium +CERIUM = /Users/e065746/Works/lab/hg/Cerium +======= CERIUM = ../../../Cerium +>>>>>>> other CC = g++ CFLAGS = -g -Wall -O9 diff -r 64b57b4ba9e2 -r f872cc000fe0 example/HelloWorld/Makefile.def~ --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/example/HelloWorld/Makefile.def~ Thu Jun 04 00:06:37 2009 +0900 @@ -0,0 +1,14 @@ +TARGET = hello + +# include/library path +# ex: macosx +#CERIUM = /Users/gongo/Source/Cerium + +# ex: linux/ps3 +CERIUM = /home/gongo/Cerium + +CC = g++ +CFLAGS = -g -Wall -O9 + +INCLUDE = -I${CERIUM}/include/TaskManager -I. -I.. +LIBS = -L${CERIUM}/TaskManager diff -r 64b57b4ba9e2 -r f872cc000fe0 example/HelloWorld/main.o Binary file example/HelloWorld/main.o has changed diff -r 64b57b4ba9e2 -r f872cc000fe0 example/HelloWorld/ppe/#Hello.cc# --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/example/HelloWorld/ppe/#Hello.cc# Thu Jun 04 00:06:37 2009 +0900 @@ -0,0 +1,17 @@ +#include +#include "SchedTask.h" +#include "Hello.h" +#include "Func.h" + +/* ’¤ŗ’¤ė’¤Ī’ÉŦ’ŋÜ */ + + +int +Hello::run(void *rbuf, void *wbuf) +{ + int task_id = get_param(0); + + printf("[%d] Hello, World!!\n", task_id); + + return 0; +} diff -r 64b57b4ba9e2 -r f872cc000fe0 example/HelloWorld/ppe/.#Hello.cc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/example/HelloWorld/ppe/.#Hello.cc Thu Jun 04 00:06:37 2009 +0900 @@ -0,0 +1,1 @@ +e065746@nakasone-hiroki-no-macbook.local.1456 \ No newline at end of file diff -r 64b57b4ba9e2 -r f872cc000fe0 example/HelloWorld/ppe/Hello.o Binary file example/HelloWorld/ppe/Hello.o has changed diff -r 64b57b4ba9e2 -r f872cc000fe0 example/HelloWorld/ppe/task_init.o Binary file example/HelloWorld/ppe/task_init.o has changed diff -r 64b57b4ba9e2 -r f872cc000fe0 example/busy_rate/Func.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/example/busy_rate/Func.h Thu Jun 04 00:06:37 2009 +0900 @@ -0,0 +1,3 @@ +enum { + BUSY_TASK, +}; diff -r 64b57b4ba9e2 -r f872cc000fe0 example/busy_rate/Makefile --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/example/busy_rate/Makefile Thu Jun 04 00:06:37 2009 +0900 @@ -0,0 +1,20 @@ +default: macosx + +macosx: FORCE + @echo "Make for Mac OS X" + @$(MAKE) -f Makefile.macosx + +linux: FORCE + @echo "Make for Linux" + @$(MAKE) -f Makefile.linux + +ps3: FORCE + @echo "Make for PS3 (Cell)" + @$(MAKE) -f Makefile.ps3 + +FORCE: + +clean: + @$(MAKE) -f Makefile.macosx clean + @$(MAKE) -f Makefile.linux clean + @$(MAKE) -f Makefile.ps3 clean \ No newline at end of file diff -r 64b57b4ba9e2 -r f872cc000fe0 example/busy_rate/Makefile.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/example/busy_rate/Makefile.def Thu Jun 04 00:06:37 2009 +0900 @@ -0,0 +1,14 @@ +TARGET = busy + +# include/library path +# ex: macosx +#CERIUM = /Users/gongo/Source/Cerium + +# ex: linux/ps3 +CERIUM = /Users/e065746/Works/lab/hg/hiroki/Game_Project/Cerium + +CC = g++ +CFLAGS = -g -Wall -O9 + +INCLUDE = -I${CERIUM}/include/TaskManager -I. -I.. +LIBS = -L${CERIUM}/TaskManager diff -r 64b57b4ba9e2 -r f872cc000fe0 example/busy_rate/Makefile.linux --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/example/busy_rate/Makefile.linux Thu Jun 04 00:06:37 2009 +0900 @@ -0,0 +1,36 @@ +include ./Makefile.def + +SRCS_TMP = $(wildcard *.cc) +SRCS_EXCLUDE = # Ŋüŗ°¤š¤ëĨÕĨĄĨ¤Ĩë¤ōŊņ¤¯ +SRCS = $(filter-out $(SRCS_EXCLUDE),$(SRCS_TMP)) +OBJS = $(SRCS:.cc=.o) + +TASK_DIR = ppe +TASK_SRCS_TMP = $(wildcard $(TASK_DIR)/*.cc) +TASK_SRCS_EXCLUDE = +TASK_SRCS = $(filter-out $(TASK_DIR)/$(TASK_SRCS_EXCLUDE),$(TASK_SRCS_TMP)) +TASK_OBJS = $(TASK_SRCS:.cc=.o) + +LIBS += -lFifoManager + +.SUFFIXES: .cc .o + +.cc.o: + $(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@ + +all: $(TARGET) + +$(TARGET): $(OBJS) $(TASK_OBJS) + $(CC) -o $@ $(OBJS) $(TASK_OBJS) $(LIBS) + +link: + $(CC) -o $(TARGET) $(OBJS) $(TASK_OBJS) $(LIBS) + +debug: $(TARGET) + sudo gdb ./$(TARGET) + +clean: + rm -f $(TARGET) $(OBJS) $(TASK_OBJS) + rm -f *~ \#* + rm -f ppe/*~ ppe/\#* + rm -f spe/*~ spe/\#* diff -r 64b57b4ba9e2 -r f872cc000fe0 example/busy_rate/Makefile.macosx --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/example/busy_rate/Makefile.macosx Thu Jun 04 00:06:37 2009 +0900 @@ -0,0 +1,36 @@ +include ./Makefile.def + +SRCS_TMP = $(wildcard *.cc) +SRCS_EXCLUDE = # Ŋüŗ°¤š¤ëĨÕĨĄĨ¤Ĩë¤ōŊņ¤¯ +SRCS = $(filter-out $(SRCS_EXCLUDE),$(SRCS_TMP)) +OBJS = $(SRCS:.cc=.o) + +TASK_DIR = ppe +TASK_SRCS_TMP = $(wildcard $(TASK_DIR)/*.cc) +TASK_SRCS_EXCLUDE = +TASK_SRCS = $(filter-out $(TASK_DIR)/$(TASK_SRCS_EXCLUDE),$(TASK_SRCS_TMP)) +TASK_OBJS = $(TASK_SRCS:.cc=.o) + +LIBS += -lFifoManager `sdl-config --libs` + +.SUFFIXES: .cc .o + +.cc.o: + $(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@ + +all: $(TARGET) + +$(TARGET): $(OBJS) $(TASK_OBJS) + $(CC) -o $@ $(OBJS) $(TASK_OBJS) $(LIBS) + +link: + $(CC) -o $(TARGET) $(OBJS) $(TASK_OBJS) $(LIBS) + +debug: $(TARGET) + sudo gdb ./$(TARGET) + +clean: + rm -f $(TARGET) $(OBJS) $(TASK_OBJS) + rm -f *~ \#* + rm -f ppe/*~ ppe/\#* + rm -f spe/*~ spe/\#* diff -r 64b57b4ba9e2 -r f872cc000fe0 example/busy_rate/Makefile.ps3 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/example/busy_rate/Makefile.ps3 Thu Jun 04 00:06:37 2009 +0900 @@ -0,0 +1,39 @@ +include ./Makefile.def + +SRCS_TMP = $(wildcard *.cc) +SRCS_EXCLUDE = # Ŋüŗ°¤š¤ëĨÕĨĄĨ¤Ĩë¤ōŊņ¤¯ +SRCS = $(filter-out $(SRCS_EXCLUDE),$(SRCS_TMP)) +OBJS = $(SRCS:.cc=.o) + +TASK_DIR = ppe +TASK_SRCS_TMP = $(wildcard $(TASK_DIR)/*.cc) +TASK_SRCS_EXCLUDE = +TASK_SRCS = $(filter-out $(TASK_DIR)/$(TASK_SRCS_EXCLUDE),$(TASK_SRCS_TMP)) +TASK_OBJS = $(TASK_SRCS:.cc=.o) + +LIBS += -lCellManager -lspe2 -lpthread -Wl,--gc-sections + +.SUFFIXES: .cc .o + +.cc.o: + $(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@ + +all: $(TARGET) speobject + +$(TARGET): $(OBJS) $(TASK_OBJS) + $(CC) -o $@ $(OBJS) $(TASK_OBJS) $(LIBS) + +speobject: + cd spe; $(MAKE) + +link: + $(CC) -o $(TARGET) $(OBJS) $(TASK_OBJS) $(LIBS) + +debug: $(TARGET) + sudo ppu-gdb ./$(TARGET) + +clean: + rm -f $(TARGET) $(OBJS) $(TASK_OBJS) + rm -f *~ \#* + rm -f ppe/*~ ppe/\#* + cd spe; $(MAKE) clean diff -r 64b57b4ba9e2 -r f872cc000fe0 example/busy_rate/busy Binary file example/busy_rate/busy has changed diff -r 64b57b4ba9e2 -r f872cc000fe0 example/busy_rate/hello Binary file example/busy_rate/hello has changed diff -r 64b57b4ba9e2 -r f872cc000fe0 example/busy_rate/main.cc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/example/busy_rate/main.cc Thu Jun 04 00:06:37 2009 +0900 @@ -0,0 +1,31 @@ +#include +#include +#include +#include "TaskManager.h" +#include "Func.h" + +extern void task_init(void); + +void +busy_init(void) +{ + HTask *busy; + + for (int i = 0; i < 6; i++) { + + busy = manager->create_task(BUSY_TASK); + busy->set_cpu(SPE_ANY); + + busy->add_param(i); + busy->spawn(); + } +} + +int +TMmain(int argc, char *argv[]) +{ + task_init(); + busy_init(); + + return 0; +} diff -r 64b57b4ba9e2 -r f872cc000fe0 example/busy_rate/main.o Binary file example/busy_rate/main.o has changed diff -r 64b57b4ba9e2 -r f872cc000fe0 example/busy_rate/ppe/busy_rate.cc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/example/busy_rate/ppe/busy_rate.cc Thu Jun 04 00:06:37 2009 +0900 @@ -0,0 +1,17 @@ +#include +#include "SchedTask.h" +#include "busy_rate.h" +#include "Func.h" + + +SchedDefineTask(Busy_rate); + +int +Busy_rate::run(void *rbuf, void *wbuf) +{ + int task_id = get_param(0); + + printf("[%d] Busy World!\n", task_id); + + return 0; +} diff -r 64b57b4ba9e2 -r f872cc000fe0 example/busy_rate/ppe/busy_rate.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/example/busy_rate/ppe/busy_rate.h Thu Jun 04 00:06:37 2009 +0900 @@ -0,0 +1,10 @@ +#ifndef INCLUDED_SCHED_TASK +# include "SchedTask.h" +#endif + +class Busy_rate : public SchedTask { +public: + SchedConstructor(Busy_rate); + + int run(void *r, void *w); +}; diff -r 64b57b4ba9e2 -r f872cc000fe0 example/busy_rate/ppe/busy_rate.o Binary file example/busy_rate/ppe/busy_rate.o has changed diff -r 64b57b4ba9e2 -r f872cc000fe0 example/busy_rate/ppe/task_init.cc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/example/busy_rate/ppe/task_init.cc Thu Jun 04 00:06:37 2009 +0900 @@ -0,0 +1,10 @@ +#include "Func.h" +#include "Scheduler.h" + +SchedExternTask(Busy_rate); + +void +task_init(void) +{ + SchedRegisterTask(BUSY_TASK, Busy_rate); +} diff -r 64b57b4ba9e2 -r f872cc000fe0 example/busy_rate/ppe/task_init.o Binary file example/busy_rate/ppe/task_init.o has changed diff -r 64b57b4ba9e2 -r f872cc000fe0 example/busy_rate/spe-main Binary file example/busy_rate/spe-main has changed diff -r 64b57b4ba9e2 -r f872cc000fe0 example/busy_rate/spe/Makefile --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/example/busy_rate/spe/Makefile Thu Jun 04 00:06:37 2009 +0900 @@ -0,0 +1,20 @@ +default: macosx + +macosx: FORCE + @echo "Make for Mac OS X" + @$(MAKE) -f Makefile.macosx + +linux: FORCE + @echo "Make for Linux" + @$(MAKE) -f Makefile.linux + +ps3: FORCE + @echo "Make for PS3 (Cell)" + @$(MAKE) -f Makefile.ps3 + +FORCE: + +clean: + @$(MAKE) -f Makefile.macosx clean + @$(MAKE) -f Makefile.linux clean + @$(MAKE) -f Makefile.ps3 clean \ No newline at end of file diff -r 64b57b4ba9e2 -r f872cc000fe0 example/busy_rate/spe/busy_rate.cc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/example/busy_rate/spe/busy_rate.cc Thu Jun 04 00:06:37 2009 +0900 @@ -0,0 +1,13 @@ +#include +#include "busy_rate.h" +#include "Func.h" + +SchedDefineTask(Busy_rate); + +int +Busy_rate::run(void *rbuf, void *wbuf) +{ + printf("Busy World!\n"); + + return 0; +} diff -r 64b57b4ba9e2 -r f872cc000fe0 example/busy_rate/spe/busy_rate.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/example/busy_rate/spe/busy_rate.h Thu Jun 04 00:06:37 2009 +0900 @@ -0,0 +1,10 @@ +#ifndef INCLUDED_SCHED_TASK +# include "SchedTask.h" +#endif + +class Busy_rate : public SchedTask { +public: + SchedConstructor(Busy_rate); + + int run(void *r, void *w); +}; diff -r 64b57b4ba9e2 -r f872cc000fe0 example/busy_rate/spe/busy_rate.o Binary file example/busy_rate/spe/busy_rate.o has changed diff -r 64b57b4ba9e2 -r f872cc000fe0 example/busy_rate/spe/spe-main.cc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/example/busy_rate/spe/spe-main.cc Thu Jun 04 00:06:37 2009 +0900 @@ -0,0 +1,10 @@ +#include "Func.h" +#include "Scheduler.h" + +SchedExternTask(Busy_rate); + +void +task_init(void) +{ + SchedRegisterTask(BUSY_TASK, Busy_rate); +} diff -r 64b57b4ba9e2 -r f872cc000fe0 example/busy_rate/spe/spe-main.o Binary file example/busy_rate/spe/spe-main.o has changed diff -r 64b57b4ba9e2 -r f872cc000fe0 file_list --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/file_list Thu Jun 04 00:06:37 2009 +0900 @@ -0,0 +1,49 @@ +Renderer/Cell/Engine.h +Renderer/Cell/SceneGraph2PolygonTask.h +Renderer/DataPack/DataPackEngine.h +Renderer/Simple/SimpleEngine.h +TaskManager/Cell/CellBufferManager.cc +TaskManager/Cell/CellHTaskInfo.cc +TaskManager/Cell/CellTaskListInfo.cc +TaskManager/Cell/CellTaskManagerImpl.cc +TaskManager/Cell/PpeScheduler.cc +TaskManager/Cell/SpeThreads.cc +TaskManager/kernel/main.cc +include/TaskManager/BufferManager.h +include/TaskManager/CellBufferManager.h +include/TaskManager/CellDmaManager.h +include/TaskManager/CellHTaskInfo.h +include/TaskManager/CellScheduler.h +include/TaskManager/CellTaskInfo.h +include/TaskManager/CellTaskListInfo.h +include/TaskManager/CellTaskManagerImpl.h +include/TaskManager/DmaBuffer.h +include/TaskManager/DmaManager.h +include/TaskManager/HTask.h +include/TaskManager/HTaskInfo.h +include/TaskManager/ListData.h +include/TaskManager/MailManager.h +include/TaskManager/MainScheduler.h +include/TaskManager/PpeScheduler.h +include/TaskManager/Random.h +include/TaskManager/SchedExit.h +include/TaskManager/SchedMail.h +include/TaskManager/SchedNop.h +include/TaskManager/SchedNop2Ready.h +include/TaskManager/SchedTask.h +include/TaskManager/SchedTaskBase.h +include/TaskManager/SchedTaskList.h +include/TaskManager/Scheduler.h +include/TaskManager/SpeThreads.h +include/TaskManager/SymTable.h +include/TaskManager/Task.h +include/TaskManager/TaskGroup.h +include/TaskManager/TaskList.h +include/TaskManager/TaskListInfo.h +include/TaskManager/TaskManager.h +include/TaskManager/TaskManagerImpl.h +include/TaskManager/TaskQueue.h +include/TaskManager/TaskQueueInfo.h +include/TaskManager/base.h +include/TaskManager/error.h +include/TaskManager/types.h diff -r 64b57b4ba9e2 -r f872cc000fe0 file_list~ --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/file_list~ Thu Jun 04 00:06:37 2009 +0900 @@ -0,0 +1,74 @@ +Renderer/Cell/Engine.h +Renderer/Cell/SceneGraph2PolygonTask.h +Renderer/DataPack/DataPackEngine.h +Renderer/Simple/SimpleEngine.h +TaskManager/Cell/CellBufferManager.cc +TaskManager/Cell/CellHTaskInfo.cc +TaskManager/Cell/CellTaskListInfo.cc +TaskManager/Cell/CellTaskManagerImpl.cc +TaskManager/Cell/PpeScheduler.cc +TaskManager/Cell/SpeThreads.cc +TaskManager/Fifo/FifoDmaManager.cc +TaskManager/Fifo/FifoTaskManagerImpl.cc +TaskManager/Fifo/MainScheduler.cc +TaskManager/kernel/main.cc +example/HelloWorld/Func.h +example/HelloWorld/main.cc +example/basic/Func.h +example/basic/main.cc +example/cube/CubeSceneGraph.h +example/cube/CubeTask.h +example/cube/RenderingEngine.h +example/dependency_task/Func.h +example/dependency_task/main.cc +example/many_task/Func.h +example/many_task/main.cc +example/many_task/sort.cc +example/many_task/sort.h +example/many_task/task_init.cc +example/post_function/Func.h +example/post_function/main.cc +example/renew_task/Func.h +example/renew_task/main.cc +example/share_task/Func.h +example/share_task/main.cc +include/TaskManager/BufferManager.h +include/TaskManager/CellBufferManager.h +include/TaskManager/CellDmaManager.h +include/TaskManager/CellHTaskInfo.h +include/TaskManager/CellScheduler.h +include/TaskManager/CellTaskInfo.h +include/TaskManager/CellTaskListInfo.h +include/TaskManager/CellTaskManagerImpl.h +include/TaskManager/DmaBuffer.h +include/TaskManager/DmaManager.h +include/TaskManager/FifoDmaManager.h +include/TaskManager/FifoTaskManagerImpl.h +include/TaskManager/HTask.h +include/TaskManager/HTaskInfo.h +include/TaskManager/ListData.h +include/TaskManager/MailManager.h +include/TaskManager/MainScheduler.h +include/TaskManager/PpeScheduler.h +include/TaskManager/Random.h +include/TaskManager/SchedExit.h +include/TaskManager/SchedMail.h +include/TaskManager/SchedNop.h +include/TaskManager/SchedNop2Ready.h +include/TaskManager/SchedTask.h +include/TaskManager/SchedTaskBase.h +include/TaskManager/SchedTaskList.h +include/TaskManager/Scheduler.h +include/TaskManager/SpeThreads.h +include/TaskManager/SymTable.h +include/TaskManager/Task.h +include/TaskManager/TaskGroup.h +include/TaskManager/TaskList.h +include/TaskManager/TaskListInfo.h +include/TaskManager/TaskManager.h +include/TaskManager/TaskManagerImpl.h +include/TaskManager/TaskQueue.h +include/TaskManager/TaskQueueInfo.h +include/TaskManager/base.h +include/TaskManager/error.h +include/TaskManager/types.h diff -r 64b57b4ba9e2 -r f872cc000fe0 include/TaskManager/CellDmaManager.h --- a/include/TaskManager/CellDmaManager.h Wed Jun 03 22:14:20 2009 +0900 +++ b/include/TaskManager/CellDmaManager.h Thu Jun 04 00:06:37 2009 +0900 @@ -13,6 +13,9 @@ #define SPU_PROFILE 1 +extern unsigned int CellDmaManager::wait_time, CellDmaManager::busy_time; +extern unsigned long long CellDmaManager::global_busy_time, CellDmaManager::global_wait_time; + class CellDmaManager : public DmaManager { public: BASE_NEW_DELETE(CellDmaManager); @@ -23,8 +26,7 @@ } DmaList, *DmaListPtr; /* variables */ - unsigned int wait_time, busy_time; - unsigned long long global_busy_time, global_wait_time; + /* functions */ void dma_load(void *buf, uint32 addr, uint32 size, uint32 mask); diff -r 64b57b4ba9e2 -r f872cc000fe0 include/TaskManager/SchedExit.h --- a/include/TaskManager/SchedExit.h Wed Jun 03 22:14:20 2009 +0900 +++ b/include/TaskManager/SchedExit.h Thu Jun 04 00:06:37 2009 +0900 @@ -17,6 +17,13 @@ public: BASE_NEW_DELETE(SchedExit); +<<<<<<< local + SchedExit(Scheduler *m) { + scheduler = m; + } + +======= +>>>>>>> other SchedTaskBase* next(Scheduler *, SchedTaskBase *); }; diff -r 64b57b4ba9e2 -r f872cc000fe0 include/TaskManager/Task.h --- a/include/TaskManager/Task.h Wed Jun 03 22:14:20 2009 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,45 +0,0 @@ -#ifndef INCLUDED_TASK -#define INCLUDED_TASK - -#ifndef INCLUDED_BASE_H_ -# include "base.h" -#endif - -#ifndef INCLUDED_TYPES -# include "types.h" -#endif - -#ifndef INCLUDED_LIST_DATA -# include "ListData.h" -#endif - -#define MAX_PARAMS 8 - -class Task { -public: // variables - - BASE_NEW_DELETE(Task); - - int command; // 4 byte - ListDataPtr inData; // 4 byte - ListDataPtr outData; // 4 byte - uint32 self; // 4 byte - - int param_size; // 4 byte - int param[MAX_PARAMS]; // 4*MAX_PARAMS byte - -public: // functions - int add_inData_t(unsigned int addr, int size); - int add_outData_t(unsigned int addr, int size); - int add_data(ListDataPtr list, unsigned int addr, int size); - int add_param(int param); - -#define add_inData(addr, size) \ - add_inData_t((unsigned int)(addr), (size)); -#define add_outData(addr, size) \ - add_outData_t((unsigned int)(addr), (size)); -}; - -typedef Task* TaskPtr; - -#endif