Mercurial > hg > Game > Cerium
changeset 1232:2dfac651288e draft
fix Prime
author | Daichi Toma <amothic@gmail.com> |
---|---|
date | Tue, 18 Oct 2011 12:19:17 +0900 |
parents | cc1e2b83a764 |
children | 247da1f5e625 |
files | example/Prime/Makefile.def example/Prime/main.cc example/Prime/ppe/Prime.cc example/Prime/ppe/PrintTask.cc example/Prime/spe/Prime.cc example/Prime/spe/PrintTask.cc |
diffstat | 6 files changed, 39 insertions(+), 37 deletions(-) [+] |
line wrap: on
line diff
--- a/example/Prime/Makefile.def Tue Oct 11 17:14:07 2011 +0900 +++ b/example/Prime/Makefile.def Tue Oct 18 12:19:17 2011 +0900 @@ -7,7 +7,7 @@ # ex linux/ps3 CERIUM = ../../../Cerium -CC = g++ -m32 +CC = g++ #CFLAGS = -O9 -Wall CFLAGS = -g -Wall
--- a/example/Prime/main.cc Tue Oct 11 17:14:07 2011 +0900 +++ b/example/Prime/main.cc Tue Oct 18 12:19:17 2011 +0900 @@ -10,8 +10,8 @@ /* TaskManagerを宣言 */ extern TaskManager *manager; -static int prime_num = 256; /* 素数を出力する範囲 */ -static int print_flag = -1; +static long prime_num = 256; /* 素数を出力する範囲 */ +static long print_flag = -1; /* help文章 */ const char *usr_help_str = "Usage: ./prime [-cpu spe_num] [-num N]\n\ @@ -36,22 +36,22 @@ prime_init(TaskManager *manager) { - int div_size = 256; /* 分割するサイズ */ - int task_num = (prime_num + div_size - 1) / div_size; /* タスクの数 */ + long div_size = 256; /* 分割するサイズ */ + long task_num = (prime_num + div_size - 1) / div_size; /* タスクの数 */ - int *output = (int*)manager->allocate(sizeof(int)*task_num*div_size); /* 判定結果を収める配列 */ + bool *output = (bool*)manager->allocate(sizeof(bool)*task_num*div_size); /* 判定結果を収める配列 */ /* 出力用のタスク */ HTask *print = manager->create_task(PrintTask); /* 計算したタスクの数だけタスクを生成する */ - for (int i = 0; i < task_num; i++) { + for (long i = 0; i < task_num; i++) { /* 素数計算タスク */ HTask *prime = manager->create_task(Prime); /* 判定結果を収める配列を渡す */ - prime->set_outData(0,&output[i*div_size],sizeof(int)*div_size); + prime->set_outData(0,&output[i*div_size],sizeof(bool)*div_size); /* SPEを順に使う */ prime->set_cpu(SPE_ANY); @@ -68,7 +68,7 @@ } /* 出力用のタスクに判定結果を収めた配列を渡す */ - print->set_inData(0,output,sizeof(int)*prime_num); + print->set_inData(0,output,sizeof(bool)*prime_num); /* 出力する数を渡す */ print->set_param(0,(memaddr)prime_num); /* printするかどうかを渡す */
--- a/example/Prime/ppe/Prime.cc Tue Oct 11 17:14:07 2011 +0900 +++ b/example/Prime/ppe/Prime.cc Tue Oct 18 12:19:17 2011 +0900 @@ -9,25 +9,26 @@ static int prime(SchedTask *smanager, void *rbuf, void *wbuf) { - int start = (long)smanager->get_param(0); /* 素数判定の開始地点 */ - int end = (long)smanager->get_param(1); /* 素数判定の終了地点 */ - int range = end - start; /* 判定する範囲 */ + long start = (long)smanager->get_param(0); /* 素数判定の開始地点 */ + long end = (long)smanager->get_param(1); /* 素数判定の終了地点 */ + long range = end - start; /* 判定する範囲 */ /* 判定結果を収める配列を受け取る */ - int *output = (int*)smanager->get_output(wbuf, 0); + bool *output = (bool*)smanager->get_output(wbuf, 0); /* 初期化 */ for (int i = 0; i < range; i++){ - output[i] = 1; + output[i] = true; } - for (int i = start, index = 0; i < end; i++, index++) { - int limit = (int)sqrt((double) i); /* 割る数の最大値を求める */ - for (int j = 2; j <= limit; j++) { + + for (long i = start, index = 0; i < end; i++, index++) { + long limit = (long)sqrt((double) i); /* 割る数の最大値を求める */ + for (long j = 2; j <= limit; j++) { /* 割り切れた場合、0を代入し素数じゃないという判定を下す */ if (i % j == 0) { - output[index] = 0; + output[index] = false; break; } }
--- a/example/Prime/ppe/PrintTask.cc Tue Oct 11 17:14:07 2011 +0900 +++ b/example/Prime/ppe/PrintTask.cc Tue Oct 18 12:19:17 2011 +0900 @@ -8,18 +8,18 @@ static int print(SchedTask *smanager, void *rbuf, void *wbuf) { - int print_flag = (long)smanager->get_param(1); //プリントするかどうか + long print_flag = (long)smanager->get_param(1); //プリントするかどうか if (print_flag < 0) { return 0; } - int length = (long)smanager->get_param(0); /* 出力する範囲 */ - int *input = (int*)smanager->get_input(rbuf, 0); /* 出力する配列 */ + long length = (long)smanager->get_param(0); /* 出力する範囲 */ + bool *input = (bool*)smanager->get_input(rbuf, 0); /* 出力する配列 */ /* 素数の判定結果が1ならば出力する */ - for (int i = 0; i < length; i++) { - if ( input[i] == 1 ) { + for (long i = 0; i < length; i++) { + if ( input[i] == true ) { printf("%d ",i); } }
--- a/example/Prime/spe/Prime.cc Tue Oct 11 17:14:07 2011 +0900 +++ b/example/Prime/spe/Prime.cc Tue Oct 18 12:19:17 2011 +0900 @@ -9,25 +9,26 @@ static int prime(SchedTask *smanager, void *rbuf, void *wbuf) { - int start = (int)smanager->get_param(0); /* 素数判定の開始地点 */ - int end = (int)smanager->get_param(1); /* 素数判定の終了地点 */ - int range = end - start; /* 判定する範囲 */ + long start = (long)smanager->get_param(0); /* 素数判定の開始地点 */ + long end = (long)smanager->get_param(1); /* 素数判定の終了地点 */ + long range = end - start; /* 判定する範囲 */ /* 判定結果を収める配列を受け取る */ - int *output = (int*)smanager->get_output(wbuf, 0); + bool *output = (bool*)smanager->get_output(wbuf, 0); /* 初期化 */ for (int i = 0; i < range; i++){ - output[i] = 1; + output[i] = true; } - for (int i = start, index = 0; i < end; i++, index++) { - int limit = (int)sqrt((double) i); /* 割る数の最大値を求める */ - for (int j = 2; j <= limit; j++) { + + for (long i = start, index = 0; i < end; i++, index++) { + long limit = (long)sqrt((double) i); /* 割る数の最大値を求める */ + for (long j = 2; j <= limit; j++) { /* 割り切れた場合、0を代入し素数じゃないという判定を下す */ if (i % j == 0) { - output[index] = 0; + output[index] = false; break; } }
--- a/example/Prime/spe/PrintTask.cc Tue Oct 11 17:14:07 2011 +0900 +++ b/example/Prime/spe/PrintTask.cc Tue Oct 18 12:19:17 2011 +0900 @@ -8,18 +8,18 @@ static int print(SchedTask *smanager, void *rbuf, void *wbuf) { - int print_flag = (long)smanager->get_param(1); //プリントするかどうか + long print_flag = (long)smanager->get_param(1); //プリントするかどうか if (print_flag < 0) { return 0; } - int length = (int)smanager->get_param(0); /* 出力する範囲 */ - int *input = (int*)smanager->get_input(rbuf, 0); /* 出力する配列 */ + long length = (long)smanager->get_param(0); /* 出力する範囲 */ + bool *input = (bool*)smanager->get_input(rbuf, 0); /* 出力する配列 */ /* 素数の判定結果が1ならば出力する */ - for (int i = 0; i < length; i++) { - if ( input[i] == 1 ) { + for (long i = 0; i < length; i++) { + if ( input[i] == true ) { printf("%d ",i); } }