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);
 		}
 	}