Параллельные алгоритмы

Листинг №5

Пример сетевой программы для процессоров i860

/* Мастер-задача*/  
#include <stdio.h>  
#include <string.h>  
#include <math.h>  
#include <time.h>  
#include <channel.h>  
int last;          /* число модулей  */  
int i1;            /* счетчик секунд */  
int ik;            /* счетчик обработанных участков */  
int going;         /* признак выхода из цикла */  
int time_beg, time_end;  
#include "parametr.c"  
main( ) {  
/* Определение каналов */  
Channel* right_in  = (Channel*) get_param(4);  
Channel* right_out = (Channel*) get_param(5);  
last            =        get_int_param(6)-1;  
load_buff (buf, BUFSIZE);  
/* Засылка данных в сеть */  
  ChanOutInt ( right_out, BUFSIZE);  
  ChanOut    ( right_out, buf, BUFSIZE);  
/*-------------------------------------------------------------------*/  
begin:  
  going=1; i1=0; ik=0;  
/*------------*/  
  while (going)  
  { time_beg=ProcTime(); time_end=time_beg+15625;  
    if (time_end < 0) time_end=time_end & 0X7FFFFFFF;  
    if ( ChanInTimeFail(right_in,netbuf,NETBUFSIZE,time_end) == 0 ) going=0;  
    else  
    { ChanReset(right_in,0);  
      i1++; printf("\033[8;68H"); printf("Timer:%3d sec\n",i1);  
      if (i1 > 2000)  
      { printf(" Результат от 1 процессора не получен ! \n\n");  
        printf(" Нажмите <Ctrl>+<Break> и перезапустите программу !!! ");  
        getchar(); printf("\033[36;40m"); exit(1);  
      }  
    }  
  }  
/*------------*/  
  ik ++;  
  if ( netbuf [0] )  
  {  
    printf(" УРА !!! %d, %d, %d, %d", netbuf [1], netbuf[2],  
                                      netbuf [3], netbuf[4]);  
     goto END; }  
  if ( ik < ((65536 / last) +1) ) goto begin;  
END:; }  
   
/* Woker задача*/  
#include <process.h>  
#include <math.h>  
#include "parametr.c"  
main (){  
  long  Tail,tram,last,dl;  
/*----             Опpделение каналов                      ----*/  
Channel * left_in              = (Channel*) get_param(4);  
Channel * left_out             = (Channel*) get_param(5);  
Channel * right_in              = (Channel*) get_param(6);  
Channel * right_out             = (Channel*) get_param(7);  
Tail=get_int_param(1);  
last= get_int_param(2)-1;  
tram= get_int_param(3)-1;  
/* принял длину из канала */  
  dl = ChanInInt (left_in);  
  ChanIn ( left_in, buf, dl);  
  if (Tail)  
  {  
    ChanOutInt (right_out, dl);  
    ChanOut (right_out, buf, dl);  
  }  
/*-------------------------------------------------------------*/  
/*-----  Обработка --------------------------------------------*/  
/*-------------------------------------------------------------*/  
  hard_core(buf[tram*NETBUFSIZE]);  
  if (Tail)  
  {  
    ChanIn (right_in,netbuf,NETBUFSIZE);  
  }  
  ChanOut (left_out,netbuf,NETBUFSIZE);  
}  

возврат


Наш канал на Youtube

1999 1 2 3 4 5 6 7 8 9 10 11 12
2000 1 2 3 4 5 6 7 8 9 10 11 12
2001 1 2 3 4 5 6 7 8 9 10 11 12
2002 1 2 3 4 5 6 7 8 9 10 11 12
2003 1 2 3 4 5 6 7 8 9 10 11 12
2004 1 2 3 4 5 6 7 8 9 10 11 12
2005 1 2 3 4 5 6 7 8 9 10 11 12
2006 1 2 3 4 5 6 7 8 9 10 11 12
2007 1 2 3 4 5 6 7 8 9 10 11 12
2008 1 2 3 4 5 6 7 8 9 10 11 12
2009 1 2 3 4 5 6 7 8 9 10 11 12
2010 1 2 3 4 5 6 7 8 9 10 11 12
2011 1 2 3 4 5 6 7 8 9 10 11 12
2012 1 2 3 4 5 6 7 8 9 10 11 12
2013 1 2 3 4 5 6 7 8 9 10 11 12
Популярные статьи
КомпьютерПресс использует