Newsgroups: comp.parallel From: R.Standish@unsw.edu.au (Russell Standish) Subject: parallel c++ class - summary of responses Date: Wed, 25 Aug 1993 14:20:49 GMT I have had a good response to my question on C++ classes for implementing data parallel variables. A number of different approaches (and interpretations) were taken of my question. My application was to be able to write code on my workstation (either my Linux PC at home, or the Sun workstation at work) that could also run on the CM5 using the parallel architecture. I am also concerned whether my code will be usable on any future machines. The target languages on the CM5 are CMFortran and C*. As CMFortran is a subset of Fortran 90, one might expect that future portability of this language to be ensured, however Fortran90 compilers are not freely available yet (there is one available from NAG, but I would prefer to wait for the moment). C* is a one of a kind language, which I expect will limit your software to the Connection Machine. At the time of writing, Thinking Machines have released a Fortran77 to CMFortran translator, which works like a vectorizing compiler. This actually does solve the portability problem, as f2c is a freely available F77 to C translator. I am now experimenting with C++, which at present I am convinced is nearly ideal for scientific programming purposes. I have long wished for operator overloading so that complicated mathematical expressions involving arbitrary data types could be written as they appear on the page. C++ offers this, so does Fortran90. However C++ is available now, whereas true Fortran 90 is still in the future. I also think that C++ is neater and leaner than Fortran90, which is a minor advantage. Anyway, it made me think that I could define a parallel data type (or at least data types corresponding to the usual scalar data types ints, floats, doubles etc.) The properties of this data type would be things like geometry (how the data is laid out on the machine), and pointers which locate the data in distributed memory. All this detail could be abstracted away, along with the communication primitives, by a class which defines array operations (aka Fortran 90). So, this is what prompted my question. I had the following responses to my question: Parallel Programming Classes for C++: ParLib++, developed by David Greco at David.Greco@crs4.it P++, developed by Dan Quinlan at danq@lemond.colorado.edu "C* in C++" developed by Terry Bossomaier at terry@arp.anu.edu.au N.B., I haven't had a response from the authors of P++ or the C* class to be able to properly evaluate their functionality. New Object Oriented Languages for Data Parallel Programming: Mentat, available by anonymous ftp from server.cs.virginia.edu pC++, available soon from gannon@cs.indiana.edu Mentat is available only for Suns, Silicon Graphics, IBM RS6000s and Intel IPSC/860s. pC++ is a preprocessor for C++ that implements a data parallel extension. Machines currently supported are CM5, paragon, KSR-1, sequent, BBNTC2000 (and soon ibm sp1, and cray t3d), as well as in uniprocessor mode on most workstations. C++ classes for message passing environments: NetClasses++, available from Qualix Group, info@qualix.com DoPVM - a class built on PVM from Skip Hartley, skip@mathcs.emory.edu I personally think that message passing environments require more evolution before there is any kind consensus, let alone standard. Therefore C++ classes may be premature in this case. At this stage, I will look at ParLib++, and also at pC++ when it is available. I don't know whether parallel extensions are really required (thus mandating a preprocessor aka pC++) or whether it can all be done satisfactorily within "standard" C++. Thank you for all your interest and advice. -------------------------------------------------------- Dr. Russell Standish Distributed Systems Manager Classic Inn, Jl Kis Mangunsarkoro, 28 Phone +62 21 390 0861 Menteng, Jakarta Pusat Fax +62 21 331 164 Indonesia R.Standish@unsw.edu.au