v1.4.10 (2026-08-20)

Download

Important Notes

fw
  • Added support for 5600MT/s DRAM modules.
pxcc
  • pxcc is experimental and subject to change without deprecation. Please check the documentation for the latest updates.
  • Source that compiled before this release can fail to compile after it because pxcc starts to check more conditions
    • pxcc added checks that reject -Xmu -c, an explicit -j 0, a header-defined non-template kernel body, and a bad execute() argument.
    • pxcc also rejects device code that needs dynamic initialization, because MU startup never runs .init_array.
pxl
  • PXL: Breaking change to a public enum. A successful execution now reports ExecuteStatus::Completed, where it previously reported ExecuteStatus::Idle. Code that detects completion with getExecuteStatus() == ExecuteStatus::Idle still compiles, silently stops taking its success path, and a polling loop written against that condition never exits. Migrate to == ExecuteStatus::Completed, or use the return value of synchronize(). ExecuteStatus::Idle from now on means only “has not executed yet”.
  • PXL: ExecuteStatus::Completed takes the value 9, which the previous header used for ExecuteStatus::Max, and Max moves to 10. A consumer compiled against the previous header must be rebuilt before linking against this library: without a rebuild it reads a successful execution as the Max sentinel or filters it out in a range check, with no diagnostic.
sdk
  • openSUSE Leap 16 and RHEL 9 are experimental. Verified on openSUSE Leap 16.0 and Rocky Linux 9.6; Red Hat Enterprise Linux itself is untested.

New

pxcc
  • --config=<file>, an auto-discovered .pxcc.cfg, and ~/.pxcc.cfg each read compile options from a file.
  • PXCC_CACHE_DIR turns on an opt-in incremental compile cache, and the cache stays off without that variable.
  • execute() gained two argument checks, one for arithmetic width and one for device copyability.
  • pxcc gained a warning on a default argument on a kernel parameter.
  • pxcc gained an error on an anonymous-namespace type used as a template argument in device code.
pxl
  • PXL: Added Job::allocateMemory() for job-private device memory.
  • PXL: Added Job::remapMemory() and Job::unmapMemory() to place job-private memory at a user-specified device virtual address.
  • PXL: Added ExecuteStatus::Completed to distinguish successful completion from the initial Idle state.
  • PXL: Use ccma (/dev/ccma) as default allocator which make PXL support NUMA computing.
sdk
  • SDK: Added experimental release targets for openSUSE Leap 16 and RHEL 9 (el9 — RHEL, Rocky Linux, AlmaLinux). Ubuntu 24.04 remains the officially supported target.
  • SDK: Added scripts/setup_host.sh, which applies the CXL devdax host setup per distro — kernel cmdline, memory auto-online udev override, and a boot-time conversion service. Opt in with ./install.sh --with-host-setup.
xprofiler
  • Add daemon-backed xtop attach --pid, routed per-Sub capture, and passive multi-reader view.

Changed

pxcc
  • The cache key now covers the pxcc version and both compiler binaries, so an older entry misses once.
  • A cache hit now restores the device object mu.<src>.o and the four intermediate files as well.
  • A multi-file build runs on one shared worker pool, so one slow file no longer delays a batch.
  • A class-level __mu_shared__ or __mu_device__ mark now reaches an out-of-line member definition too.
  • The same compile error prints once, because pxcc folds the device chain copy into the host chain copy.
pxl
  • PXL: A successfully completed Map now reports ExecuteStatus::Completed instead of ExecuteStatus::Idle. See IMPORTANT NOTES.
sdk
  • SDK: install.sh and install_dependencies.sh now select apt/dpkg or zypper/dnf/rpm from /etc/os-release instead of assuming Ubuntu.
  • Docs: Docker guide now documents the host pxl_resourced daemon as required for running hardware (single or multiple containers).

Fixed

pxcc
  • Device code extraction now handles a concept, a member initializer, a multi-declarator declaration, and a macro-expanded definition.
  • An out-of-line member of a class template, and the class that holds it, now reach the device source.
  • A host-only function that only a member initializer calls no longer enters the device build.
  • pxl::createModule() now returns a real module inside a global constructor.
  • The .d file names your source instead of host.<src>.cpp, and a device diagnostic points at the right line.
pxl
  • PXL: Job ids are no longer truncated to 16 bits, so Job::id() stays unique past 65536 jobs in one process.
  • PXL: Fixed hangs, spurious cancels, and misreported errors on the Map completion path.
  • PXL: Fixed cache-coherency mismatch in the Launcher.
  • PXL: Fixed device memory leaking when a client failed.

Docker Image

  • Image Name: xcenadev/sdk:v1.4.10
  • Pull Command:

    docker pull xcenadev/sdk:v1.4.10