From a7512e0d1206140f3418d12474d338a07b6f4e3a Mon Sep 17 00:00:00 2001 From: Christopher Milan Date: Fri, 8 May 2026 17:35:03 -0700 Subject: [PATCH] PYTHON: images have no alignment constraints (by default) (#16115) --- .github/workflows/test.yml | 4 ++-- tinygrad/runtime/ops_python.py | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 78d8ef859e..c0871d1f31 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -169,8 +169,8 @@ jobs: run: DEV=PYTHON python3 -m pytest -rA test/backend/test_renderer_failures.py::TestRendererFailures - name: Test IMAGE support run: | - IMAGE=1 DEV=PYTHON::IMAGE_PITCH_ALIGNMENT=64 python3 test/backend/test_ops.py TestOps.test_gemm - IMAGE=1 DEV=PYTHON::IMAGE_PITCH_ALIGNMENT=64 python3 test/backend/test_ops.py TestOps.test_simple_conv2d + IMAGE=1 DEV=PYTHON python3 test/backend/test_ops.py TestOps.test_gemm + IMAGE=1 DEV=PYTHON python3 test/backend/test_ops.py TestOps.test_simple_conv2d - name: Test emulated METAL tensor cores run: | DEBUG=2 FORWARD_ONLY=1 DEV=PYTHON::METAL python3 test/backend/test_ops.py TestOps.test_big_gemm diff --git a/tinygrad/runtime/ops_python.py b/tinygrad/runtime/ops_python.py index eec76a8022..f54659185d 100644 --- a/tinygrad/runtime/ops_python.py +++ b/tinygrad/runtime/ops_python.py @@ -6,7 +6,7 @@ from typing import Any, TYPE_CHECKING import pickle, base64, itertools, time, sys, functools from dataclasses import replace from tinygrad.dtype import DType, dtypes, ImageDType, PtrDType, truncate, storage_fmt_for_dtype, to_storage_scalar, from_storage_scalar -from tinygrad.helpers import all_same, getenv, flatten, get_single_element, Target +from tinygrad.helpers import all_same, getenv, flatten, get_single_element, Target, IMAGE from tinygrad.device import Compiled, Compiler, Allocator from tinygrad.codegen.opt import tc from tinygrad.uop.ops import exec_alu, python_alu, Ops, UOp, GroupOp, bitcast @@ -220,6 +220,7 @@ class PythonRenderer(Renderer): elif target.arch.startswith("sm"): self.target = replace(target, device="CUDA") self.tensor_cores = tc.get_cuda(target.arch) + elif IMAGE and not target.arch: self.target = replace(target, arch="IMAGE_PITCH_ALIGNMENT=1") else: self.target = target def render(self, uops:list[UOp]) -> str: