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