changeset 52:e198c3e01cec

spe ¤«¤é scheduler ¤Ã¤Æ¥Ç¥£¥ì¥¯¥È¥ê¤Ë°Ü¤ê¤Þ¤¹
author gongo
date Fri, 15 Feb 2008 19:56:24 +0900
parents c964110017c8
children 0c8ae614d421
files TaskManager/kernel/spe/SpeExit.cc TaskManager/kernel/spe/SpeMail.cc TaskManager/kernel/spe/SpeManager.cc TaskManager/kernel/spe/SpeNop.cc TaskManager/kernel/spe/SpeNop2Ready.cc TaskManager/kernel/spe/SpeTask.cc TaskManager/kernel/spe/SpeTaskList.cc TaskManager/kernel/spe/main.cc
diffstat 8 files changed, 0 insertions(+), 465 deletions(-) [+]
line wrap: on
line diff
--- a/TaskManager/kernel/spe/SpeExit.cc	Fri Feb 15 19:44:23 2008 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-#include <stdio.h>
-#include "SpeExit.h"
-#include "error.h"
-
-SpeTaskBase*
-SpeExit::next(SpeManager *m, SpeTaskBase *p)
-{
-    delete p;
-
-    __debug("SpeExit::next()\n");
-
-    return NULL;
-}
--- a/TaskManager/kernel/spe/SpeMail.cc	Fri Feb 15 19:44:23 2008 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-#include <stdio.h>
-#include "SpeMail.h"
-#include "SpeTaskList.h"
-#include "SpeExit.h"
-#include "error.h"
-
-SpeMail::SpeMail(DmaManager *cn)
-{
-    connector = cn;
-}
-
-void
-SpeMail::read(void)
-{
-
-    __debug("[SpeMail:%s]\n", __FUNCTION__);
-    
-    params_addr = connector->mail_read();
-    
-    __debug("  params_addr = 0x%x\n", params_addr);
-}
-
-SpeTaskBase*
-SpeMail::next(SpeManager *m, SpeTaskBase *p)
-{
-    delete p;
-
-    __debug("[SpeMail:%s]\n", __FUNCTION__);
-
-    // if ʸ¤Ê¤¯¤¹¤Ë¤Ï¡¦¡¦¡¦´Ø¿ô¥Ý¥¤¥ó¥¿¡©
-    if ((int)params_addr == MY_SPE_COMMAND_EXIT) {
-	return new SpeExit();
-    } else {
-	return new SpeTaskList(params_addr, m->get_curListBuf(), connector);
-    }
-}
--- a/TaskManager/kernel/spe/SpeManager.cc	Fri Feb 15 19:44:23 2008 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,120 +0,0 @@
-#include <stdio.h>
-#include <new>
-
-// ÀäÂÐ Fix me
-// memalign ¤Î¤¿¤á¤Ë¤³¤ó¤Ê¤³¤È¤Ë¡¦¡¦¡¦
-// ¤³¤³¤â¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤ä¤ë¤Ù¤­¤À¤è¤Ê¡¼
-#ifdef CELL
-#  include <malloc.h>
-#else
-#  include <stdlib.h>
-#  include <string.h>
-#endif
-
-#include "SpeManager.h"
-#include "SpeNop.h"
-#include "error.h"
-
-SpeManager::SpeManager(void)
-{
-}
-
-void
-SpeManager::init(void)
-{
-    int i;
-
-    /**
-     * memalign ¤À¤È¡¢¤Ê¤¼¤«Æ±¤¸¥¢¥É¥ì¥¹¤·¤«µ¢¤Ã¤Æ¤³¤Ê¤¤¤¢¤²¤¯
-     * task3->exec ¤Î¤È¤³¤í¤Ç¡¢ _start ¤ËÈô¤ó¤ÇºÇ½é¤«¤é¤Ë¤Ê¤Ã¤Æ
-     * ¤À¤±¤É¥ë¡¼¥×¤·¤Ê¤¯¤Æ»ß¤Þ¤ë¤È¤«¤è¤¯¤ï¤«¤é¤ó
-     *
-     * new ¤¹¤ê¤ã¤¢Âç¾æÉפäݤ¤¡£¤¬¡¢¥¢¥é¥¤¥á¥ó¥È±¾¡¹¤Ç
-     * ºÇ°­¤Ç¤â readBuf ¤ä writeBuf ¤Ï memalign ¤Ç¤·¤¿¤¤¤ó¤À¤±¤É¤É¤¦¤·¤Æ¡©
-     *
-     * Äɵ­
-     * ¥¢¥é¥¤¥á¥ó¥È¤ò128¤¸¤ã¤Ê¤¯¤Æ16¤Ë¤·¤¿¤éÄ̤ä¿¡£
-     * ppe¦¤â128¤Ë¤·¤Æ¤ë¤ó¤À¤±¤É¤Ê¡¼
-     * 128¤Ë¤·¤¿¤»¤¤¤Ç¡¢¤É¤Ã¤«¥µ¥¤¥º¤º¤ì¤¿¡©
-     */
-
-    for (i = 0; i < 2; i++) {
-#ifdef CELL
-	listBuf[i]  =
-	    (TaskListPtr)memalign(DEFAULT_ALIGNMENT, sizeof(TaskList));
-	readBuf[i]  = memalign(DEFAULT_ALIGNMENT, 4*1024);
-	writeBuf[i] = memalign(DEFAULT_ALIGNMENT, 4*1024);
-#else
-	listBuf[i] = (TaskListPtr)malloc(sizeof(TaskList));
-	readBuf[i] = malloc(16*1024);
-	writeBuf[i] = malloc(16*1024);
-#endif
-    }
-    listBufFlg = 0;
-    readBufFlg = 0;
-    writeBufFlg = 0;
-
-    task1 = new SpeNop();
-    task2 = new SpeNop();
-    task3 = new SpeNop();
-}
-
-void
-SpeManager::set_connect(DmaManager* cn)
-{
-    connector = cn;
-}
-
-void
-SpeManager::run(void)
-{
-    SpeTaskBase* taskTmp;
-
-    // main loop
-    do {
-	__debug("----------\n");
-	task3->write();
-	task2->exec();
-	task1->read();
-
-	taskTmp = task3;
-	task3 = task2;
-	task2 = task1;
-	task1 = task1->next(this, taskTmp);
-    } while (task1);
-
-    delete task3;
-    delete task2;
-}
-
-void
-SpeManager::finish(void)
-{
-    free(listBuf[0]);
-    free(listBuf[1]);
-    free(readBuf[0]);
-    free(readBuf[1]);
-    free(writeBuf[0]);
-    free(writeBuf[1]);
-}
-
-TaskListPtr
-SpeManager::get_curListBuf(void)
-{
-    listBufFlg ^= 1;
-    return listBuf[listBufFlg];
-}
-
-void*
-SpeManager::get_curReadBuf(void)
-{
-    readBufFlg ^= 1;
-    return readBuf[readBufFlg];
-}
-
-void*
-SpeManager::get_curWriteBuf(void)
-{
-    writeBufFlg ^= 1;
-    return writeBuf[writeBufFlg];
-}
--- a/TaskManager/kernel/spe/SpeNop.cc	Fri Feb 15 19:44:23 2008 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-#include <stdio.h>
-#include "SpeNop.h"
-#include "SpeMail.h"
-#include "error.h"
-
-SpeTaskBase*
-SpeNop::next(SpeManager *m, SpeTaskBase *p)
-{
-    __debug("SpeNop::next()");
-    
-    delete p;
-
-    return new SpeMail(m->connector);
-}
--- a/TaskManager/kernel/spe/SpeNop2Ready.cc	Fri Feb 15 19:44:23 2008 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-#include <stdio.h>
-#include "SpeNop2Ready.h"
-#include "SpeMail.h"
-#include "error.h"
-
-SpeNop2Ready::SpeNop2Ready(DmaManager *cn)
-{
-    connector = cn;
-}
-
-void
-SpeNop2Ready::exec(void)
-{
-    __debug("[SpeNop2Ready:%s]\n", __FUNCTION__);
-
-    connector->mail_write(MY_SPE_STATUS_READY);
-}
-
-SpeTaskBase*
-SpeNop2Ready::next(SpeManager *m, SpeTaskBase *p)
-{
-    __debug("[SpeNop2Ready:%s]\n", __FUNCTION__);
-    
-    delete p;
-
-    return new SpeMail(connector);
-}
--- a/TaskManager/kernel/spe/SpeTask.cc	Fri Feb 15 19:44:23 2008 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-#include <stdio.h>
-#include "SpeTask.h"
-#include "SpeTaskList.h"
-#include "SpeNop2Ready.h"
-#include "DmaManager.h"
-#include "error.h"
-#include "TaskManager.h"
-#include "SymTable.h"
-
-SymTable *TaskManager::symtb;
-
-SpeTask::SpeTask(TaskListPtr _list, TaskPtr _task, void *rbuf, void *wbuf,
-		 DmaManager* cn)
-{
-    list = _list;
-    task = _task;
-    readbuf = rbuf;
-    writebuf = wbuf;
-    connector = cn;
-}
-
-void
-SpeTask::read(void)
-{    
-    __debug("[SpeTask:%s]\n", __FUNCTION__);
-
-    //task = &list->tasks[--list->length];
-    connector->dma_load(readbuf, task->in_addr, task->in_size, DMA_READ);
-}
-
-void
-SpeTask::exec(void)
-{
-    __debug("[SpeTask:%s]\n", __FUNCTION__);
-
-    connector->dma_wait(DMA_READ);
-
-    __debug("  task->command  = %d\n", task->command);
-    __debug("  task->in_size  = %d\n", task->in_size);
-    __debug("  task->in_addr  = 0x%x\n", task->in_addr);
-    __debug("  task->out_addr = 0x%x\n", task->out_addr);
-    __debug("  list->next     = 0x%x\n", (unsigned int)list->next);
-    __debug("  list->length   = 0x%x\n", (unsigned int)list->length);
-
-    // obsolute
-    //   task->in_size = func_list[task->command](writebuf, readbuf);
-
-    // ¤´¤Á¤ã¤´¤Á¤ã¤·¤Æ¤ë¤Ê
-    // ºÇ½é¤«¤é void* ¤¸¤ã¤Ê¤¯¤Æ ´Ø¿ô¥Ý¥¤¥ó¥¿ ¤È¤·¤Æ¤¤¤ì¤ë¤Ù¤­¤«¡©
-    int (*func)(void*, void*)
-	= (int (*)(void*,void*))TaskManager::get_address(task->command);
-    task->in_size = func(writebuf, readbuf);
-    connector->dma_store(writebuf, task->out_addr, task->in_size, DMA_WRITE);
-}
-
-void
-SpeTask::write(void)
-{
-    __debug("[SpeTask:%s]\n", __FUNCTION__);
-
-    connector->dma_wait(DMA_WRITE);
-    connector->mail_write((unsigned int)task->self);
-}
-
-SpeTaskBase*
-SpeTask::next(SpeManager *m, SpeTaskBase *p)
-{
-    __debug("[SpeTask:%s]\n", __FUNCTION__);
-
-    delete p;
- 
-    // ¤³¤³Ä¾¤µ¤Í¤Ð¡£¤É¤¦¤ä¤Ã¤Æ if ʸ¾Ã¤½¤¦¡©
-    // ¥ª¥Ö¥¸¥§¥¯¥ÈÁý¤ä¤»¤Ð¤¤¤¤¤Î¤«¤Ê
-    if (list->length == 0) {
-	if (list->next == 0) {
-	    return new SpeNop2Ready(connector);
-	} else {
-	    return new SpeTaskList((unsigned int)list->next,
-				   m->get_curListBuf(), connector);
-	}
-    } else {
-	//return new SpeTask(list, m->get_curReadBuf(),
-	//m->get_curWriteBuf(), connector);
-
-	// ËÜÅö¤Ï¡¢¤³¤³¤Ç task->command ¤ËÂбþ¤¹¤ë¡¢
-	// SpeTask ¤ò·Ñ¾µ¤¹¤ë class ¤òºî¤ì¤Ð¤¤¤¤¡£¡£¡£¤Ï¤º
-	return new SpeTask(list, &list->tasks[--list->length],
-			   m->get_curReadBuf(), m->get_curWriteBuf(),
-			   connector);
-    }
-}
-
-#if 0
-SpeTask
-createSpeTask(TaskListPtr list, void *rbuf, void *wbuf, DmaManager *cn)
-{
-    TaskPtr task;
-
-    task = &list->tasks[--list->length];
-    
-}
-#endif
--- a/TaskManager/kernel/spe/SpeTaskList.cc	Fri Feb 15 19:44:23 2008 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-#include <stdio.h>
-#include "SpeTaskList.h"
-#include "SpeTask.h"
-#include "SpeNop2Ready.h"
-#include "DmaManager.h"
-#include "error.h"
-
-SpeTaskList::SpeTaskList(unsigned int addr, TaskListPtr listbuf, DmaManager* c)
-{
-    params_addr = addr;
-    list = listbuf;
-    connector = c;
-}
-
-void
-SpeTaskList::read(void)
-{
-    __debug("[SpeTaskList:%s]\n", __FUNCTION__);
-
-    connector->dma_load(list, params_addr, sizeof(TaskList), DMA_READ);
-    connector->dma_wait(DMA_READ);
-}
-
-SpeTaskBase*
-SpeTaskList::next(SpeManager *m, SpeTaskBase *p)
-{
-    __debug("[SpeTaskList:%s]\n", __FUNCTION__);
-
-    delete p;
-
-    if (list->length < 1) {
-	return new SpeNop2Ready(connector);
-    } else {
-	// ËÜÅö¤Ï¡¢¤³¤³¤Ç task->command ¤ËÂбþ¤¹¤ë¡¢
-	// SpeTask ¤ò·Ñ¾µ¤¹¤ë class ¤òºî¤ì¤Ð¤¤¤¤¡£¡£¡£¤Ï¤º
-	return new SpeTask(list, &list->tasks[--list->length],
-			   m->get_curReadBuf(),
-			   m->get_curWriteBuf(),
-			   connector);
-    }
-}
--- a/TaskManager/kernel/spe/main.cc	Fri Feb 15 19:44:23 2008 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,112 +0,0 @@
-#include <stdio.h>
-#include <unistd.h>
-#include "SpeManager.h"
-
-int add(void*, void*);
-int sub(void*, void*);
-int mul(void*, void*);
-int div(void*, void*);
-int sum(void*, void*);
-int sum2(void*, void*);
-
-int (*func_list[16])(void* wbuf, void* rbuf) = {add, sub, mul, div, sum, sum2, 0};
-
-int
-add(void *wbuf, void *rbuf)
-{
-    int *ret = (int*)wbuf;
-    int *data = (int*)rbuf;
-
-    *ret = data[0] + data[1];
-
-    return sizeof(int);
-}
-
-int
-sub(void *wbuf, void *rbuf)
-{
-    int *ret = (int*)wbuf;
-    int *data = (int*)rbuf;
-
-    *ret = data[0]-data[1];
-
-    return sizeof(int);
-}
-
-int
-mul(void *wbuf, void *rbuf)
-{
-    int *ret = (int*)wbuf;
-    int *data = (int*)rbuf;
-
-    *ret = data[0]*data[1];
-
-    return sizeof(int);
-}
-
-int
-div(void *wbuf, void *rbuf)
-{
-    int *ret = (int*)wbuf;
-    int *data = (int*)rbuf;
-
-    *ret = data[0]/data[1];
-
-    return sizeof(int);
-}
-
-int
-sum(void *wbuf, void *rbuf)
-{
-    int *ret = (int*)wbuf;
-    int *data = (int*)rbuf;
-    int i;
-
-    *ret = 0;
-
-    for (i = 0; i < 16; i++) {
-	*ret += data[i];
-    }
-
-    return sizeof(int);
-}
-
-int
-sum2(void *wbuf, void *rbuf)
-{
-    int *ret = (int*)wbuf;
-    int *data = (int*)rbuf;
-    int i;
-
-    *ret = 0;
-
-    for (i = 0; i < 64; i++) {
-	*ret += data[i*4];
-    }
-
-    return sizeof(int);
-}
-
-#ifdef CELL
-
-#include "dma_spe.h"
-
-int
-main(unsigned long long speid,
-     unsigned long long argc, unsigned long long argv)
-{
-    SpeManager *manager = new SpeManager();
-    DmaManager *connect = new SpeDmaManager();
-    manager->set_connect(connect);
-    
-    printf("[SPE] start\n");
-
-    manager->init();
-    manager->run();
-    manager->finish();
-
-    return 0;
-}
-#else
-
-#endif /* CELL */