Add release notes for version 6.5.0
[charm.git] / CHANGES
1 This file describes the most significant changes. For more detail, use
2 'git log' on a clone of the charm repository.
3
4 ================================================================================
5 What's new in Charm++ 6.5.0
6 ================================================================================
7
8 - The Charm++ manual has been thoroughly revised to improve its organization,
9   comprehensiveness, and clarity, with many additional example code snippets
10   throughout.
11
12 - The runtime system now includes the 'Metabalancer', which can provide
13   substantial performance improvements for applications that exhibit dynamic
14   load imbalance. It provides two primary benefits. First, it automatically
15   optimizes the frequency of load balancer invocation, to avoid work stoppage
16   when it will provide too little benefit. Second, calls to AtSync() are made
17   less synchronous, to further reduce overhead when the load balancer doesn't
18   need to run. To activate the Metabalancer, pass the option +MetaLB at
19   runtime. To get the full benefits, calls to AtSync() should be made at every
20   iteration, rather than at some arbitrary longer interval as was previously
21   common.
22
23 - Many feature additions and usability improvements have been made in the
24   interface translator that generates code from .ci files:
25   * Charmxi now provides much better error reports, including more accurate
26     line numbers and clearer reasons for failure, including some semantic
27     problems that would otherwise appear when compiling the C++ code or even at
28     runtime.
29   * A new SDAG construct 'case' has been added that defines a disjunction over a
30     set of 'when' clauses: only one 'when' out of a set will ever be triggered.
31   * Entry method templates are now supported. An example program can be found
32     in tests/charm++/method_templates/.
33   * SDAG keyword "atomic" has been deprecated in favor of the newly supported
34     keyword "serial". The two are synonymous, but "atomic" is now provided only
35     for backward compatibility.
36   * It is no longer necessary to call __sdag_init() in chares that contain SDAG
37     code - the generated code does this automatically. The function is left as
38     a no-op for compatibility, but may be removed in a future version.
39   * Code generated from .ci files is now primarily in .def.h files, with only
40     declarations in .decl.h. This improves debugging, speeds compilation,
41     provides clearer compiler output, and enables more complete encapsulation,
42     especially in SDAG code.
43   * Mainchare constructors are expected to take CkArgMsg*, and always have
44     been. However, charmxi would allow declarations with no argument, and
45     assume the message. This is now deprecated, and generates a warning.
46
47 - Projections tracing has been extended and improved in various ways
48   * The trace module can generate a record of network topology of the nodes in
49     a run for certain platforms (including Cray), which Projections can
50     visualize.
51   * If the gzip library (libz) is available when Charm++ is compiled, traces
52     are compressed by default.
53   * If traces were flushed as a results of filled buffers during the run, a
54     warning will be printed at exit to indicate that the user should be wary of
55     interference that may have resulted.
56   * In SMP builds, it is now possible to trace message progression through the
57     communication threads. This is disabled by default to avoid overhead and
58     potential misleading interpretation.
59
60 - Array elements can be block-mapped at the SMP node level instead of at the
61   per-PE level (option "+useNodeBlkMapping").
62
63 - AMPI can now privatize global and static variables using TLS. This is
64   supported in C and C++ with __thread markings on the variable declarations
65   and definitions, and in Fortran with a patched version of the gfortran
66   compiler. To activate this feature, append '-tls' to the '-thread' option's
67   argument when you link your AMPI program.
68
69 - Charm can now be built to only support message priorities of a specific data
70   type. This enables an optimized message queue within the the runtime
71   system. Typical applications with medium sized compute grains may not benefit
72   noticeably when switching to the new scheduler. However, this may permit
73   further optimizations in later releases.
74
75   The new queue is enabled by specifying the data type of the message
76   priorities while building charm using --with-prio-type=dtype. Here, dtype can
77   be one of char, short, int, long, float, double and bitvec. Specifying bitvec
78   will permit arbitrary-length bitvector priorities, and is the current default
79   mode of operation. However, we may change this in a future release.
80
81 - Converse now provides a complete set of wrappers for
82   fopen/fread/fwrite/fclose to handle EINTR, which is not uncommon on the
83   increasingly-popular Lustre. They are named CmiF{open,read,write,close}, and
84   are available from C and C++ code.
85
86 - The utility class 'CkEntryOptions' now permits method chaining for cleaner
87   usage. This applies to all its set methods (setPriority, setQueueing,
88   setGroupDepID). Example usage can be found in examples/charm++/prio/pgm.C.
89
90 - When creating groups or chare arrays that depend on the previous construction
91   of another such entity on the local PE, it is now possible to declare that
92   dependence to the runtime. Creation messages whose dependence is not yet
93   satisfied will be buffered until it is.
94
95 - For any given chare class Foo and entry method Bar, the supporting class's
96   member CkIndex_Foo::Bar() is used to lookup/specify the entry method
97   index. This release adds a newer API for such members where the argument is a
98   function pointer of the same signature as the entry method. Those new
99   functions are used like CkIndex_Foo::idx_Bar(&Foo::Bar). This permits entry
100   point index lookup without instantiating temporary variables just to feed the
101   CkIndex_Foo::Bar() methods. In cases where Foo::Bar is overloaded, &Foo::Bar
102   must be cast to the desired type to disambiguate it.
103
104 - CkReduction::reducerType now have PUP methods defined; and can hence be
105   passed as parameter-marshalled arguments to entry methods.
106
107 - The runtime option +stacksize for controlling the allocation of user-level
108   threads' stacks now accepts shorthanded annotation such as 1M.
109
110 - The -optimize flag to the charmc compiler wrapper now passes more aggressive
111   options to the various underlying compilers than the previous '-O'.
112
113 - The charmc compiler wrapper now provides a flag -use-new-std to enable
114   support for C11 and C++11 where available. To use this in application code,
115   the runtime system must have been built with that flag as well.
116
117 - When using, CmiMemoryUsage(), the runtime can be instructed not to use the
118   underlying mallinfo() library call, which can be inaccurate in settings where
119   usage exceeds INT_MAX. This is accomplished by setting the environment
120   variable "MEMORYUSAGE_NO_MALLINFO".
121
122 - Experimental Features
123   * Initial implementation of a fast message-logging protocol. Use option
124     'mlogft' to build it.
125   * Message compression support for persistent message on Gemini machine layer.
126   * Node-level inter-PE loop/task parallelization is now supported through
127     CkLoop
128   * New temperature/CPU frequency aware load balancer
129   * Support interoperation of Charm++ and native MPI code through dynamically
130     switching control between the two
131   * API in centralized load balancers to get and set PE speed
132   * A new scheme for optimization of double in-memory checkpoint/restart.
133   * Message combining library for improved fine-grained communication
134     performance
135
136 Platform-Specific Changes
137 -------------------------
138
139 - Cray XE/XK
140   * The gemini_gni network layer has been heavily tuned and optimized,
141     providing substantial improvements in performance, scalability, and
142     stability.
143   * The gemini_gni-crayxe machine layer supports a 'hugepages' option at build
144     time, rather than requiring manual configuration file editing.
145   * Persistent message optimizations can be used to reduce latency and
146     overheads
147   * Experimental support for 'urgent' sends, which are sent ahead of any other
148     outgoing messages queued for transmission.
149
150 - IBM Blue Gene Q: Experimental machine-layer support for the native PAMI
151   interface and MPI, with and without SMP support. This supports many new
152   systems, including ALCF's Mira and LLNL's Sequoia. The 'mpi-bluegeneq' and
153   'pamilrts-bluegeneq' variants are probably the most stable.
154
155 - Infiniband Verbs: Better support for more flavors of ibverbs libraries
156
157 - MPI Network Layer
158   * Experimental rendezvous protocol for better performance above some MPI
159     implementations.
160   * Some tuning parameters ("+dynCapSend" and "+dynCapRecv") are now
161     configurable at job launch, rather than Charm++ compilation.
162
163 - PGI C++: Disable automatic 'using namespace std;'
164
165 - Charm++ now supports ARM, both non-smp and smp.
166
167 - Mac OS X: Compilation options to build and link correctly on newer versions
168
169
170 ================================================================================
171 What's new in Charm++ 6.4.0
172 ================================================================================
173
174 --------------------------------------------------------------------------------
175 Platform Support
176 --------------------------------------------------------------------------------
177
178 - Cray XE and XK systems using the Gemini network via either MPI
179   (mpi-crayxe) or the native uGNI (gemini_gni-crayxe)
180
181 - IBM Blue Gene Q, using MPI (mpi-bluegeneq) or PAMI (pami-bluegeneq)
182
183 - Clang, Cray, and Fujitsu compilers
184
185 - MPI-based machine layers can now run on >64k PEs
186
187 --------------------------------------------------------------------------------
188 General Changes
189 --------------------------------------------------------------------------------
190
191 - Added a new [reductiontarget] attribute to enable
192   parameter-marshaled recipients of reduction messages
193
194 - Enabled pipelining of large messages in CkMulticast by default
195
196 - New load balancers added:
197   * TreeMatch
198   * Zoltan
199   * Scotch graph paritioning based: ScotchLB and Refine and Topo variants
200   * RefineSwap
201
202 - Load balancing improvements:
203
204   * Allow reduced load database size using floats instead of doubles
205   * Improved hierarchical balancer
206   * Periodic balancing adapts its interval dynamically
207   * User code can request a callback when migration is complete
208   * More balancers properly consider object migratability and PE
209     availability and speed
210   * Instrumentation records multicasts
211
212 - Chare arrays support options that can enable some optimizations
213
214 - New 'completion detection' library for parallel process termination
215   detection, when the need for modularity excludes full quiescence
216   detection
217
218 - New 'mesh streamer' library for fine-grain many-to-many collectives,
219   handling message bundling and network topology
220
221 - Memory pooling allocator performance and resource usage improved
222   substantially
223
224 - AMPI: More routines support MPI_IN_PLACE, and those that don't check
225   for it
226
227 ================================================================================
228 What's new in Charm++ 6.2.1 (since 6.2.0)
229 ================================================================================
230
231 --------------------------------------------------------------------------------
232 New Supported Platforms:
233 --------------------------------------------------------------------------------
234
235 POWER7 with LAPI on Linux
236
237 Infiniband on PowerPC
238
239 --------------------------------------------------------------------------------
240 General Changes
241 --------------------------------------------------------------------------------
242
243 - Better support for multicasts on groups
244 - Topology information gathering has been optimized
245 - Converse (seed) load balancers have many new optimizations applied
246 - CPU affinity can be set more easily using +pemap and +commap options
247   instead of the older +coremap
248 - HybridLB (hierarchical balancing for very large core-count systems)
249   has been substantially improved
250 - Load balancing infrastructure has further optimizations and bug fixes
251 - Object mappings can be read from a file, to allow offline
252   topology-aware placement
253 - Projections logs can be spread across multiple directories, speeding
254   up output when dealing with thousands of cores (+trace-subdirs N
255   will divide log files evenly among N subdirectories of the trace
256   root, named PROGNAME.projdir.K)
257 - AMPI now implements MPI_Issend
258 - AMPI's MPI_Alltoall uses a flooding algorithm more agressively,
259   versus pairwise exchange
260 - Virtualized ARMCI support has been extended to cover the functions
261   needed by CAF
262
263 --------------------------------------------------------------------------------
264 Architecture-specific changes
265 --------------------------------------------------------------------------------
266
267 - LAPI SMP has many new optimizations applied
268
269 - Net builds support the use of clusters' mpiexec systems for job
270   launch, via the ++mpiexec option to charmrun
271
272 ================================================================================
273 What's new in Charm++ 6.2.0 (since 6.1)
274 ================================================================================
275
276 --------------------------------------------------------------------------------
277 New Supported Platforms:
278 --------------------------------------------------------------------------------
279
280 64-bit MIPS, such as SiCortex, using mpi-linux-mips64
281
282 Windows HPC cluster, using mpi-win32/mpi-win64
283
284 Mac OSX 10.6, Snow Leopard (32-bit and 64-bit).
285
286 --------------------------------------------------------------------------------
287 General Changes
288 --------------------------------------------------------------------------------
289
290 Runtime support
291  - Smarter build/configure scripts
292  - A new interface for model-based load balancing
293  - new CPU topology API
294  - a general implementation of CmiMemoryUsage()
295  - Bug fix: Quiescence detection (QD) works with immediate messages
296  - New reduction functions implemented in Converse
297  - CCS (Converse Client-Server) can deliver message to more than one processor
298  - Added a memory-aware adaptive scheduler, which can be optionally
299    compiled in to charm
300  - Added preliminary support for automatic message prioritization
301    (disabled by default)
302
303 Charm++
304  - Cross-array and cross-group sections
305  - Structured Dagger (SDAG): Support templated arguments properly
306  - Plain chares support checkpoint/restart (both in-memory and disk-based)
307  - Conditional packing of messages and parameters in SMP scenario
308  - Changes to the CkArrayIndex class hierarchy
309    -- sizeof() all CkArrayIndex* classes is now the same
310    -- Codes using custom array indices have to use placement-new to construct
311       their custom index. Refer example code: examples/charm++/hello/fancyarray/
312    -- *** Backward Incompatibility ***
313       CkArrayIndex[4D/5D/6D]::index are now of type int (instead of short)
314       However the data is stored as shorts. Access by casting
315       CkArrayIndexND::data() appropriately
316    -- *** Deprecated ***
317       The direct use of public data member
318       CkArrayIndexND::index (N=1..6) is deprecated. We reserve the right to
319       change/remove this variable in future releases of Charm++.
320       Instead, please access the indices via member function:
321       int CkArrayIndexND::data()
322
323 Adaptive MPI (AMPI)
324  - Compilers renamed to avoid collision with host MPI (ampicc, ampiCC,
325    ampif77, ampif90)
326  - Improved MPI standard conformance, and documentation of non-conformance
327    * Bug fixes in: MPI_Ssend, MPI_Cart_shift, MPI_Get_count
328    * Support MPI_IN_PLACE in MPI_(All)Reduce
329    * Define various missing constants
330  - Return the received message's tag in response to a non-blocking
331    wildcard receive, to support SuperLU
332  - Improved tracing for BigSim
333
334 Multiphase Shared Arrays (MSA)
335  - Typed handles to enforce phases
336  - Split-phase synchronization to enable message-driven execution
337  - 3D arrays
338
339 TCharm
340  - Automatic tracing of API calls for simulation and analysis
341
342 Debugging
343  - Wider support for architectures other than net- (in particular MPI layers)
344  - Improved support for large scale debugging (better scalability)
345  - Enhanced record/replay stability to handle various events, and to
346    signal unexpected messages
347  - New detailed record/replay: The full content of messages can be
348    recorded, and a single processor can be re-executed outside of the
349    parallel application
350
351 Performance analysis
352  - Tracing of nested entry methods
353
354 Automatic Performance Tuning
355  - Created an automatic tuning framework [still for experimental use only]
356
357 CkMulticast
358  - Network-topology / node aware spanning trees used internally for and
359    lower bytes on the network and improved performance in multicasts and
360    reductions delegated to this library
361
362 Comlib
363  - Improved OneTimeMulticastStrategy classes
364
365 BigSim
366  - Out-of-core support, with prefetching capability
367  - Detailed tracing of MPI calls
368  - Detailed record/replay support at emulation time, capable of
369    replaying any emulated processor after obtained recorded logs.
370
371 --------------------------------------------------------------------------------
372 Architecture-specific changes
373 --------------------------------------------------------------------------------
374
375 Net-*
376  - Can run jobs with more than 1024 PEs
377
378 Net-Linux
379  - New charmrun option ++no-va-randomization to disable address space
380    randomization (ASLR). This is most useful for running AMPI with
381    isomalloc
382
383 MPI
384  - Default to using ampicxx instead of mpiCC
385
386 MPI-SMP
387  - The +p option now has the same semantics as in other smp builds
388
389 Power 7
390  - Support for VSX in SIMD abstraction API
391
392 Blue Gene/L
393  - Compilers and options have been updated to the latest ones
394
395 Blue Gene/P
396  - Added routines for measuring performance counters on BG/P.
397  - Updated to support latest DCMF driver version. On ANL's Intrepid, you may
398    need to set BGP_INSTALL=/bgsys/drivers/V1R4M1_460_2009-091110P/ppc in your
399    environment. This is the default on ANL's Surveyor.
400
401 Cray XT
402  - cputopology information is now available on XT3/4/5
403
404 Infiniband (ibverbs)
405  - Bug fix: plug memory leaks that caused failures in long runs
406  - Optimized to reduce startup delays
407
408 LAPI
409  - Support for SMP (experimental)
410
411
412 ================================================================================
413 Note that changes from 5.9, 6.0, and 6.1 are not documented here. A partial list
414 can be found on the charm download page, or by reading through version control
415 logs.
416
417 ================================================================================
418 What's New since Charm++ 5.4 release 1
419 ================================================================================
420
421 --------------------------------------------------------------------------------
422 New Supported Platforms:
423 --------------------------------------------------------------------------------
424 1. Charm++ ported to IA64 Itanium running Win2K and Linux, Charm++ also support
425    Intel C/C++ compilers;
426
427 2. Charm++ ported to Power Macintosh powerpc running Darwin;
428
429 3. Charm++ ported to Myrinet networking with GM API;
430
431 --------------------------------------------------------------------------------
432 Summary of New Features:
433 --------------------------------------------------------------------------------
434 1. Structure Dagger
435    Structured Dagger is a coordination language built on top of CHARM++.
436    Structured Dagger allows easy expression of dependences among messages and 
437    computations and also among computations within the same object using 
438    when-blocks and various structured constructs. 
439
440 2. Entry functions support parameter marshalling
441    Now you can declare and invoke remote entry functions using parameter 
442    marshalling instead of defining messages.
443
444 3. Easier running - standalone mode
445    For net-* version running locally, you can now run Charm programs without 
446    charmrun. Running a node program directly from command line is now the
447    same as "charmrun +p1 <program>"; for SMP version, you can also specify 
448    multiple (local) processors, as in "program +p2".
449    
450
451 --------------------------------------------------------------------------------
452 Summary of Changes:
453 --------------------------------------------------------------------------------
454 1. "build" changed for compilation of Charm++
455    To build Charm++ from scratch, we now take additional command line options
456    to compile with addon features and using different compilers other than gcc.
457    For example, to build Linux IA64 with Myrinet support, type command:
458    ./build net-linux-ia64  gm
459
460
461                 *******   Old Change histories *******
462
463
464 ================================================================================
465 What's New in Charm++ 5.4 release 1 since 5.0
466 ================================================================================
467
468 --------------------------------------------------------------------------------
469 New Supported Platforms:
470 --------------------------------------------------------------------------------
471
472 1. Win9x/2000/NT:  with Visual C++ or Cygwin gcc/g++, you can compile and run 
473    Charm++ programs on all Win32 platforms.
474    
475 2. Scyld Beowulf:  Charm++ has been ported to the Linux-based Scyld Beowulf 
476    operating system. For more information on Scyld, see <http://www.scyld.com>
477
478 3. MPI with VMI:   Charm++ has been ported to NCSA's Virtual Machine Interface,
479    which is an efficient messaging library for heterogeneous cluster 
480    communication.
481
482
483 --------------------------------------------------------------------------------
484 Summary of New Features:
485 --------------------------------------------------------------------------------
486 1. Dynamic Load balancing:
487    Chare migration is supported in the new release. Migration-based dynamic 
488    load balancing framework with various load balancing strategies library has 
489    been added.
490
491 2. Chare Array
492    Charm++ array is supported. You can now create an array of Chare objects
493    and use array index to refer the Charm++ array elements. A reduction
494    library on top of Chare array has been implemented and included.
495
496 3. Projections
497    Projections, a Java application for Charm++ program performance analysis and 
498    visualization, has been included and distributed in the new release. Two
499    trace modes are available: trace-projections and trace-summary. Trace-summary
500    is a light-weight trace library compared to trace-projections.
501
502 4. AMPI
503    AMPI is a load-balancing based library for porting legacy MPI applications 
504    to Charm++. With few changes in the original MPI code to AMPI, the new
505    legacy MPI application on Charm++ will gain from Charm++'s adptive 
506    load balancing ability.
507
508 5. Easier invocation
509    "Charmrun" is now available on all platforms, with a uniform command line 
510    syntax. You can forget the difference between net-* versions and MPI versions,
511    and run charm++ application with this same charmrun command syntax. 
512    ++local option is added in charmrun for net-* version, it provides
513    simple local use of Charm and no longer require the ability to 
514    "rsh localhost" or a nodelist file in order to run charm only on the local
515    machine. This is especially attractive when you run Charm++ on Windows.
516
517 6. New libraries:
518    Many new libraries have been added in this release. They include:
519    1) master-slave library: for writing manager-worker paradigm programs.
520    2) receiver library: provide asynchronous communication mode for chare array.
521    3) f90charm:  provides Fortran90 bindings for Charm++ Array.
522    4) BlueGene:  a Charm++/Converse emulator for IBM proposed Blue Gene.
523
524 --------------------------------------------------------------------------------
525 Summary of Changes:
526 --------------------------------------------------------------------------------
527 1. message declaration syntax in .ci file:
528    The message declaration syntax for packed/varsize messages has been changed.
529    The packed/varsize keywords are eliminated, and you can specify the actual
530    actual varsize arrays in the interface file and have the translator generate
531    alloc, pack and unpack.
532
533
534 Here is the detailed list of Changes:
535
536 --------------------------------------------------------------------------------
537 Major Features:
538 --------------------------------------------------------------------------------
539
540 10/06/1999      rbrunner        Added migration-based dynamic load balancing
541                                 framework.
542 11/15/1999      olawlor         Added reduction support foe Charm++ arrays
543 02/06/2000      milind          Added AMPI, an implementation of MPI with
544                                 dynamic load balancing
545 02/18/2000      paranjpy        New platforms supported: net-win32, and                                         net-win32-smp
546 04/04/2000      olawlor         Added arbitrarily indexed Charm++ arrays.
547                                 Also, added translator support for new arrays.
548 04/15/2000      olawlor         Added "puppers" for packing and unpacking 
549                                 objects.
550 06/14/2000      milind          Added the threaded FEM framework.
551
552 --------------------------------------------------------------------------------
553 Minor Features:
554 --------------------------------------------------------------------------------
555
556 10/09/1999      rbrunner        Added packlib, a library for C and C++ to 
557                                 pack-unpack data to/from Charm++ messages.
558 10/13/1999      gzheng          New LB strategy: RefineLB
559 10/13/1999      paranjpy        New LB Strategy: Heap
560 10/14/1999      milind          New LB Strategy: Metis
561 10/19/1999      olawlor         New test program for testing LB strategies.
562 10/21/1999      gzheng          New trace mode: trace-summary
563 10/28/1999      milind          New supported platform: net-sol-x86
564 10/29/1999      milind          Added runtime checks for ChareID assignment.
565 11/10/1999      rbrunner        Added Neighborhood base strategy for LB 
566                                 framework.
567 11/15/1999      olawlor         conv-host now reads in a startup file 
568                                 ~/.conv-hostrc
569 11/15/1999      olawlor         New test program for testing array reductions.
570 11/16/1999      rbrunner        Added processor-speed checking functions to
571                                 LB framework
572 11/19/1999      milind          Mapped SIGUSR to a Ccd condtion handler
573 11/22/1999      rbrunner        New LB strategy: WSLB
574 11/29/1999      ruiliu          Modified Metis LB strategy to deal with 
575                                 different processor speeds
576 12/16/1999      rbrunner        New LB strategy: GreedyRef
577 12/16/1999      rbrunner        New LB strategy: RandRef
578 12/21/1999      skumar2         New LB strategy: CommLB
579 01/03/2000      rbrunner        New LB strategy: RecBisectBfLB
580 01/08/2000      skumar2         New LB strategy: Comm1LB, with varying processor
581                                 speeds
582 01/18/2000      milind          Modified SM library syntax, and added a test
583                                 program for SM.
584 01/19/2000      gzheng          Added irecv, a library to simplify conversion
585                                 of message-passing programs to Charm++
586 02/20/2000      olawlor         Added preliminary broadcast support to Charm++
587                                 arrays.
588 02/23/2000      paranjpy        Added converse-level quiescence detection
589 03/02/2000      milind          Added ++server-port option to pre-specify
590                                 CCS port.
591 03/10/2000      wilmarth        Random seed-based load balancer now uses
592                                 bit-vector for active PEs.
593 03/21/2000      gzheng          Added support for marking user-defined events 
594                                 in trace-summary.
595 03/28/2000      wilmarth        Added CMK_TRUECRASH. Very helpful for
596                                 post-mortem debugging of Charm++ programs on
597                                 net-* versions.
598 03/31/2000      jdesouza        Added Fortran90 support to the Charm++ 
599                                 interface translator.
600 03/09/2000      milind          Added support for -LANG and -rpath options 
601                                 in charmc for Origin2000.
602 04/28/2000      milind          Added prioritized converse threads.
603 05/01/2000      milind          Added test programs for TeMPO, AMPI and irecv.
604 05/04/2000      milind          New supported platform: mpi-sp.
605 05/04/2000      gzheng          Added irecv pingpong program.
606 05/17/2000      olawlor         Each chare, group and array element now has to
607                                 have migration constructor.
608 05/24/2000      milind          Added Jacobi3D programs for irecv and AMPI both.
609 05/24/2000      milind          Made migratable an optional attribute of 
610                                 chares, groups, and nodegroups.  
611                                 Arrays are by default migratable.
612 05/29/2000      paranjpy        Added pup methods to arrays, reductions etc 
613                                 internal objects.
614 06/13/2000      milind          Made CtvInitialize idempotent.  That is, it 
615                                 can be called by any number of threads now, 
616                                 only the first one will actually do 
617                                 CtvInitialize.
618 06/20/2000      milind          Added a simple test program for the FEM 
619                                 framework.
620 07/06/2000      milind          Imported Metis 4.0 sources in the CVS tree. 
621                                 Also added code to make metis libraries and 
622                                 executables to Makefile.
623 07/07/2000      milind          Added more meaningfull error messages using 
624                                 perror in addition to a cryptic error codes in
625                                 net-* versions.
626 07/10/2000      milind          fem and femf are now recognized as "languages" 
627                                 by charmc.
628 07/10/2000      saboo           Added the derived datatypes library.
629 07/13/2000      milind          Added +idle_timeout functionality. It takes a 
630                                 commandline parameter denoting milliseconds of 
631                                 maximum consecutive idle time allowed per 
632                                 processor.
633 07/14/2000      milind          Added group multicast. Added 
634                                 CkSendMsgBranchMulti, CldEnqueueMulti, and 
635                                 translator changes to support it.
636 07/14/2000      milind          SUPER_INSTALL now takes "-*" arguments prior 
637                                 to the target, that will be passed to make as 
638                                 "makeflags". This makes it easy to suppress 
639                                 make's output of commands etc (with the -s 
640                                 flag). As a result of this, several Makefiles 
641                                 have been massaged.
642 07/18/2000      milind          Added support for using "dbx" on suns as 
643                                 debugger.
644 07/19/2000      milind          Added ability to tracemode projections which 
645                                 produces binary trace files. Use flag 
646                                 +binary-trace on the command line.
647 07/26/2000      milind          Separated AMPI from TeMPO.
648 07/28/2000      milind          Added test programs to test reduce, alltoall 
649                                 and allreduce functionality of AMPI.
650 08/02/2000      milind          Added an option to let the user specify which 
651                                 "xterm" to use.  For example, on some systems 
652                                 (CDE), only dtterm is installed.  So, by 
653                                 putting ++xterm dtterm on the conv-host 
654                                 commandline, one can use dtterm when ++in-xterm
655                                 option is specified on conv-host commandline.
656 08/14/2000      milind          FEM Framework: Added capabilities to handle 
657                                 esoteric meshes to standalone offline programs.
658                                 Makefile now produces gmap and fgmap programs, 
659                                 which are used for this purpose.  They convert 
660                                 the mesh to a graph before partitioning it 
661                                 using Metis.
662 08/24/2000      milind          Added the 2D crack propagation program as a 
663                                 test program for FEM framework.
664 08/25/2000      milind          Initial implementation of isomalloc-based 
665                                 threads.  This implementation uses a fixed 
666                                 stack size for all threads (can be set at 
667                                 runtime.)
668 08/26/2000      milind          Added a macro CtvAccessOther that lets you 
669                                 get/set a Ctv variable of any thread.  It 
670                                 should be invoked as CtvAccessOther(thread,
671                                 varname); Added CthGetData function to each of 
672                                 the threads implementation.  This function is 
673                                 used in the CtvAccessOther macro.
674 08/27/2000      milind          FEM Framework: Separated mesh to graph 
675                                 conversion capability into a separate program.
676                                 This way, the generated graph can be partitioned
677                                 repeatedly.
678 09/04/2000      milind          Added the class static readonly variables to 
679                                 ci file syntax.
680 09/05/2000      milind          FEM Framework: A very fast O(n) algorithm for 
681                                 mesh2graph , uses more memory, but the tradeoff
682                                 was worth it. Coded by Karthik Mahesh, minor 
683                                 optimizations by Milind.
684 09/05/2000      milind          Added a barebones charm kernel scheduling 
685                                 overhead measurement program.
686 09/15/2000      milind          Added pup support for AMPI and FEM framework.
687 09/20/2000      olawlor         Added capability to have an array of base type 
688                                 where individual element could be of derived 
689                                 types.
690 10/03/2000      gzheng          New supported platform: net-linux-axp
691 10/05/2000      skumar2         Added program littleMD to the test suite.
692 10/07/2000      skumar2         New job scheduler (Faucets projects).
693 10/15/2000      milind          Improved support for Fortran90 in charmc.
694 11/04/2000      jdesouza        Made the Faucets scheduler multi-threaded.
695 11/05/2000      olawlor         FEM Framework: supports multiple element types,
696                                 mesh re-assembly, etc.
697 11/15/2000      gzheng          New platform support: net-cygwin
698 11/18/2000      gzheng          conv-host no longer needs /bin/csh to start 
699                                 remote program.  set 
700                                 CMK_CONV_HOST_CSH_UNAVAILABLE to 1 to use 
701                                 /bin/sh instead.
702 11/25/2000      milind          Finished experimental implementation of 
703                                 converse-threads based on co-operative pthreads.
704 11/25/2000      milind          Added a benchmark suite of all pingpongs in
705                                 Charm++.
706 11/28/2000      milind          Removed deletion of _idx at the end of every 
707                                 send or doneInserting call.  Instead now it is 
708                                 in the destructor of the proxy. This allows us 
709                                 to cache proxies, when proxy creation becomes 
710                                 a bottleneck.
711 11/28/2000      olawlor         Added "seek blocks" to puppers.  This should 
712                                 allow out-of-order pup'ing without the ugliness
713                                 of getBuf; and in a way that works with all 
714                                 PUP::ers.
715 11/29/2000      olawlor         Simplified and regularized command-line-argument
716                                 handling.
717 11/29/2000      milind          AMPI: Added multiple-communicators capability.
718 12/05/2000      gzheng          Now /bin/sh is default shell to fork node 
719                                 program on remote machines.
720 12/13/2000      olawlor         Added charmrun wrapper for poe on mpi-sp.
721 12/14/2000      milind          Added bluegene emulator sources and test 
722                                 programs.  Added "bluegene" as a language known
723                                 to charmc.  Makefile now has a target called 
724                                 bluegene.  Added preliminary bluegene 
725                                 documentation.  (copied from Arun's webpage.)
726 12/15/2000      gzheng          f90charm addition to Makefile and charmc. Also,
727                                 added fixed size arrays support to f90charm. A 
728                                 test program f90charm/hello is checked in.
729 12/17/2000      milind          Added rtest test program. Contributed by jim to
730                                 test Converse message transmission.
731 12/20/2000      olawlor         Added charmconfig script. Enables automatic 
732                                 determination of C++ compiler properties, 
733                                 replacing the verbose and error-prone 
734                                 conv-mach.h entries for CMK_BOOL, 
735                                 CMK_STL_USE_DOT_H, CMK_CPP_CAST_OK, ...
736 12/20/2000      olawlor         Charm++ Arrays optimizations: Key and object 
737                                 now variable-length fields, instead of pointers.
738                                 This extra flexibility lets us save many 
739                                 dynamic allocations in the array framework.
740 12/20/2000      olawlor         Added PUP::able support-- dynamic type 
741                                 identification, allocation, and deletion.  
742                                 Allows you to write:   p(objPtr); and 
743                                 objPointer will be properly identified, 
744                                 allocated, packed, and deallocated (depending 
745                                 on the PUP::er).  Requires you to register any 
746                                 such classes with DECLARE_PUPable and 
747                                 DEFINE_PUPable.
748 12/20/2000      olawlor         Arrays optimizations: Made CkArrayIndex 
749                                 fixed-size.  This significantly improves 
750                                 messaging speed (7 us instead of 10 us 
751                                 roundtrip).  Move spring cleaning check into a 
752                                 CcdCallFnAfter, which gains more speed (down to
753                                 4 us roundtrip).
754 12/20/2000      olawlor         More optimizations: Minor speed tweaks-- 
755                                 conv-ccs.c uses hashtable for handler lookup; 
756                                 conv-conds skips timer test until needed; 
757                                 convcore.c scheduler loop optmizations (no 
758                                 superfluous EndIdle calls); threads.c 
759                                 CMK_OPTIMIZE-> no mprotect.
760 12/20/2000      olawlor         More Optimizations: Minor speed tweaks-- ck.C 
761                                 groups cldEnqueue skip; init.h defines 
762                                 CkLocalBranch inline; and supporting changes.
763 12/22/2000      gzheng          IA64 support for Converse user level threads.
764 01/02/2001      olawlor         CCS: Minor update-- enabled CcsProbe, cleaned 
765                                 up superflous debug messages in server, added 
766                                 Java interface (originally written for 
767                                 AppSpecter).
768 01/09/2001      gzheng          charmconfig converted to autoconf style, need 
769                                 to change configure.in and conv-autoconfig.h.in,
770                                 and run autoconf to get configure and copy to 
771                                 charmconfig.  added fortran subroutine name 
772                                 test and get libpthread.a
773 01/10/2001      milind          Added telnet method of getting libpthread.a 
774                                 from charm webserver.
775 01/11/2001      olawlor         Moved projections files here from 
776                                 CVSROOT/projections-java.  Added fast Java 
777                                 versions of the .log file input routines in 
778                                 LogReader, LogLoader, LogAnalyzer, and 
779                                 UsageCalc.  Added "U.java" user interface 
780                                 utility file, allowing times to be input in 
781                                 seconds, milliseconds, or microseconds, 
782                                 instead of just microseconds.
783 01/15/2001      gzheng          add +trace-root to specify the directory to 
784                                 put log files in. this is need in Scyld cluster
785                                 where there is no NFS mounting and no i/o 
786                                 access to home directory sharing on nodes.
787 01/15/2001      milind          Made AMPI into a f90 module instead of 
788                                 'ampif.h' inclusion.  AMPI f90 bindings are 
789                                 now more inclusive.  Fixed argc,argv handling 
790                                 bugs in ArgsInfo message.  Fixed a bug in pup 
791                                 that caused thread not to be sized, but was 
792                                 packed nevertheless. Moved irecv to waitall 
793                                 instead of at in ampi_start.  Made 
794                                 AMPI_COMM_WORLD to be 0, because it clashed 
795                                 with wildcard(-1).  AMPI_COMM_UNIVERSE is now 
796                                 handled properly in the AMPI module.  
797                                 C/C++ data members are NOT visible to 
798                                 Fortran 90.
799 01/18/2001      gzheng          New supported platform: net-linux-scyld
800 01/20/2001      olawlor         Moved array index field from CMessage_* to the 
801                                 Ck envelope itself.  This is the right thing 
802                                 to do, because any message may be sent to/from 
803                                 an array element.  To reduce the wasted space 
804                                 in a message, a union is used to overlay the 
805                                 fields for the various possible message types.
806 01/29/2001      olawlor         Freed charmrun on net-* version from using
807                                 remote shell to fork off processes. One can now
808                                 use a daemon provided in the distribution.
809 02/07/2001      olawlor         Added debugging support to puppers.
810 02/13/2000      gzheng          Added ++local option to charmrun to start node 
811                                 program locally without any daemon; fix the 
812                                 hang program if you type wrong pgm name in 
813                                 scyld version, and redirect all output to 
814                                 /dev/null, otherwise all node program can send 
815                                 its output to console in scyld. Also implemented                                ++local in net-win32 version.
816 02/26/2000      milind          Changed the varsize syntax. Now one can specify
817                                 actual varsize arrays in the interface file
818                                 and have the translator generate alloc, pack 
819                                 and unpack.
820
821 --------------------------------------------------------------------------------
822 Bug Fixes:
823 --------------------------------------------------------------------------------
824
825 10/29/1999      milind          Replaced jmemcpy by memcpy in net versions, as
826                                 it was causing a bit to flip (bug reported
827                                 by jim.)
828 10/29/1999      milind          Fixed multiline macros in all header files.
829 02/05/2000      milind          Fixed linking errors by getting the order of
830                                 libraries right from the charmc command-line.
831 02/18/2000      paranjpy        Fixed Charm++ initialization bug on SMPs.
832 02/21/2000      milind          Fixed a context-switching bug in mipspro version
833                                 of QuickThreads.
834 02/25/2000      milind          Charm++ interface translator was segfaulting
835                                 on interface file errors. Fixed that. Also,
836                                 added linenumbers to error messages.
837 03/02/2000      milind          Made CCS work on SMPs.
838 03/07/2000      milind          Made ConverseInit consistent with the manual on
839                                 Origin2000 version.
840 04/18/2000      milind          Fixed a bug in CkWaitFuture, which was caching 
841                                 a variable locally, while it was changed by 
842                                 another thread.
843 05/04/2000      paranjpy        Fixed argv deletion bug on net-win32-smp.
844 06/08/2000      milind          sp3 version: changed optimization flags, which 
845                                 where power2 processor-specific.
846 06/20/2000      milind          mpi-* versions: Fixed ConverseExit since it was
847                                 not obeying the following statement in the MPI 
848                                 standard: The user must ensure that all pending
849                                 communications involving a process completes 
850                                 before the process calls MPI_FINALIZE.
851 07/05/2000      milind          Fixed a nasty bug in charmc in the -cp option. 
852                                 It used to append the name provided to -o flag 
853                                 to the directory provided to the -cp flag.  
854                                 Thus, -o ../pgm -cp ../bin options meant that 
855                                 the pgm would be copied to ../bin/.., which is 
856                                 not the expected behavior. This fix correctly 
857                                 copies pgm to ../bin.
858 07/07/2000      milind          Removed variable arg_myhome, as it was not 
859                                 being used anywhere, and also, setting it was 
860                                 causing problems of env var HOME was not set.
861 07/27/2000      milind          thishandle for the arrayelement was not being 
862                                 correctly set.  Bug was reported by Neelam.
863 08/26/2000      milind          Origin2000: Changed the page alignment to 
864                                 reflect the mmap alignment.  The mmap man page 
865                                 specifically states that it is not the same as 
866                                 page size.
867 09/02/2000      milind          Fixed a bug in code generated for threaded 
868                                 (void) entry methods of array elements. The 
869                                 dummy message that is passed to that method in 
870                                 a thread has to be deleted before calling the 
871                                 object method, because upon object method's 
872                                 return, the thread might have migrated.
873 09/03/2000      olawlor         Minor fix-fixes: 1.) Change to LBObjid hash 
874                                 function would fail for >4-int object indices.
875                                 Replaced with proper function, which also 
876                                 preserves the 1-int case.  2.) Array element 
877                                 sends must go via the message queue to prevent 
878                                 stack build-up for deep single-processor call 
879                                 chains. These might happen, e.g., in a driver 
880                                 element calling itself for the main time loop.
881                                 Messages are now properly noted as sent, then 
882                                 wait through the queue for delivery.  This 
883                                 entailed minor reorganization of the message 
884                                 delivery subsystem.
885 09/21/2000      olawlor         Tiny SMP thread fix-- registrations of a 
886                                 thread-private variable now reserve space on 
887                                 calls after the first.  This wastes space for 
888                                 multiple CthInitialize's-- it's a quick hack to
889                                 get threads working again on SMP versions.
890 10/16/2000      olawlor         A few CCS fixes:   -Added split-phase reply 
891                                 (delay reply indefinitely)  -Cleaned up error
892                                 handling -Pass user data as "void *" instead of
893                                 "char *"
894 11/03/2000      wilmarth        Removed 0 size array allocation in Charm++ 
895                                 quiescence detection.
896 11/20/2000      gzheng          Rewrote part of Fiber thread, including a bug 
897                                 fix for a the non thread-safe function, and a 
898                                 different fiber free strategy.
899 11/29/2000      gzheng          The LB init procedure tried to allocate 
900                                 65536*160 as initial size, which is 10M memory 
901                                 for communication table, which is too big. 
902                                 Cut it down to roughly 1M, and it can expand 
903                                 in later code.
904 12/05/2000      gzheng          In many cases, conv-host exits without print 
905                                 out the error message from remote shell. try 
906                                 to fix it by calling sync to flush the pipe 
907                                 before exit 1.
908 12/10/2000      milind          net-linux: Made static linking the default 
909                                 option because dynamic linking runtime causes 
910                                 isomalloc threads to crash.
911 12/18/2000      milind          Increased portability of isomalloc threads by 
912                                 removing dependence on alloca.
913 12/28/2000      milind          Fixed ctrl-getone abort bug on SMP.
914 12/28/2000      milind          Made _groupTable a pointer on which a 
915                                 constructor is explicitly called.  Since it 
916                                 was a Cpv variable, its constructor was not 
917                                 called by default in case of an SMP version.
918 12/29/2000      olawlor         Prevent infinite copy constructor recursion on 
919                                 Origin2000.
920 01/10/2001      olawlor         Added "explicit" keyword to remove ambiguity 
921                                 for KCC, which was confused by the private 
922                                 PUP::er(int) "cast" constructor and the operator
923                                 |(PUP::er &p,T &t) into rejecting all operator|
924                                 (int,int) as ambiguous.
925 2001/01/17      gzheng          fix the charmconfig bug on paragon-red: the 
926                                 failure testing of fortran won't stop the 
927                                 compilation.
928 01/20/2001      olawlor         Arrays reduction:  Fixed bug-- reduction may end
929                                 because all contributors migrate away. 
930 01/29/2001      olawlor         Fix heap-corrupting bug-- call ->init() on 
931                                 nodeGroupTable, which sets the "pending" 
932                                 message queue to NULL.  This prevents a nasty 
933                                 delete-unitialized-data bug later on.  Also 
934                                 delayed queue creation until messages actually 
935                                 arrive.
936
937 --------------------------------------------------------------------------------
938 Documentation Changes:
939 --------------------------------------------------------------------------------
940
941 01/31/2000      milind          Installation manual: Fixed bugs pointed out by
942                                 quantum TA
943 02/28/2000      wilmarth        Added a new look Charm++ manual.
944 06/20/2000      milind          Added pdflatex support to generate PDF versions
945                                 of manuals from LaTeX sources.
946 12/05/2000      milind          Added Orion's FEM manual. Converted from HTML.
947 12/10/2000      milind          Added pplmanual.sty for all manuals.
948 12/17/2000      milind          Added master-slave library documentation to
949                                 convext manual.
950 12/21/2000      saboo           Added DDT documentation.
951 01/02/2001      olawlor         Updated for new CCS version.
952
953 --------------------------------------------------------------------------------
954 Other Changes:
955 --------------------------------------------------------------------------------
956
957 10/24/1999      olawlor         charmc is changed to Bourne shell script 
958                                 instead of csh. All conv-mach.csh are
959                                 replaced by conv-mach.sh.
960 10/25/1999      olawlor         SUPER_INSTALL is converted to use bourne shell.
961 10/28/1999      milind          All Makefiles now take OPTS commandline
962                                 arguments.
963 01/16/2000      olawlor         Simplified Charm++ interface translator.
964 02/23/2000      ruiliu          Changed rand() calls from all over the codes
965                                 to the new Converse random number generator.
966 02/26/2000      milind          Simplified the converse scheduler loop by 
967                                 combining the maxmsgs and poll modes.
968 08/31/2000      milind          Imported system documentation into the CVS tree.
969                                 Also added super_install target for docs with 
970                                 necessary Makefile modifications.
971 09/08/2000      olawlor         Made soft links use relative pathnames instead 
972                                 of absolute.  This lets you move a charm++ 
973                                 installation without having to recompile 
974                                 anything.
975 09/11/2000      olawlor         Grouped commonly needed code in the new util
976                                 directory. Also, added pup_c a C wrapper for
977                                 puppers.
978 09/11/2000      olawlor         Slightly reorganized header structure.  Now no 
979                                 headers should need to be listed twice (once in
980                                 ALLHEADERS, again in CKHEADERS).  Now headers 
981                                 are soft-linked instead of copied.  This makes 
982                                 development much easier.  Added support for the
983                                 new Common/util directory.
984 09/21/2000      olawlor         Major reorganization of net-* codes. Now all 
985                                 the TCP socket routines are in separate files.
986                                 Also combined windoes NT code with unix codes.
987 09/21/2000      olawlor         Major rewrite of CCS-- underlying protocol is 
988                                 now binary (send/recv binary data everywhere); 
989                                 conv-host forwards requests to nodes; and 
990                                 source has been significantly re-arranged.  
991                                 (especially if NODE_0_IS_CONVHOST).
992 11/22/2000      milind          Removed IDL translator from distribution.
993 12/01/2000      olawlor         Renamed conv-host charmrun; added test for 
994                                 script conv-host. Also added charmrun for most 
995                                 other machines.
996 12/17/2000      milind          Moved List related data structures into 
997                                 cklists.h in util. Removed most of the redundant
998                                 list implementations.
999 12/20/2000      gzheng          SUPER_INSTALL: format the output of list of 
1000                                 versions and make the help page fit into one 
1001                                 page of xterm.
1002 12/24/2000      milind          Added test-{charm,converse,ampi,fem} targets to 
1003                                 super_install.
1004 12/28/2000      milind          net-sol-smp now uses pthreads.
1005 01/29/2001      olawlor         Merged windowsNT and unix build procedures by
1006                                 basing the Windows build on cygwin. Added 
1007                                 scripts to deal with unix and windows 
1008                                 differences.