[net.lang.ada] Request for Comments : Distributed Ada Systems

contr23@NOSC-TECR ("CONTR23") (03/07/86)

     I am presently interested in accumulating a  list  of  "concerns"

that  a software designer or implementor may want to considered in the

design of an Ada Multi Processor System.  My primary  interest  is  to

accumulate  past  experience  that other people have had in developing

software for distributed systems and determine if it is applicable for

the  Ada  environment.   Any  insight  into  the  area  of distributed

systems, however, will at least be considered.



     The follow list of "concerns" can be used to serve as an example:







     a)  Program Development - Will pragmas be used to target specific

         sections  of  code  to  system  processors?(The  current  Ada

         tasking model dictates that this  should  be  transparent  to

         implementors and designers)



     b)  RTK  Scheduler  -  How  indivual  vendors   implement   their

         scheduler  may  have  dramatic  effects  on  the  application

         programs that they execute.  It would be beneficial  if  some

         discussion or information pertaining to the scheduling algorithm

         be passed on the implementors.



     c)  Will each processor have it's own RTK?



     d)  How will communication be performed between  each  processor?

         Will  benchmark  data  be available to determine the speed of

         rendezvous?  How reliable is this communication?



     e)  Size of the RTK?



     f)  Will a debugger be available?  Can  it  be  executed  on  the

         development processor?





     This is by no means a complete list of questions, however, I feel

that  it may give you an idea of some of my concerns.  An attempt will

be made to categorize the list into distinct sections.  If anyone  has

any  suggestions  with  respect to the organization, please pass along

your thoughts.  I'll keep the list open for at least two months,  then

send out the accumulated list for review.







------------------

Jim Baldo

E-Systems

ECI Division

P.O. Box 12248

St. Petersburg, FL 33733

813-381-2000 ext. 4586

CONTR23@NOSC-TECR

------

ian@LORAL.UUCP (Ian Kaplan) (03/13/86)

  Please post in the Ada news groups on USENET and ARPANet.
		    Thanks,
			    Ian Kaplan

  This note is in response to Jim Baldo's note regarding Ada on distributed
  systems.  I tried to mail this to Jim and I was unable to get my mail
  through.

  I am one of the developers working on a large grain data flow
  system.  Our data flow system, the LDF 100, is a distributed architecture
  in that it does not have any memory that is shared by all the processors.
  Instead, memory is distributed throughout the system and processors
  communicate over a message passing (token) bus.  There has been some 
  interest in Ada on our system.  I am not an Ada expert, but from my 
  reading of the Ada language spec. it is unclear what we have to do to 
  implement Ada on our system.

  The LDF 100 logically consists of two components (although they are
  physically packaged in the same chassis): a Berkeley UNIX development
  environment and the data flow engine.  All the processors in the system,
  including the data flow processing elements, are implemented with the
  National Semiconductor NS32016 microprocessor.  There is an Ada compiler
  for the 32000 from Verdix, so there should be no problem getting validated
  Ada on the UNIX system.  Our problem is that we do not know that we have 
  to do with Ada to get it validated on the data flow parallel processor.  

  We have designed our system so that it supports large scale parallelism.
  We can, for example, build a system with over one hundred Processing
  Elements, that has close to supercomputer performance.  The multiprocess
  model used by Ada was not designed for large scale parallel systems.  At
  best it was designed for systems with a few processors and shared
  memory.  In a large scale parallel system centralized control will not
  work, so the idea of a central scheduler can not be used.

  In data flow there is no central control.  A data flow  program is 
  organized in a data flow graph and graph nodes execute when they have 
  the necessary data.  This allows asynchronous processing through the 
  graph (i.e., pipelining).  We are unsure how to reconcile this model with
  Ada.  The Ada programming model seems to be based on
  the assumption that there is shared memory and a central program that
  controls everything.

  We would like to run Ada on our system in the same way that we run 
  C and FORTRAN.  A program for our system consists of two components, a
  graph that describes the parallel structure of the application and the
  code that implements the nodes of the graph.  This code is written in
  either C or FOTRAN.  One of the simplest examples is a sort-merge graph.

		  
			   data source
			    /  / \  \
                           /  /   \  \
                          S  S     S  S
			   \/       \/
			   Merge     Merge
			    \        /
			     \      /
			      \    /
				Merge
				 |

  
  We express this graph in a custom graph langauge

      
      Sort1 = "/usr/ian/sort"
      import{ stream DataInput1 }
      export{ stream SortResult1 }

      Sort2 = "/usr/ian/sort"
      import{ stream DataInput2 }
      export{ stream SortResult2 }

      Merge = "/usr/ian/merge"
      import{ stream SortResult1, SortResult2 }
      export{ stream Merge1 }

	  etc...

  The quoted string is the UNIX file name of the code file that 
  implements that particular node.  Each node is implemented by a fully
  linked program (i.e., UNIX code file).  A C langauge skeleton program
  for the sort is shown below:

  #define INPUT_ARC 1
  #define OUTPUT_ARC 1

    main()  /* sort an array of short integers */
    {
      int len;
      short *array_ptr;

      /* read in the data to be sorted */
      len = floread( INPUT_ARC, &array_ptr );

      /* sort the data */

      /* write out the sorted data */
      flowrite( OUTPUT_ARC, array_ptr, len);
    } /* end sort program */

  In data flow a node is not scheduled for execution until it has all the
  data it needs to execute.  For this reason there are no "waiting reads"
  in a data flow system.  The floread executed above will return
  immediately.  As I have mentioned abnove, data flow is an asynchronous 
  programming model.  Unlike a rendezvous the flowrite does not have to 
  synchronize with the reader.

  In addition to having C and FORTRAN nodes we would like to have Ada nodes.
  Our hope is that the data flow engine will be simply another target
  environment, just as an F-16 computer module would be.  This would allow
  us to certify the Ada compiler under our UNIX system and run Ada nodes on
  the data flow engine.  Whether this is a realistic expectation is still
  unclear.

  I appologize for the length of this posting, but I do not think that a
  shorter one would have made our problem clear.

		     Ian Kaplan
		     Loral Data Flow Group
		     Loral Instrumentation
		     (619) 560-5888 x4812
	     USENET: {ucbvax,decvax,ihnp4}!sdcsvax!sdcc6!loral!ian
	     ARPA:   sdcc6!loral!ian@UCSD
	     USPS:   8401 Aero Dr. San Diego, CA 92123