<!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>