Pure batching without autodiff by ZuseZ4 · Pull Request #141637 · rust-lang/rust (original) (raw)
info: removing rustup binaries
info: rustup is uninstalled
##[group]Image checksum input
mingw-check-tidy
# We use the ghcr base image because ghcr doesn't have a rate limit
# and the mingw-check-tidy job doesn't cache docker images in CI.
FROM ghcr.io/rust-lang/ubuntu:22.04
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y --no-install-recommends \
g++ \
---
COPY host-x86_64/mingw-check/validate-toolstate.sh /scripts/
COPY host-x86_64/mingw-check/validate-error-codes.sh /scripts/
# NOTE: intentionally uses python2 for x.py so we can test it still works.
# validate-toolstate only runs in our CI, so it's ok for it to only support python3.
ENV SCRIPT TIDY_PRINT_DIFF=1 python2.7 ../x.py test \
--stage 0 src/tools/tidy tidyselftest --extra-checks=py,cpp
#
# This file is autogenerated by pip-compile with Python 3.10
# by the following command:
#
# pip-compile --allow-unsafe --generate-hashes reuse-requirements.in
---
#12 2.832 Building wheels for collected packages: reuse
#12 2.833 Building wheel for reuse (pyproject.toml): started
#12 3.047 Building wheel for reuse (pyproject.toml): finished with status 'done'
#12 3.048 Created wheel for reuse: filename=reuse-4.0.3-cp310-cp310-manylinux_2_35_x86_64.whl size=132719 sha256=d2a2565e7037ad3883fb9337653f2e25bbb588534fbef3697286cbc26d1bf634
#12 3.048 Stored in directory: /tmp/pip-ephem-wheel-cache-pajjestz/wheels/3d/8d/0a/e0fc6aba4494b28a967ab5eaf951c121d9c677958714e34532
#12 3.051 Successfully built reuse
#12 3.051 Installing collected packages: boolean-py, binaryornot, tomlkit, reuse, python-debian, markupsafe, license-expression, jinja2, chardet, attrs
#12 3.463 Successfully installed attrs-23.2.0 binaryornot-0.4.4 boolean-py-4.0 chardet-5.2.0 jinja2-3.1.4 license-expression-30.3.0 markupsafe-2.1.5 python-debian-0.1.49 reuse-4.0.3 tomlkit-0.13.0
#12 3.464 WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
#12 4.008 Collecting virtualenv
#12 4.083 Downloading virtualenv-20.31.2-py3-none-any.whl (6.1 MB)
#12 4.199 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.1/6.1 MB 53.4 MB/s eta 0:00:00
#12 4.261 Collecting filelock<4,>=3.12.2
#12 4.276 Downloading filelock-3.18.0-py3-none-any.whl (16 kB)
#12 4.297 Collecting distlib<1,>=0.3.7
#12 4.313 Downloading distlib-0.3.9-py2.py3-none-any.whl (468 kB)
#12 4.320 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 469.0/469.0 KB 91.2 MB/s eta 0:00:00
#12 4.356 Collecting platformdirs<5,>=3.9.1
#12 4.371 Downloading platformdirs-4.3.8-py3-none-any.whl (18 kB)
#12 4.455 Installing collected packages: distlib, platformdirs, filelock, virtualenv
#12 4.657 Successfully installed distlib-0.3.9 filelock-3.18.0 platformdirs-4.3.8 virtualenv-20.31.2
#12 4.657 WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
#12 DONE 4.7s
#13 [7/8] COPY host-x86_64/mingw-check/validate-toolstate.sh /scripts/
#13 DONE 0.0s
---
DirectMap4k: 145344 kB
DirectMap2M: 6146048 kB
DirectMap1G: 12582912 kB
##[endgroup]
Executing TIDY_PRINT_DIFF=1 python2.7 ../x.py test --stage 0 src/tools/tidy tidyselftest --extra-checks=py,cpp
+ TIDY_PRINT_DIFF=1 python2.7 ../x.py test --stage 0 src/tools/tidy tidyselftest --extra-checks=py,cpp
##[group]Building bootstrap
Finished `dev` profile [unoptimized] target(s) in 0.05s
##[endgroup]
WARN: currently no CI rustc builds have rustc debug assertions enabled. Please either set `rust.debug-assertions` to `false` if you want to use download CI rustc or set `rust.download-rustc` to `false`.
downloading https://static.rust-lang.org/dist/2025-05-27/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.xz
---
##[endgroup]
[TIMING] core::build_steps::tool::ToolBuild { compiler: Compiler { stage: 0, host: x86_64-unknown-linux-gnu, forced_compiler: false }, target: x86_64-unknown-linux-gnu, tool: "tidy", path: "src/tools/tidy", mode: ToolBootstrap, source_type: InTree, extra_features: [], allow_features: "", cargo_args: [], artifact_kind: Binary } -- 34.669
[TIMING] core::build_steps::tool::Tidy { compiler: Compiler { stage: 0, host: x86_64-unknown-linux-gnu, forced_compiler: false }, target: x86_64-unknown-linux-gnu } -- 0.000
fmt check
Diff in /checkout/compiler/rustc_builtin_macros/src/autodiff.rs:884:
DiffActivity::None | DiffActivity::FakeActivitySize(_) => {
panic!("Should not happen");
}
- DiffActivity::Vector | DiffActivity::Scalar | DiffActivity::Buffer => todo!()
+ DiffActivity::Vector | DiffActivity::Scalar | DiffActivity::Buffer => todo!(),
}
if let PatKind::Ident(_, ident, _) = arg.pat.kind {
idents.push(ident.clone());
Diff in /checkout/compiler/rustc_codegen_llvm/src/type_.rs:158:
pub(crate) fn is_float_type(&self, ty: &'ll Type) -> bool {
matches!(
self.type_kind(ty),
- TypeKind::Half | TypeKind::Float | TypeKind::Double | TypeKind::X86_FP80
- | TypeKind::FP128 | TypeKind::PPC_FP128
+ TypeKind::Half
+ | TypeKind::Float
+ | TypeKind::Double
+ | TypeKind::X86_FP80
+ | TypeKind::FP128
+ | TypeKind::PPC_FP128
)
}
Diff in /checkout/compiler/rustc_codegen_llvm/src/type_.rs:166:
pub(crate) fn is_vec_or_array_type(&self, ty: &'ll Type) -> bool {
- matches!(self.type_kind(ty),
- TypeKind::Array | TypeKind::Vector | TypeKind::ScalableVector)
+ matches!(self.type_kind(ty), TypeKind::Array | TypeKind::Vector | TypeKind::ScalableVector)
}
pub(crate) fn is_ptr_type(&self, ty: &'ll Type) -> bool {
Diff in /checkout/compiler/rustc_codegen_llvm/src/builder/autodiff.rs:109:
DiffActivity::Buffer => (enzyme_buffer, false),
DiffActivity::Scalar => (enzyme_scalar, true),
};
- let no_autodiff_only_batching = matches!(diff_activity, DiffActivity::Scalar | DiffActivity::Vector | DiffActivity::Buffer);
+ let no_autodiff_only_batching = matches!(
+ diff_activity,
+ DiffActivity::Scalar | DiffActivity::Vector | DiffActivity::Buffer
+ );
let outer_arg = outer_args[outer_pos];
args.push(cx.get_metadata_value(activity));
if matches!(diff_activity, DiffActivity::Dualv) {
Diff in /checkout/compiler/rustc_codegen_llvm/src/builder/autodiff.rs:253:
}
fn is_slice(activity_pos: usize, inputs: &[DiffActivity]) -> bool {
- if activity_pos + 1 >= inputs.len() {
- // If there is no arg following our ptr, it also can't be a slice,
- // since that would lead to a ptr, int pair.
- false
- } else {
- let next_activity = inputs[activity_pos + 1];
- // We analyze the MIR types and add this dummy activity if we visit a slice.
- matches!(next_activity, DiffActivity::FakeActivitySize(_))
- }
+ if activity_pos + 1 >= inputs.len() {
+ // If there is no arg following our ptr, it also can't be a slice,
+ // since that would lead to a ptr, int pair.
+ false
+ } else {
+ let next_activity = inputs[activity_pos + 1];
+ // We analyze the MIR types and add this dummy activity if we visit a slice.
+ matches!(next_activity, DiffActivity::FakeActivitySize(_))
+ }
}
// On LLVM-IR, we can luckily declare __enzyme_ functions without specifying the input
Diff in /checkout/compiler/rustc_codegen_llvm/src/builder/autodiff.rs:340:
todo!("Handle sret for reverse mode");
}
DiffMode::Batch => {
- let arr_ty = unsafe {
- llvm::LLVMArrayType2(inner_ret_ty, attrs.width as u64)
- };
+ let arr_ty = unsafe { llvm::LLVMArrayType2(inner_ret_ty, attrs.width as u64) };
ret_ty = arr_ty;
}
_ => {
Diff in /checkout/compiler/rustc_monomorphize/src/partitioning/autodiff.rs:60:
| DiffActivity::Duplicated => {
DiffActivity::FakeActivitySize(Some(elem_size))
}
- DiffActivity::Buffer => {
- DiffActivity::FakeActivitySize(Some(elem_size))
- }
+ DiffActivity::Buffer => DiffActivity::FakeActivitySize(Some(elem_size)),
DiffActivity::Const => DiffActivity::Const,
_ => bug!("unexpected activity for ptr/ref"),
};
Diff in /checkout/tests/codegen/batching/batching1.rs:16:
//@ pretty-compare-only
//@ pp-exact:batching.pp
-
// Test that forward mode ad macros are expanded correctly.
use std::arch::asm;
use std::autodiff::autodiff;
Diff in /checkout/tests/codegen/batching/batching1.rs:75:
::core::hint::black_box((bx_0, bx_1, bx_2));
::core::hint::black_box(<[f32; 4usize]>::default())
}
-
fn main() {}
Diff in /checkout/tests/codegen/batching/batching2.rs:13:
use ::std::prelude::rust_2015::*;
#[macro_use]
extern crate std;
-use std::simd::Simd;
//@ pretty-mode:expanded
//@ pretty-compare-only
//@ pp-exact:batching.pp
Diff in /checkout/tests/codegen/batching/batching2.rs:23:
// Test that forward mode ad macros are expanded correctly.
use std::arch::asm;
use std::autodiff::autodiff;
+use std::simd::Simd;
// Generated from:
//// ```
Diff in /checkout/tests/codegen/batching/batching2.rs:40:
#[rustc_autodiff(Batch, 4, Buffer, Buffer)]
#[no_mangle]
#[inline(never)]
-fn d_square2(x: &[f32]) -> Simd<f32,4> {
+fn d_square2(x: &[f32]) -> Simd<f32, 4> {
unsafe {
asm!("NOP", options(nomem));
};
fmt: checked 6031 files
Build completed unsuccessfully in 0:01:14
local time: Wed May 28 05:54:51 UTC 2025
network time: Wed, 28 May 2025 05:54:51 GMT