openFOAM-RANS-to-GPU/scripts/quadrants_hello_world.py

44 lines
1 KiB
Python
Raw Permalink Normal View History

2026-07-25 07:09:19 +00:00
#!/usr/bin/env python3
"""Minimal Quadrants CUDA kernel smoke run."""
from __future__ import annotations
import argparse
import numpy as np
import quadrants as qd
@qd.kernel
def axpy(n: int, x: qd.types.NDArray[qd.f32, 1], y: qd.types.NDArray[qd.f32, 1]) -> None:
for i in range(n):
y[i] = 2.0 * x[i] + 1.0
def main() -> None:
parser = argparse.ArgumentParser()
parser.add_argument("--arch", default="cuda", choices=("cuda", "gpu", "cpu", "x64"))
args = parser.parse_args()
qd.init(arch=getattr(qd, args.arch))
x_np = np.arange(8, dtype=np.float32)
expected = 2.0 * x_np + 1.0
x = qd.ndarray(qd.f32, shape=x_np.shape)
y = qd.ndarray(qd.f32, shape=x_np.shape)
x.from_numpy(x_np)
axpy(x_np.size, x, y)
qd.sync()
actual = y.to_numpy()
if not np.array_equal(actual, expected):
raise SystemExit(f"Quadrants hello kernel mismatch: {actual} != {expected}")
print(f"quadrants hello world ok on arch={args.arch}: {actual}")
if __name__ == "__main__":
main()