Dear Chapel community --
Cray Inc. and the Chapel open-source community are pleased to announce
the release of version 1.12.0 of Chapel. This release's highlights
include:
* A significant expansion to our online documentation. As part of
this effort, we've reflected the major READMEs from the release
itself onto the Chapel website for the first time. We've also
expanded the web-based library documentation to include many
built-in types and functions as well as standard distributions and
layouts. You can find all of this documentation online at:
http://chapel.cray.com/docs/latest/
* New modules have been added to the standard library supporting
inter-task barrier synchronization ('Barrier'), dynamic subprocess
spawning ('Spawn'), and a Chapel interface to LAPACK ('LAPACK').
Further details about these modules can be found in the online
documentation for standard modules:
http://chapel.cray.com/docs/latest/modules/modules.html
* We've added a new tool, 'chplvis', developed by Phil Nelson of
Western Washington University. 'chplvis' is useful for visualizing
inter-locale communication and intra-locale tasking within the
execution of a Chapel program. For online documentation including
screenshots, refer to:
http://chapel.cray.com/docs/latest/tools/chplvis/index.html
* This release includes a number of locality-oriented performance
optimizations, focusing both on reducing inter-locale overheads and
improving first-touch NUMA effects within a locale. As a result of
these changes, the Chapel version of HPCC Stream-EP in the release
(examples/benchmarks/hpcc/stream-ep.chpl) has been significantly
simplified while resulting in performance that matches or beats that
of previous releases, typically competing with hand-generated
MPI+OpenMP versions.
* A new iterator, 'vectorizeOnly()' has been added to specify parallel
loops for which no dynamic tasking should be used, only vector-level
parallelism (when possible):
http://chapel.cray.com/docs/latest/modules/internal/ChapelIteratorSupport.html
* For users of the Chapel module on Cray systems, we've switched the
default tasking layer from 'muxed' to 'qthreads' which should result
in a performance boost for most codes.
* The language and compiler have been extended to support methods and
iterators on types (as opposed to variables of a given type).
Chapel also now supports the declaration of 'private' (or 'public')
module-level variables, functions, and sub-modules for improved
namespace protection. In addition, where a domain specifier in a
formal array's type previously indicated an automatic reindexing of
the actual array argument, it is now treated as a constraint on the
actual argument's domain. See the language specification for
further details on these features.
* Based on feedback from users, internal errors now result in a
friendlier (and more apologetic) error message including a best
guess as to the source line where the error occurred and a pointer
to how a bug can be filed against the issue.
* The "Memory Consistency Model" chapter of the language specification
has been dramatically revised to better describe our vision of
Chapel's memory consistency model. In addition, the specification
has been significantly trimmed down by moving documentation of
standard libraries and domain maps into the online documentation,
as noted above.
* We've added a "Chapel Improvement Proposal" (CHIP) framework for
proposing changes to the language or implementation. For more
details, refer to:
https://github.com/chapel-lang/chapel/blob/master/doc/chips/1.rst
* This release contains the largest number of bug fixes in a Chapel
release since version 1.1. Notable examples include:
- improvements to invoking standalone iterators for 'forall' loops
- fixing the generality of the reduce intents introduced in version 1.11
- fixing long-standing scope resolution shadowing errors
- and several other bugs submitted by users since version 1.11 was released
For a complete list, refer to "Bug Fixes" below.
* Numerous other documentation, portability, performance, and correctness
issues.
...and much more! To see a more complete enumeration of changes in
version 1.12.0, refer to the list at the end of this message, or to
$CHPL_HOME/CHANGES within the release itself.
Contributors to this release include:
Ben Albrecht, Cray Inc.
Ian Bertolacci, Cray Inc./Colorado State University
Kyle Brady, Cray Inc.
Brad Chamberlain, Cray Inc.
Sung-Eun Choi, Cray Inc.
Lydia Duncan, Cray Inc.
Michael Ferguson, Cray Inc.
Ben Harshbarger, Cray Inc.
Tom Hildebrandt, Cray Inc.
David Iten, Cray Inc.
Vassily Litvinov, Cray Inc.
Tom MacDonald, Cray Inc.
Cory McCartan, Cray Inc.
Damian McGuckin, Pacific Engineering Systems International
Phil Nelson, Western Washington University/Cray Inc.
Michael Noakes, Cray Inc.
Konstantina Panagiotopoulou, individual contributor
Elliot Ronaghan, Cray Inc.
Greg Titus, Cray Inc.
Thomas Van Doren, Cray Inc.
To download and install the release, see:
http://chapel.cray.com/download.html
Our development repository is also hosted at GitHub, making it the
best place to track or contribute to ongoing Chapel development:
https://github.com/chapel-lang/chapel
Whether you're a Facebook user, or would simply enjoy stalking us,
check our project Facebook page for a steady stream of informal posts
about the project and language:
https://www.facebook.com/ChapelLanguage
Chapel mailing lists devoted to users, developers, educators, and
announcements like this one continue to be hosted from our SourceForge
project page (which also hosts a mirror of the 1.12.0 release):
http://sourceforge.net/p/chapel/mailman/
Our main project page continues to be hosted at:
http://chapel.cray.com
and it remains the best place to find Chapel-related information such
as papers, presentations, blog posts, tutorials, news items,
collaborations, job listings and the like.
As always, we're interested in your feedback on how we can make the Chapel
language and implementation more useful to you.
On behalf of the Chapel Development Team,
-Brad Chamberlain
=======================================
Release Changes List for version 1.12.0
=======================================
Fifteenth public release of Chapel, October 1, 2015
Highlights
----------
* significantly expanded the coverage of our online documentation
(see http://chapel.cray.com/docs/1.12/ and "Documentation" below)
* added new 'Barrier', 'Spawn', and 'LAPACK' modules to the standard set
(see "Standard Library/Modules" section below)
* added chplvis: a new tool for visualizing Chapel communication and concurrency
(see http://chapel.cray.com/docs/1.12/tools/chplvis/index.html)
* added a new chapter describing Chapel's memory consistency model in detail
(see 'Memory Consistency Model' in the language spec)
* added a 'vectorizeOnly()' iterator that vectorizes without task creation
(http://chapel.cray.com/docs/1.12/modules/internal/ChapelIteratorSupport.html)
* new performance optimizations, particularly intra- and inter-node locality
(see "Performance Improvements" section below)
* removed the 'local' block from stream-ep based on the above optimizations
(see examples/benchmarks/hpcc/stream-ep.chpl)
* changed the default tasking layer on 'cray-x*' to 'qthreads' for performance
* added support for type methods and iterators
(see 'Classes::Class Method Calls::The Method Receiver and the this
Argument')
* added support for public/private module-level variables, functions, modules)
(see 'Modules:Access of Module Contents::Visibility of Module's Symbols')
* domains in formal array arguments are now interpreted as a constraint
(see 'Arrays::Array Arguments to Functions' in the language spec)
* significantly revamped and improved correctness and performance testing system
* improved how internal error messages are displayed to users
* added Chapel Improvement Proposals (CHIPs) framework for proposing changes
(see https://github.com/chapel-lang/chapel/blob/master/doc/chips/1.rst)
* made more bug fixes than any release since version 1.1
(see "Bug Fixes" section below)
* addressed portability issues for a number of platforms and compilers
Process Improvements
--------------------
* added Chapel Improvement Proposals (CHIPs) framework for proposed changes
(see https://github.com/chapel-lang/chapel/blob/master/doc/chips/1.rst)
Environment/Configuration Changes
---------------------------------
* 'printchplenv' now indicates which settings come from environment variables
* made the quickstart scripts turn CHPL_LLVM off by default
* removed dependencies on 'bc' and 'patch'
Tool Changes
------------
* added chplvis: a new tool for visualizing Chapel communication and concurrency
(see http://chapel.cray.com/docs/1.12/tools/chplvis/index.html)
* chpldoc improvements:
- improved handling of enum, real, imag, and complex initializers
- 'chpldoc' now generates values for enum symbols
- automatically skip documentation of 'private' symbols
- squashed generation of 'inline' in output
- added support for --print-commands with chpldoc
* chpl-ipe:
- added a quit() primitive for clean exits from the environment
Syntactic/Naming Changes
------------------------
* changed 'use' to 'require' for header files and external libraries
(see http://chapel.cray.com/docs/1.12/technotes/extern.html)
* replaced the standalone format() routine, with string.format()
(http://chapel.cray.com/docs/1.12/modules/standard/IO.html#IO.string.format)
* renamed memory diagnostics capabilities for clarity
(see http://chapel.cray.com/docs/1.12/modules/standard/Memory.html)
* changed the '##.##' writef() pattern so that it requires '%{...}' around it
(see http://chapel.cray.com/docs/1.12/modules/standard/IO.html#specifiers)
* added support for form-feed characters ('\f') as whitespace
(see 'Lexical Structure::White Space' in the language specification)
* changed the term 'blank intent' to 'default intent'
(see 'Functions::Argument Intents::Abstract Intents::The Default Intent')
Semantic Changes / Changes to Chapel Language
---------------------------------------------
* domains in formal array arguments are now interpreted as a constraint
(see 'Arrays::Array Arguments to Functions' in the language spec)
* Chapel no longer keeps referenced variables alive past their lexical scope
* c_strings are no longer made into strings when passed to generic extern args
* 'select' statements now only evaluate their argument expression once
New Features
------------
* added a 'vectorizeOnly()' iterator that vectorizes without using multitasking
(http://chapel.cray.com/docs/1.12/modules/internal/ChapelIteratorSupport.html)
* added support for type methods and iterators
(see 'Classes::Class Method Calls::The Method Receiver and the this
Argument')
* added support for public/private module-level variables, functions, modules)
(see 'Modules:Access of Module Contents::Visibility of Module's Symbols')
* added support for methods on enumerated types
(e.g., 'enum color {red};' permits 'proc color.foo() { ... }
color.red.foo();')
* added support for hexadecimal floating point literals
(see 'Lexical Structure::Tokens::Literals' in the language specification)
* added the ability to rename extern records for use within Chapel
(see 'Interoperation::...::Shared Types::Referring to External C Structs')
* added support for -lchplmalloc for compilers supporting weak symbols
(see http://chapel.cray.com/docs/1.12/technotes/allocators.html))
* added the ability to use 'continue' statements in 'param' for-loops
* added support for == and != operators on domain maps
Standard Library/Modules
------------------------
* added a new 'Barrier' module defining a simple collective barrier capability
(see http://chapel.cray.com/docs/1.12/modules/standard/Barrier.html)
* added a new 'Spawn' module for creating new subprocesses
(see http://chapel.cray.com/docs/1.12/modules/standard/Spawn.html)
* added a new 'LAPACK' module that provides an interface to LAPACK
(see http://chapel.cray.com/docs/1.12/modules/standard/LAPACK.html)
* added support for common mathematical constants to 'Math.chpl'
(see http://chapel.cray.com/docs/1.12/modules/standard/Math.html#Math.e)
* replaced standalone format() routine with string.format() in 'IO'
(http://chapel.cray.com/docs/1.12/modules/standard/IO.html#IO.string.format)
* unified string.format() format strings with writef()
(http://chapel.cray.com/docs/1.12/modules/standard/IO.html#formatted-i-o)
* added a getFileSize() routine to the 'FileSystem' module
(see http://chapel.cray.com/docs/1.12/modules/standard/FileSystem.html)
* merged the contents of the 'UtilMath' module into 'Math'
(see http://chapel.cray.com/docs/1.12/modules/standard/Math.html)
* improved the 'Memory' module:
- renamed memory diagnostics capabilities for clarity
- added a --memLeaksByDesc flag to track only certain types of leaks
- stopped tracking memory allocations not related to Chapel code by default
(see http://chapel.cray.com/docs/1.12/modules/standard/Memory.html)
* errorToString(ENOERR) now portably returns "No error" in 'Error' module
(see http://chapel.cray.com/docs/1.12/modules/standard/Error.html)
* applied the 'private' keyword to standard modules as appropriate/possible
Performance Improvements
------------------------
* parallelized large numeric array initialization for better first-touch
* improved analysis and optimization of variables that are provably local
* fixed a bug in which non-blocking 'on's were counted as local running tasks
* improved task counting when one task is waiting for others to complete
* optimized task counts to use processor atomics when profitable
* made 'cray-x*' systems default to 'qthreads' over 'muxed'
* moved polling threads to the last available CPU to avoid contention
* made array allocation use calloc(), not malloc() for better first-touch
* enabled more optimizations and streamlined code when using the LLVM back-end
Memory Improvements
-------------------
* stopped leaking sync and single variables on all platforms except Cygwin
* eliminated leaks for heap allocated variables used in cobegin/coforall
Documentation
-------------
* mirrored many of the READMEs from the release onto our online documentation
(see http://chapel.cray.com/docs/1.12/usingchapel/ and .../1.12/technotes)
* added online documentation for built-in types, functions, methods
(see http://chapel.cray.com/docs/1.12/modules/builtins.html)
* added online documentation for standard domain maps (layouts and
distributions)
(http://chapel.cray.com/docs/1.12/modules/distributions.html and
layouts.html)
* added a copy of the online html documentation to the release itself
(see $CHPL_HOME/doc/html)
* converted most READMEs to ReStructured Text (.rst) or markdown (.md)
(for example, see $CHPL_HOME/doc/* and $CHPL_HOME/doc/technotes/*)
* refreshed the contents of most former READMEs as part of this effort
* language specification updates:
- added a new chapter on Chapel's memory consistency model
- added documentation of the I/O operator, <~>
- improved the specification's page numbering and format
- retired standard library chapters from the spec now that they're online
(see http://chapel.cray.com/spec/spec-0.98.pdf)
* standard module documentation improvements
- added a "Formatted I/O for C Programmers" table to the IO module
(see
http://chapel.cray.com/docs/1.12/modules/standard/IO.html#formatted-i-o)
- refreshed the documentation of other standard modules
* refreshed the contents of the C interoperability technical note
(see http://chapel.cray.com/docs/1.12/technotes/extern.html)
* retired README.format due to its documentation as part of a standard module
(http://chapel.cray.com/docs/1.12/modules/standard/IO.html#IO.string.format)
* removed Tilera-specific documentation due to lack of use and testing
Example Codes
-------------
* rewrote the 'stream-ep' example to remove the now unnecessary 'local' block
(see examples/benchmarks/hpcc/stream-ep.chpl)
* added a copy of Chapel code from learnXInYMinutes site to examples/primers
(see examples/primers/learnChapelInYMinutes.chpl)
* added a primer for the new 'chplvis' tool
(see examples/primers/chplvis/README)
* added a primer for the new LAPACK module
(see examples/primers/LAPACKlib.chpl)
* added a new examples/patterns directory for storing common code patterns
(see examples/patterns/README)
* added patterns/recordio.chpl to demonstrate reading tab-delimited records
(see examples/patterns/recordio.chpl)
* updated shootout/nbody.chpl to use 'ref's rather than nested procedures
(see examples/benchmarks/shootout/nbody.chpl)
* replaced uses of format() with writef() in SSCA2 benchmark
(see examples/benchmarks/ssca2/)
* made the fileIO primer more tolerant of floating point roundoff
(see examples/primers/fileIO.chpl)
* made the FFTW primer self-validating w.r.t. numerical differences
(see examples/primers/FFTWlib.chpl)
* removed 'param' from lulesh loops that probably don't want/need it
(see examples/benchmarks/lulesh/)
Compiler Flags (see 'man chpl' for details)
-------------------------------------------
* redefined --fast to no longer imply --no-ieee-float
* added --[no-]ieee-float support for CHPL_TARGET_COMPILER 'clang' and 'intel'
* made --ccflags arguments stack rather than override one another
* added support for --print-emitted-code-size for the LLVM back-end
Execution Flags
---------------
* added a --memLeaksByDesc flag to track only certain memory categories
* made --memLeaks[ByDesc] be governed by the --memTreshold flag
Error Message Improvements
--------------------------
* improved how internal error messages are displayed to users
* improved error messages for runaway comments
* improved source location provided by 'noinit' warnings
Bug Fixes
---------
* forall loops over a single array now correctly use the standalone iterator
* fixed bugs with applying reduce intents to forall loops over domains/arrays
* fixed bugs with scope resolution's choice of which symbol to resolve to
* fixed a bug in which overloads of '|' broke internal modules
* fixed a bug related to extern variables of types like c_ptr(c_int))
* fixed an internal error when a class calls its parent class's destructor
* fixed a bug in which large array copies could overflow runtime arguments
* fixed a bug in which calls of the form '<type>(x)' would cause internal errors
* fixed a bug in I/O when skipping whitespace encountered illegal characters
* fixed printing/reading of integers with '%{##.##}' format
* made readf() calls without error arguments halt on mismatches
* fixed a bug in which trailing whitespace was being consumed too aggressively
* made default rectangular arrays print in JSON as arrays-of-arrays
* fixed EOF-related bugs in Reader/Writer
* fixed a bug in which channel.read(style) was ignoring its style argument
* fixed a bug in which non-blocking 'on's were counted as local running tasks
* fixed a compiler exception caused by dividing by param '0'
* fixed a bug in the is*() FileSystem functions when given an invalid path/link
* improved chpldoc's handling of failure to create output and tmp directories
* added an error message for too-long compiler flags rather than truncating
* fixed a bug in which calls to malloc/free/etc in extern blocks caused errors
* fixed 'text file busy' errors in certain situations when invoking 'chpl'
* fixed a bug in which overloading was being permitted based on argument intents
* fixed a segfault in the glob() iterator when following 0..0 with 0 matches
* fixed a bug in which bad source location info was passed to string routines
* preserved source location information for cobegins
* fixed a bug relating to inlined iterators and generic array fields
* fixed a bug relating to passing c_strings to extern C functions
Platform-specific Changes
-------------------------
* made 'cray-x*' systems default to 'qthreads' over 'muxed'
* 'muxed' tasking now supports stack guard pages for non-hugepage heaps
(see http://chapel.cray.com/docs/1.12/platforms/cray.html)
* added support for 'clang-included' to work with GASNet on Cray systems
* removed support for cray-prgenv-pgi from the module build on 'cray-x*'
* for cray-prgenv-cray compilations, stopped throwing -hipa2 by default
Platform-specific bug fixes
---------------------------
* fixed a stack underflow problem with 'muxed' tasking causing segfaults
* fixed a race in stack management for 'muxed' tasking
Portability Improvements
------------------------
* eliminated warnings related to [_BSD|_SVID]_SOURCE being deprecated
* improved portability of building the SysCTypes.chpl for Fedora 22
* removed symmetric address assumptions from error-handling code in the runtime
* fixed a number of I/O portability errors on cygwin
* fixed tcmalloc when compiled with clang 3.6 and used from C++
* fixed I/O for 32-bit Ubuntu 14.04
* added support for building GASNet with segment=fast on OS X
* fixed hwloc's cairo detection for certain OS X installations
* eliminated some Xcode-specific warnings
Third-Party Software Changes
----------------------------
* added 'fltk' to the third-party directory for use by 'chplvis'
* enabled the use of GMP with the LLVM back-end
* made LLVM build in non-debug mode and without asserts by default
* improved cross-compilation of third-party packages for 'cray-x*' platforms
* we're now storing RE2 in an unpacked form due to all of our local changes
* fixed a valgrind issue in RE2
Launcher-specific Changes
-------------------------
* improved 'slurm' launcher's handling of non-zero exit() codes
* changed how the 'amudprun' launcher deals with quoted arguments
Runtime Library Changes
-----------------------
* added support for out-of-segment put()/get() calls
* changed I/O to allocate buffer space out of the Chapel heap
Testing System
--------------
* rewrote 'start_test' and 'computePerfStats' in python
* replaced --suppress feature with .suppressif files
* added ability to write chpldoc tests using the .doc.chpl extension
* updated testing system to support testing of 'chpl-ipe'
* made the parallel testing system print an estimated end time
* added support for a -valgrindexe flag to 'paratest.server'
* made 'start_test' work when it's located outside of $CHPL_HOME/util
* added the ability to have multi-line COMPOPTS file
* improved support for #defines with quotes for C testing
* made C testing system more accepting of C compilers that print filenames
* specialized testing system to recognize some common launcher errors
* improved ability to use chpl_launchcmd.py from NFS-mounted Lustre filesystems
* extended timeout mechanism to work under Cygwin
Makefile Changes
----------------
* rewrote 'make check' to remove reliance on start_test/tcsh/python
Performance Testing/Graphing System
-----------------------------------
* added a 'screenshot' capability for performance graphs
* added the ability to annotate cray-xc performance graphs
* retired the old gnuplot-based graphing system
* reduced graphing system's reliance on CHPL_HOME being set
* improved graphing system's stability when there is no ANNOTATIONS.yaml file
Developer-oriented changes: Process Improvements
------------------------------------------------
* began using Jira for issue tracking
Developer-oriented changes: Documentation Improvements
------------------------------------------------------
* added notes about testing nightly scripts to util/cron/README
Developer-oriented changes: Compiler Flags
------------------------------------------
* added a --break-on-resolve-id flag for stopping when calling a function
Developer-oriented changes: Module improvements
-----------------------------------------------
* cleaned up how filename/line# information is attached to network atomics
* added support for casting directly to c_strings
* started using specific I/O read/write functions for int/real/imag types
* cleaned up handling of bool values in IO.chpl
* made initOnLocales() a standalone parallel iterator and added 'chpl_' prefix
Developer-oriented changes: Makefile improvements
-------------------------------------------------
* added a top-level Makefile rule for building the parser
Developer-oriented changes: Compiler improvements/changes
---------------------------------------------------------
* rewrote the compiler passes that widen references as necessary
* rewrote major portions of the scope resolution pass
* reduced reliance on homegrown ADTs with their STL equivalents
* improved the sharing of flags between 'chpl' and 'chpldoc'
* turned off sugaring of type names in --devel mode
* internal improvements to how tuples are handled
* removed unused flag FLAG_NO_USE_CHAPELSTANDARD
* renamed FLAG_PRIVATE to FLAG_LOCALE_PRIVATE for clarity
* retired the "auto destroy fn" pragma
* added tracking of zippered loops throughout compilation
* ensured the lexer returns a heap-allocated const char* for each literal
Developer-oriented changes: Runtime improvements
------------------------------------------------
* added support for task callbacks in the runtime
* eliminated reliance on __always_inline
* added chpl_mem_goodAllocSize() to runtime to support minimizing wasted memory
* added the ability to flag certain memory types to avoid tracking them
* added a capability to generate a header file #defining CHPL_* variables
* turned off remote caching for tasking layers where migration can occur
Developer-oriented changes: Third-party improvements
----------------------------------------------------
* cleaned up local modifications to Qthreads for contribution back to master
* updated third-party GMP/RE2 READMEs to refer to online module documentation
------------------------------------------------------------------------------
_______________________________________________
Chapel-announce mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/chapel-announce
------------------------------------------------------------------------------
_______________________________________________
Chapel-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/chapel-users