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