Product News

C++ AMP beyond Windows: Targeting HSAIL and SPIR on Linux and other platforms

The HSA Foundation together with AMD and Microsoft recently announced an open source C++ AMP compiler implementation they have been working on, using the Clang/LLVM C++ compiler as a base but currently separate from Clang/LLVM. The implementation targets OpenCL, HSAIL, and SPIR 1.2 on Linux and other non-Windows platforms. When the work is finished, the intention is to approach the LLVM community to offer this work as a contribution back to the official Clang/LLVM code base if there is interest.

C++ AMP is an open specification from Microsoft that enables STL-like C++ extensions for massively parallel computation using GPUs and vector units, and is part of the basis for the Parallel STL proposal now under consideration for standardized parallel computations on multicore and vector hardware.

AMD released on Nov 12, 2013 a fully open sourced C++ AMP compiler based on  CLANG/LLVM with outputs to OpenCL and Khronos Group SPIR 1.2 initially. This compiler will have HSAIL support in early 2014 for HSA platforms.   This initial focus is bring about Linux support for C++AMP, complete with GPU acceleration.  AMD is also bringing their BOLT Standard Template library over to be qualified with this tool chain.

Microsoft is engaged with AMD and MultiCoreWare, by providing design and validation inputs to help drive the success of this project.

Coverage:

Bringing C++ AMP Beyond Windows via CLANG and LLVM

Boost Migrating to Git, Going Modular

The historically monolithic Boost project is (finally!) migrating to git, with each library in Boost moving into its own repository on github. The goal is to foster a more agile nimble development model and a more active library ecosystem. Create your own forks, hack, submit pull requests, and do all the good things that distributed version control lets you do. From the announcement on the Boost mailing list:

Subversion repository closing. Conversion to Git imminent.

by Beman Dawes

The Boost Steering Committee has given the final approval for the conversion from Subversion to Git, including the modularization of Boost library repositories.

The Subversion repository will be closed for all changes to all branches, including the sandbox, Sunday, November 23 2013, 00:00 hours UTC. That's 8 PM Saturday, US East Coast time, and 5 PM US West Coast time.

Please make no svn commits after that time. We will be adding a pre-commit hook that prevents commits, but please do not wait for that becomes active.

After svn is closed, the conversion will be run one last time, and then turned off. Then there is a week set aside for final validity checks, testing, and general scurrying around. When that is done, the boostorg repo on GitHub will open for business. If everything goes smoothly, it may take less than a week but if there are glitches it may take longer.

--Beman

Read the full thread here.

Visual C++ November 2013 CTP released, adds 13 new C++11/14 features

vc-ctp-nov13.PNGMicrosoft has announced a new Visual C++ Compiler CTP (Community Technology Preview):

Announcing the Visual C++ Compiler November 2013 CTP

In addition to the ISO C++ features added in last month's Visual c++ 2013 full release, this CTP adds the following additional ISO C++11 and draft ISO C++14 features in preview form:

  • Implicit move special member function generation (thus also completing =default)
  • Reference qualifiers on member functions (a.k.a. "& and && for *this")
  • Thread-safe function local static initialization (a.k.a. "magic statics")
  • Inheriting constructors
  • alignof/alignas
  • __func__
  • Extended sizeof
  • constexpr (except for member functions)
  • noexcept (unconditional)
  • C++14 decltype(auto)
  • C++14 auto function return type deduction
  • C++14 generic lambdas (with explicit lambda capture list)
  • (Proposed for C++17) Resumable functions and await

The new CTP installs as a new toolset under the Visual C++ 2013 IDE, allowing editing and building using the new Visual C++ compiler through the current shipping IDE. As this is a CTP, however, there is not yet other IDE support, and so for example the IDE may display red squiggles on valid code that will actually compile and run, as shown in the accompanying screenshot which exercises a generic lambda function having an auto parameter. If you do not already have a copy of Visual C++ 2013 installed and would like a free copy, several versions of the Visual C++ 2013 Express optimizing compiler are available for free via the Visual Studio Downloads page. 

New Stable Major wxWidgets 3.0.0 Release

logo9.jpgA new stable release of wxWidgets, the open source C++ library for creating cross-platform GUI applications with native look and feel, is now available.

This 3.0 release is a culmination of several years of work since the previous stable 2.8 series and so brings many important improvements compared to it, such as:

  • Much better and simpler to use support for Unicode.
  • New wxOSX/Cocoa port, suitable for development of 64 bit GUI applications under OS X.
  • Support for GTK+ 3 in wxGTK port.
  • Much improved documentation.
  • New webview library providing integration with the platform native HTML-rendering engine.
  • New propgrid and ribbon libraries.
  • New wxRichMessageDialog, wxInfoBar, wxCommandLinkButton, wxHeaderCtrl, wxRearrangeCtrl, wxTreeListCtrl, wxTimePickerCtrl, wxRichToolTip, wxBannerWindow, wxPersistentXXX and other classes.

as well as a huge number of other new features and bug fixes.

More information is available at wxWidgets home page and in the online documentation.

HPX version 0.9.7 released -- STE||AR Group, LSU

The STE||AR Group at Loisiana State University has released V0.9.7 of HPX -- A general purpose parallel C++ runtime system for applications of any scale.

HPX V0.9.7 Released

The newest version of HPX (V0.9.7) is now available for download! Over the past few months...

From the announcement:

  • Ported HPX to BlueGene/Q
  • Improved HPX support for Intel Xeon Phi® accelerators.
  • Reimplemented hpx::bind, hpx::tuple, and hpx::function for better performance and better compliance with the C++11 Standard. Added hpx::mem_fn.
  • Reworked hpx::when_all and hpx::when_any for better C++ compliance. Added hpx::when_any_swapped.
  • Added hpx::copy as a precursor for a migrate functionality, added hpx::get_ptr allowing to directly access the memory underlying a given component.
  • Added the hpx::lcos::broadcast, hpx::lcos::reduce, and hpx::lcos::fold collective operations.
  • Added support for more flexible thread affinity control from the HPX command line, such as new modes (balanced, scattered, compact), improved default settings when running multiple localities on the same node.
  • Added experimental executors for simpler thread pooling and scheduling. This API may change in the future as it will stay aligned with the ongoing C++ standardization efforts.
  • Massively improved the performance of the HPX serialization code. Added partial support for zero copy serialization of array and bitwise-copyable types.
  • General performance improvements of the code related to threads and futures.

Boost 1.55.0 released!

Release 1.55.0 of the Boost C++ Libraries is now available:

Boost Version 1.55.0

These open-source libraries work well with the C++ Standard Library, and are usable across a broad spectrum of applications. The Boost license encourages both commercial and non-commercial use.

This release contains one new library and numerous enhancements and bug fixes for existing libraries.

New libraries:

  • Predef: This library defines a set of compiler, architecture, operating system, library, and other version numbers from the information it can gather of C, C++, Objective C, and Objective C++ predefined macros or those defined in generally available headers, from Rene Rivera.

Clang is (draft) C++14 feature-complete!

A few hours ago, Clang completed checkin 194194 to be feature-complete for draft C++14 including both language extensions and standard library features. (Note: The library conformance requires using libc++, instead of libstdc++ which is supported on more platforms but is not as conforming.) Congratulations to the Clang team for this achievement!

With this progress, it appears that the next release of Clang and LLVM, expected in December or January, will be draft C++14 feature-complete. C++14 itself may still undergo final changes at the February 2014 ISO C++ meeting, which is expected to be the final meeting for technical tweaks to the contents of C++14.

Duetto: A C++ compiler for the Web going beyond emscripten and node.js

logo_duetto_quadrato_192.pngLearning Technologies Ltd. has released a new Clang-based C++ compiler for the Web:

Duetto: a C++ compiler for the Web going beyond emscripten and node.js

From the announcement:

Today Lean­ing Tech­nolo­gies Ltd. releases duetto, a com­piler designed to develop integrated (back­end and fron­tend) web appli­ca­tions in C++. duetto is now avail­able to the pub­lic as FOSS here, and will be offered in a com­mer­cial pack­age with closed-source-friendly licens­ing soon.

[... duetto] allows to pro­gram both the fron­tend and the back­end of a Web appli­ca­tion in an inte­grated C++ code­base, com­pil­ing them respec­tively to JavaScript and native code.

Duetto com­bines the advan­tages of emscripten and node.js by allow­ing the pro­gram­mer to:

  • write web appli­ca­tions in C++, reusing exist­ing code and mak­ing port­ing of whole appli­ca­tions and games to the browser plausible.
  • code both the fron­tend and the back­end of a web appli­ca­tion in the same lan­guage and codebase
In addi­tion to this, duetto pro­vides some nice features:
  • Bring the robust­ness and proven scal­a­bil­ity of C++ pro­gram­ming to the Web
  • You can access all browser APIs directly. Duetto inher­its the C++ phi­los­o­phy of expos­ing the plat­form capa­bil­i­ties (and lim­i­ta­tions) to the users. There is no mid­dle man.
  • Duetto is based on LLVM/clang. An indus­try stan­dard C++ com­piler is a programmer’s best friend: code san­ity is ver­i­fied as com­pile time, includ­ing RPC signatures.
  • The LLVM tool­chain also guar­an­tees that a mind-blowing set of opti­miza­tions is run at com­pile time, gen­er­at­ing highly effi­cient code. This decreases the bur­den on JavaScript JIT com­piler at runtime.
  • Con­trar­ily to emscripten we do not try to emu­late a tra­di­tional address space using typed arrays, but directly map C++ objects to JS objects. This reduces mem­ory con­sump­tion since the garbage col­lec­tor can delete unused object.

ODB C++ ORM 2.3.0 Released, Adds Schema Evolution Support

ODB is an open source object-relational mapping (ORM) system for C++. It allows you to persist C++ objects to a relational database without having to deal with tables, columns, or SQL and without manually writing any of the mapping code.

Major new features in this release:

  • Support for database schema evolution, including automatic schema migration, immediate and gradual data migration, as well as soft object model changes (ability to work with multiple schema versions using the same C++ classes). For a quick showcase of this functionality see the Changing Persistent Classes section in the Hello World Example chapter.
  • Support for object sections which provide the ability to split data members of a persistent C++ class into independently loaded/updated groups.
  • Support for automatic mapping of C++11 enum classes.

A more detailed discussion of these features can be found on the blog. For the complete list of new features in this version see the official release announcement.

ODB is written in portable C++ (both C++98/03 and C++11 are supported) and you should be able to use it with any modern C++ compiler. In particular, we have tested this release on GNU/Linux (x86/x86-64/ARM), Windows (x86/x86-64), Mac OS X (x86), and Solaris (x86/x86-64/SPARC) with GNU g++ 4.2.x-4.8.x, MS Visual C++ 2005, 2008, 2010, and 2012, Sun Studio 12u2, and Clang 3.x.

The currently supported database systems are MySQL, SQLite, PostgreSQL, Oracle, and SQL Server. ODB also provides optional profiles for Boost and Qt, which allow you to seamlessly use value types, containers, and smart pointers from these libraries in your persistent classes.

More information, documentation, source code, and pre-compiled binaries are available on the project's page.

This week in C++: EDG 4.8 and Visual C++ 2013

The past week saw new releases of two major C++ implementations, with a focus on standards conformance improvements.

Edison Design Group (EDG) shipped version 4.8 of their C++ compiler front-end. This is the first EDG C++ release to achieve full C++11 language conformance. It adds support for C++11 inheriting constructors, user-defined literals, thread_local variables, alignment support (alignof and alignas), and complete decltype support.

Note: You can't buy a complete compiler from EDG, but EDG's front-end is a key part of several major commercial compilers and tools. With the availability of 4.8, this means that EDG-based products such as Intel's ICC compiler could achieve full language conformance when they can integrate the EDG 4.8 front-end in a future release.

Microsoft shipped Visual C++ 2013, a major update to VC++ 2012 with additional C++ conformance features. Since last year's release, VC++ 2013 adds the following ISO C++ features: explicit conversion operators, raw string literals, function template default arguments, delegating constructors, { } uniform initialization syntax and initializer_lists, variadic templates, non-static data member initializers, =default, =delete, and using aliases. This release also include some small post-C++11 features that were approved earlier this year for inclusion in the draft of the upcoming C++14 standard, including make_unique, nonmember cbegin/cend, the improved <functional> operator functors such as greater<>, and the new transformation trait type aliases such as remove_reference_t.

At the GoingNative conference in September, Microsoft also announced that before the end of the year it expects to release a follow-on "alpha" or preview compiler containining initial implementations of additional C++11 language features, likely including 'some or all of' the following: implicit move function generation, & and && qualifiers on member functions, __func__, extended sizeof, thread-safe initialization of function local static variables, unconditional noexcept, constexpr on functions other than constructors, and possibly inheriting constructors. The CTP is also expected to include support for several new draft-standard C++14 language features, including auto function return type deduction, decltype(auto), and possibly the much-anticipated C++14 marquee feature generic lambdas. It will likely also include an initial implementation of the await concurrency language feature that is being proposed for possible inclusion in a future standard.