<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=windows-1252">
<META content="MSHTML 5.50.4611.1300" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT size=2><FONT size=3> </FONT>
<P class=MsoBodyText><SPAN style="FONT-FAMILY: Arial"><FONT size=5><FONT 
size=6>What are some good books and good articles on how to write parallel 
programs to run on Beowulf clusters (particularly relatively large clusters) for 
a beginner at parallel programming</FONT>.<SPAN style="mso-spacerun: yes">  
</SPAN></FONT></SPAN><SPAN style="FONT-FAMILY: Arial"><FONT size=5><SPAN 
style="mso-spacerun: yes"><FONT size=2>My particular interest relates to 
computations on large semantic networks</FONT>.</SPAN></FONT></SPAN></P>
<P class=MsoNormal><FONT size=5> </FONT>It would probably be best to start 
out with some articles which give an overview, since I only know about parallel 
programming at a very high level of abstraction.</P>
<P class=MsoNormal> I am interested in understanding issues such as:</P>
<BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px">
  <P class=MsoNormal> -how threads are spawned and the costs in terms of 
  time and computational resources of spawning a new instance of a thread,</P>
  <P class=MsoNormal>-how instances of the same thread communicate to each other 
  or to instances of other threads (how do they know which machines other 
  instance of the same thread may be on, and do they normally communicate 
  through a message queue),</P>
  <P class=MsoNormal>-how does a process on one node read and write data into 
  memory stored on another node,</P>
  <P class=MsoNormal>-what control mechanisms are used for allocating 
  computational and memory resources between competing processes,</P>
  <P class=MsoNormal>-how threads are terminated,</P>
  <P class=MsoNormal>-is there a mechanism for suspending a thread or 
  computation on a task until data relative to it has been loaded into memory 
  (for example if data from a list of different places has to be examined, 
  can a prefetch be done for the data associated with each different location, 
  and then can a list be kept of which of those different locations have 
  their data in cache ready to be computed upon, so that CPU can keep busy 
  processing the data that has already been loaded while data for other 
  locations is being loaded into cache, </P>
  <P class=MsoNormal>-how large collections of data on hard disk are mapped into 
  memory, and how the system knows which portions of the data are resident on 
  the memories of which machines,</P>
  <P class=MsoNormal>-how 32 bit processors are used to address information on 
  machines having a lot more than 2^32 bytes or words of RAM,</P>
  <P class=MsoNormal>-how to design parallel programs to run efficiently on 
  Beowulf clusters, </P>
  <P class=MsoNormal>-how memory allocation and de-allocation is done,</P>
  <P class=MsoNormal>-how memory consistency is maintained when multiple 
  processes on different machines are working on the same data, and</P>
  <P class=MsoNormal>-so on.</P></BLOCKQUOTE>
<P class=MsoNormal> I would be thankful for some good pointers. 
Particularly to books and/or articles which are good for beginners to parallel 
programming.<SPAN style="mso-spacerun: yes">  </SPAN>In particular I have 
not programmed much (the last time I wrote a program of any size was over 12 
years ago) and I have never used UNIX.<SPAN style="mso-spacerun: yes">  
</SPAN>So it would be particularly helpful if you could find some articles which 
don’t require deep programming language or UNIX knowledge.</P>
<P class=MsoNormal> <?xml:namespace prefix = o ns = 
"urn:schemas-microsoft-com:office:office" /><o:p></o:p></P>
<P class=MsoNormal>Thanks for your help.</P>
<P class=MsoNormal> <o:p></o:p></P>
<P class=MsoNormal>Ed Porter</P></FONT></DIV></BODY></HTML>