view ppe/Menu.cc @ 1:dcd83cefb980

check , ppe_only, show time , function add.
author yutaka@localhost.localdomain
date Tue, 06 Apr 2010 22:52:33 +0900
parents 68a98d68d62a
children 1e1b0d280427
line wrap: on
line source

#include <stdio.h>
#include <stdlib.h>
#include "Menu.h"
#include "Sys.h"
#include "params.h"

//headk_num と send_param_head の値を必ず返さないと、動作しない

send_params_head_t*
menu(int &head_num) {

  head_num = SPE_NUM;
  int all_task_num = SPE_NUM*1000;
  //int all_task_num = 1;
  //int task_size = MAX_DMA_SIZE;
  int task_size = 16*1024;
  int in_size  = (task_size - sizeof(send_params_head_t)) * all_task_num;
  int out_size = (task_size - sizeof(send_params_head_t)) * all_task_num;

  int *in;
  int *out = (int*)allocate(out_size);

  int partition_size = task_size - sizeof(send_params_head_t);
  send_params_t *send_params = (send_params_t*)allocate(sizeof(send_params_t)*all_task_num);

  send_params_head_t *head = (send_params_head_t*)allocate(sizeof(send_params_head_t)*head_num);

  for (int i = 0; i < all_task_num; i++) {

    send_params[i] = task_allocate(task_size); // header と、in サイズを確保するよ。
    in = (int*)send_params[i].buff;
    
    for (int j = 0; j < partition_size / sizeof(int); j++) {
      in[j] = j;
      //printf("%f\n",in[j]);
    }

  }

  int task_list_length = all_task_num / head_num;
  int index = 0;

  for (int i = 0; i < head_num; i++) {

    head[i].next_task = (unsigned long) send_params[index].head;
    head[i].next_task_size = task_size;

    head[i].ea_out   = (unsigned long) &out[(index * partition_size) / sizeof(int)];
    head[i].size_out = partition_size;

    head[i].pin_in   = 0;
    head[i].pin_out  = 0;


    for (int j = 0; j < task_list_length - 1; j++) {

      //Cerium を要チェック

      send_params[index].head->next_task      = (unsigned long) send_params[index+1].head;
      send_params[index].head->next_task_size = task_size;

      send_params[index].head->ea_out = (unsigned long) &out[((index) * partition_size) / sizeof(int)];
      send_params[index].head->size_out = partition_size;

      send_params[index].head->pin_in = 0;
      send_params[index].head->pin_out = 0;

      index++;
     

    }

    
    send_params[index].head->next_task      = 0;
    send_params[index].head->next_task_size = 0;

    send_params[index].head->ea_out = (unsigned long) &out[(index) * partition_size / sizeof(int)];

    //printf("[PPE] %p\n",(unsigned long)send_params[index].head->ea_out);

    //send_params[index].head->ea_out = 0;
    send_params[index].head->size_out = partition_size;
    
    send_params[index].head->pin_in = 0;
    send_params[index].head->pin_out = 0;

    //send_params[index].head = NULL;
    
    index++;

    
  }

  printf("return run\n");
  
  return head;

}