# HG changeset patch # User Masataka Kohagura # Date 1390409921 -32400 # Node ID 597d1487d3bca39a71dd4f30bc15740253412749 # Parent 62463090ce750511e05058ea5448f09a081f72a0 add 08.txt diff -r 62463090ce75 -r 597d1487d3bc 2014/January/memo/08th.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2014/January/memo/08th.txt Thu Jan 23 01:58:41 2014 +0900 @@ -0,0 +1,22 @@ +Cerium 読み読み + kernel/ppe/CpuThreads.h + CpuThreads::~CpuThreads() にて cpu_num + io_num 分を send_mail 、 pthread_join 、 delete args[i].scheduler している。 + pthread_join は 指定 Threads が合流するまで動作をブロックし、その後 pthread_create したものを解放する。 + cpu_thread_arg_t をここで削除している。 + + CpuThreads::send_mail(int cpuid, int num, memaddr *data) CERIUM_GPU のときと条件が違う。今回は not CERIUM_GPU を見ていく。 + args[cpuid-id_offset].scheduler->mail_write_from_host(*data); + args は cpu_thread_arg_t であり、その中に宣言されている scheduler は MainScheduler である。 + scheduler->mail_write_from_host() は fifoDmaManager->mail_write_from_host(data) を返す。 + fifoDmaManager は・・・わからん・・・ + + CpuThreads::has_mail(int cpuid, int count, memaddr *ret) は args[cpuid-id_offset].scheduler->has_mail_from_host() が + 0 でないときに get_mail する。 + args[cpuid-id_offset].scheduler->has_mail_from_host() (FifoDmaManager::has_mail_from_host() )は + mail_queue->count() を返す。 + + MainScheduler.h は ManyCore/MainScheduler.h にある。 + + CpuThreads::cpu_thread_run(void *args) は SpeTaskManagerImpl を呼び出して、 c_scheduler ( Scheduler 型) に + cpuid 、 mincpu 、 maxcpu を格納する。それらを TaskManagerImpl::set_scheduler に 初期設定した c_scheduler を渡す。 + argt->wait->sem_v() で、準備完了したスレッドができるたんびに、セマフォに 1 加える。