#include "pputask.h" #include #include #include #include #include "spu/compute_task.h" extern spe_program_handle_t spu_main; compute_task_t task __attribute__ ((aligned (128))); extern double gettime(void); int num_spes; int processoption(int argc, char **argv) { char *cvalue = NULL; int n; signed char c; opterr = 0; n = 1;/*default number of spus*/ while ((c = getopt (argc, argv, "n:")) != -1){ switch (c) { case 'n': cvalue = optarg; if (sscanf(cvalue, "%d", &n) ==0 || n < 0){ fprintf(stderr, "Invalid spu number(%d)\n", n); return -1; } break; case '?': fprintf (stderr, "Unknown option `-%c'.\n", optopt); return - 1; default: return -1; } } num_spes = n; printf("Program running on %d SPUs\n", n); return 0; } int main(int argc, char** argv) { int n; float totaltime = 0; processoption(argc, argv); ppu_task_physid_as_rank_reset(); ppu_task_spe_num_set(num_spes); ppu_task_debug_level_set(0); if (ppu_task_init(0, NULL, spu_main) < 0){ printf("Init failed\n"); return -1; } sleep(1); n = ppu_task_spe_num_get(); task.common.cmd = SAMPLE_TASK; task.common.size = sizeof(task); gettime(); int i; for (i=0;i < 1000; i++){ ppu_task_run((task_t*)&task); } totaltime = gettime(); printf("time =%f\n", totaltime/1000); printf("program exits\n"); return 0; }