rtx-cfd legacy GPU: kernel outputs were device-buffer CLONES (every write lost) — the buffers are borrowed mutably now; the Poisson kernels keep boundary Dirichlet values; tests: the advection pulse marched 50 steps, the Jacobi budget 20k, the reduction reference in f64
CI / Python Bindings (maturin) (ubuntu-latest) (push) Blocked by required conditions
CI / Build (macos-latest) (push) Waiting to run
CI / Test (macos-latest) (push) Blocked by required conditions
CI / Test (ubuntu-latest) (push) Blocked by required conditions
CI / Python Bindings (maturin) (macos-latest) (push) Blocked by required conditions
CI / WASM Build + Size Check (push) Blocked by required conditions
CI / Distributed Training Tests (push) Blocked by required conditions
CI / CI Success (push) Blocked by required conditions
CI / Build CPU-Only (Explicit) (push) Failing after 5s
Documentation / Build User Guide (push) Successful in 5s
Documentation / Build API Documentation (push) Failing after 5s
CI / Format Check (push) Failing after 10s
CI / Build (ubuntu-latest) (push) Failing after 1m22s
CI / Clippy Check (push) Failing after 1m38s
Performance Benchmarks / Run Benchmarks (push) Successful in 2m50s

This commit is contained in:
Omar Sobh
2026-09-16 07:28:42 -05:00
parent f3f6ac21fb
commit 0de750bad1
8 changed files with 58 additions and 62 deletions
@@ -365,7 +365,7 @@ __global__ void d3q19_bounce_back_boundaries(
pub fn gpu_collision_step(&self) -> CfdResult<()> {
let buffers = self
.gpu_buffers
.as_ref()
.as_mut()
.ok_or_else(|| CfdError::gpu_error("GPU buffers not initialized"))?;
let omega = 1.0 / self.params.tau;
@@ -399,7 +399,7 @@ __global__ void d3q19_bounce_back_boundaries(
self.kernel_manager
.stream()
.launch_builder(&func)
.arg(&mut buffers.f.clone())
.arg(&mut buffers.f)
.arg(&buffers.f_eq)
.arg(&(omega as f32))
.arg(&(buffers.nx as i32))
@@ -419,7 +419,7 @@ __global__ void d3q19_bounce_back_boundaries(
pub fn gpu_streaming_step(&self) -> CfdResult<()> {
let buffers = self
.gpu_buffers
.as_ref()
.as_mut()
.ok_or_else(|| CfdError::gpu_error("GPU buffers not initialized"))?;
let module = self
@@ -444,7 +444,7 @@ __global__ void d3q19_bounce_back_boundaries(
self.kernel_manager
.stream()
.launch_builder(&func)
.arg(&mut buffers.f_temp.clone())
.arg(&mut buffers.f_temp)
.arg(&buffers.f)
.arg(&(buffers.nx as i32))
.arg(&(buffers.ny as i32))
@@ -465,7 +465,7 @@ __global__ void d3q19_bounce_back_boundaries(
fn gpu_extract_macroscopic_variables(&self) -> CfdResult<()> {
let buffers = self
.gpu_buffers
.as_ref()
.as_mut()
.ok_or_else(|| CfdError::gpu_error("GPU buffers not initialized"))?;
let module = self
@@ -495,10 +495,10 @@ __global__ void d3q19_bounce_back_boundaries(
self.kernel_manager
.stream()
.launch_builder(&func)
.arg(&mut buffers.density.clone())
.arg(&mut buffers.velocity_x.clone())
.arg(&mut buffers.velocity_y.clone())
.arg(&mut buffers.velocity_z.clone())
.arg(&mut buffers.density)
.arg(&mut buffers.velocity_x)
.arg(&mut buffers.velocity_y)
.arg(&mut buffers.velocity_z)
.arg(&buffers.f)
.arg(&(buffers.nx as i32))
.arg(&(buffers.ny as i32))
@@ -520,7 +520,7 @@ __global__ void d3q19_bounce_back_boundaries(
fn gpu_compute_equilibrium(&self) -> CfdResult<()> {
let buffers = self
.gpu_buffers
.as_ref()
.as_mut()
.ok_or_else(|| CfdError::gpu_error("GPU buffers not initialized"))?;
let module = self
@@ -545,7 +545,7 @@ __global__ void d3q19_bounce_back_boundaries(
self.kernel_manager
.stream()
.launch_builder(&func)
.arg(&mut buffers.f_eq.clone())
.arg(&mut buffers.f_eq)
.arg(&buffers.density)
.arg(&buffers.velocity_x)
.arg(&buffers.velocity_y)
@@ -567,7 +567,7 @@ __global__ void d3q19_bounce_back_boundaries(
pub fn gpu_apply_bounce_back_boundaries(&self) -> CfdResult<()> {
let buffers = self
.gpu_buffers
.as_ref()
.as_mut()
.ok_or_else(|| CfdError::gpu_error("GPU buffers not initialized"))?;
let module = self
@@ -591,7 +591,7 @@ __global__ void d3q19_bounce_back_boundaries(
self.kernel_manager
.stream()
.launch_builder(&func)
.arg(&mut buffers.f.clone())
.arg(&mut buffers.f)
.arg(&(buffers.nx as i32))
.arg(&(buffers.ny as i32))
.arg(&(buffers.nz as i32))
@@ -621,7 +621,7 @@ __global__ void d3q19_bounce_back_boundaries(
) -> CfdResult<()> {
let buffers = self
.gpu_buffers
.as_ref()
.as_mut()
.ok_or_else(|| CfdError::gpu_error("GPU buffers not initialized"))?;
let module = self
@@ -648,7 +648,7 @@ __global__ void d3q19_bounce_back_boundaries(
self.kernel_manager
.stream()
.launch_builder(&func)
.arg(&mut buffers.f.clone())
.arg(&mut buffers.f)
.arg(&(density as f32))
.arg(&(velocity.x as f32))
.arg(&(velocity.y as f32))
@@ -675,7 +675,7 @@ __global__ void d3q19_bounce_back_boundaries(
) -> CfdResult<MacroscopicVariables3D> {
let buffers = self
.gpu_buffers
.as_ref()
.as_mut()
.ok_or_else(|| CfdError::gpu_error("GPU buffers not initialized"))?;
// Extract macroscopic variables first
@@ -726,7 +726,7 @@ __global__ void d3q19_bounce_back_boundaries(
pub fn gpu_total_mass(&self) -> CfdResult<f64> {
let buffers = self
.gpu_buffers
.as_ref()
.as_mut()
.ok_or_else(|| CfdError::gpu_error("GPU buffers not initialized"))?;
self.gpu_extract_macroscopic_variables()?;
@@ -739,7 +739,7 @@ __global__ void d3q19_bounce_back_boundaries(
pub fn gpu_kinetic_energy(&self) -> CfdResult<f64> {
let buffers = self
.gpu_buffers
.as_ref()
.as_mut()
.ok_or_else(|| CfdError::gpu_error("GPU buffers not initialized"))?;
self.gpu_extract_macroscopic_variables()?;