rtx-cfd legacy GPU modules: cudarc 0.18 API — unsafe launches, the stream accessor, memcpy_htod argument order; the renamed k-ε constants and ::standard(); get_module clones; CfdConfig test literals take ..Default
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 / Python Bindings (maturin) (ubuntu-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 (ubuntu-latest) (push) Failing after 5s
CI / Clippy Check (push) Failing after 5s
Documentation / Build User Guide (push) Successful in 6s
Documentation / Build API Documentation (push) Failing after 17s
CI / Build CPU-Only (Explicit) (push) Failing after 32s
CI / Format Check (push) Failing after 42s
Performance Benchmarks / Run Benchmarks (push) Successful in 1m59s
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 / Python Bindings (maturin) (ubuntu-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 (ubuntu-latest) (push) Failing after 5s
CI / Clippy Check (push) Failing after 5s
Documentation / Build User Guide (push) Successful in 6s
Documentation / Build API Documentation (push) Failing after 17s
CI / Build CPU-Only (Explicit) (push) Failing after 32s
CI / Format Check (push) Failing after 42s
Performance Benchmarks / Run Benchmarks (push) Successful in 1m59s
This commit is contained in:
@@ -376,6 +376,7 @@ impl PisoGpuSolver {
|
|||||||
shared_mem_bytes: 0,
|
shared_mem_bytes: 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
unsafe {
|
||||||
unsafe {
|
unsafe {
|
||||||
self.kernel_manager
|
self.kernel_manager
|
||||||
.stream()
|
.stream()
|
||||||
@@ -393,6 +394,7 @@ impl PisoGpuSolver {
|
|||||||
CfdError::gpu_error(&format!("Divergence kernel launch failed: {}", e))
|
CfdError::gpu_error(&format!("Divergence kernel launch failed: {}", e))
|
||||||
})?;
|
})?;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self.kernel_manager.synchronize()?;
|
self.kernel_manager.synchronize()?;
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -459,6 +461,7 @@ impl PisoGpuSolver {
|
|||||||
|
|
||||||
let correction_factor = -dt / density;
|
let correction_factor = -dt / density;
|
||||||
|
|
||||||
|
unsafe {
|
||||||
unsafe {
|
unsafe {
|
||||||
self.kernel_manager
|
self.kernel_manager
|
||||||
.stream()
|
.stream()
|
||||||
@@ -476,6 +479,7 @@ impl PisoGpuSolver {
|
|||||||
CfdError::gpu_error(&format!("Gradient kernel launch failed: {}", e))
|
CfdError::gpu_error(&format!("Gradient kernel launch failed: {}", e))
|
||||||
})?;
|
})?;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self.kernel_manager.synchronize()?;
|
self.kernel_manager.synchronize()?;
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -644,6 +648,7 @@ mod tests {
|
|||||||
viscosity: 0.01,
|
viscosity: 0.01,
|
||||||
density: 1.0,
|
density: 1.0,
|
||||||
device_id: 0,
|
device_id: 0,
|
||||||
|
..CfdConfig::default()
|
||||||
};
|
};
|
||||||
|
|
||||||
let params = PisoParameters::default();
|
let params = PisoParameters::default();
|
||||||
@@ -702,6 +707,7 @@ mod tests {
|
|||||||
viscosity: 0.01,
|
viscosity: 0.01,
|
||||||
density: 1.0,
|
density: 1.0,
|
||||||
device_id: 0,
|
device_id: 0,
|
||||||
|
..CfdConfig::default()
|
||||||
};
|
};
|
||||||
|
|
||||||
let params = PisoParameters::default();
|
let params = PisoParameters::default();
|
||||||
|
|||||||
@@ -499,6 +499,7 @@ mod tests {
|
|||||||
viscosity: 0.01,
|
viscosity: 0.01,
|
||||||
density: 1.0,
|
density: 1.0,
|
||||||
device_id: 0,
|
device_id: 0,
|
||||||
|
..CfdConfig::default()
|
||||||
};
|
};
|
||||||
|
|
||||||
let params = SimpleParameters::new();
|
let params = SimpleParameters::new();
|
||||||
|
|||||||
@@ -214,6 +214,7 @@ impl D2Q9GpuSolver {
|
|||||||
shared_mem_bytes: 0,
|
shared_mem_bytes: 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
unsafe {
|
||||||
unsafe {
|
unsafe {
|
||||||
self.kernel_manager
|
self.kernel_manager
|
||||||
.stream()
|
.stream()
|
||||||
@@ -230,6 +231,7 @@ impl D2Q9GpuSolver {
|
|||||||
CfdError::gpu_error(&format!("Equilibrium init kernel launch failed: {}", e))
|
CfdError::gpu_error(&format!("Equilibrium init kernel launch failed: {}", e))
|
||||||
})?;
|
})?;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self.kernel_manager.synchronize()?;
|
self.kernel_manager.synchronize()?;
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -280,6 +282,7 @@ impl D2Q9GpuSolver {
|
|||||||
shared_mem_bytes: 0,
|
shared_mem_bytes: 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
unsafe {
|
||||||
unsafe {
|
unsafe {
|
||||||
self.kernel_manager
|
self.kernel_manager
|
||||||
.stream()
|
.stream()
|
||||||
@@ -294,6 +297,7 @@ impl D2Q9GpuSolver {
|
|||||||
CfdError::gpu_error(&format!("Collision kernel launch failed: {}", e))
|
CfdError::gpu_error(&format!("Collision kernel launch failed: {}", e))
|
||||||
})?;
|
})?;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self.kernel_manager.synchronize()?;
|
self.kernel_manager.synchronize()?;
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -323,6 +327,7 @@ impl D2Q9GpuSolver {
|
|||||||
shared_mem_bytes: 0,
|
shared_mem_bytes: 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
unsafe {
|
||||||
unsafe {
|
unsafe {
|
||||||
self.kernel_manager
|
self.kernel_manager
|
||||||
.stream()
|
.stream()
|
||||||
@@ -336,6 +341,7 @@ impl D2Q9GpuSolver {
|
|||||||
CfdError::gpu_error(&format!("Streaming kernel launch failed: {}", e))
|
CfdError::gpu_error(&format!("Streaming kernel launch failed: {}", e))
|
||||||
})?;
|
})?;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Swap buffers: f = f_temp
|
// Swap buffers: f = f_temp
|
||||||
// In real implementation, would swap buffer pointers
|
// In real implementation, would swap buffer pointers
|
||||||
@@ -367,6 +373,7 @@ impl D2Q9GpuSolver {
|
|||||||
shared_mem_bytes: 0,
|
shared_mem_bytes: 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
unsafe {
|
||||||
unsafe {
|
unsafe {
|
||||||
self.kernel_manager
|
self.kernel_manager
|
||||||
.stream()
|
.stream()
|
||||||
@@ -385,6 +392,7 @@ impl D2Q9GpuSolver {
|
|||||||
))
|
))
|
||||||
})?;
|
})?;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self.kernel_manager.synchronize()?;
|
self.kernel_manager.synchronize()?;
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -414,6 +422,7 @@ impl D2Q9GpuSolver {
|
|||||||
shared_mem_bytes: 0,
|
shared_mem_bytes: 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
unsafe {
|
||||||
unsafe {
|
unsafe {
|
||||||
self.kernel_manager
|
self.kernel_manager
|
||||||
.stream()
|
.stream()
|
||||||
@@ -429,6 +438,7 @@ impl D2Q9GpuSolver {
|
|||||||
CfdError::gpu_error(&format!("Equilibrium kernel launch failed: {}", e))
|
CfdError::gpu_error(&format!("Equilibrium kernel launch failed: {}", e))
|
||||||
})?;
|
})?;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self.kernel_manager.synchronize()?;
|
self.kernel_manager.synchronize()?;
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -458,6 +468,7 @@ impl D2Q9GpuSolver {
|
|||||||
shared_mem_bytes: 0,
|
shared_mem_bytes: 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
unsafe {
|
||||||
unsafe {
|
unsafe {
|
||||||
self.kernel_manager
|
self.kernel_manager
|
||||||
.stream()
|
.stream()
|
||||||
@@ -470,6 +481,7 @@ impl D2Q9GpuSolver {
|
|||||||
CfdError::gpu_error(&format!("Boundary kernel launch failed: {}", e))
|
CfdError::gpu_error(&format!("Boundary kernel launch failed: {}", e))
|
||||||
})?;
|
})?;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self.kernel_manager.synchronize()?;
|
self.kernel_manager.synchronize()?;
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -512,6 +524,7 @@ impl D2Q9GpuSolver {
|
|||||||
shared_mem_bytes: 0,
|
shared_mem_bytes: 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
unsafe {
|
||||||
unsafe {
|
unsafe {
|
||||||
self.kernel_manager
|
self.kernel_manager
|
||||||
.stream()
|
.stream()
|
||||||
@@ -530,6 +543,7 @@ impl D2Q9GpuSolver {
|
|||||||
CfdError::gpu_error(&format!("Initialization kernel launch failed: {}", e))
|
CfdError::gpu_error(&format!("Initialization kernel launch failed: {}", e))
|
||||||
})?;
|
})?;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self.kernel_manager.synchronize()?;
|
self.kernel_manager.synchronize()?;
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
@@ -395,6 +395,7 @@ __global__ void d3q19_bounce_back_boundaries(
|
|||||||
shared_mem_bytes: 0,
|
shared_mem_bytes: 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
unsafe {
|
||||||
self.kernel_manager
|
self.kernel_manager
|
||||||
.stream()
|
.stream()
|
||||||
.launch_builder(&func)
|
.launch_builder(&func)
|
||||||
@@ -406,6 +407,7 @@ __global__ void d3q19_bounce_back_boundaries(
|
|||||||
.arg(&(buffers.nz as i32))
|
.arg(&(buffers.nz as i32))
|
||||||
.launch(config)
|
.launch(config)
|
||||||
.map_err(|e| CfdError::gpu_error(&format!("Collision kernel launch failed: {}", e)))?;
|
.map_err(|e| CfdError::gpu_error(&format!("Collision kernel launch failed: {}", e)))?;
|
||||||
|
}
|
||||||
|
|
||||||
self.kernel_manager.synchronize()?;
|
self.kernel_manager.synchronize()?;
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -436,6 +438,7 @@ __global__ void d3q19_bounce_back_boundaries(
|
|||||||
shared_mem_bytes: 0,
|
shared_mem_bytes: 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
unsafe {
|
||||||
self.kernel_manager
|
self.kernel_manager
|
||||||
.stream()
|
.stream()
|
||||||
.launch_builder(&func)
|
.launch_builder(&func)
|
||||||
@@ -446,6 +449,7 @@ __global__ void d3q19_bounce_back_boundaries(
|
|||||||
.arg(&(buffers.nz as i32))
|
.arg(&(buffers.nz as i32))
|
||||||
.launch(config)
|
.launch(config)
|
||||||
.map_err(|e| CfdError::gpu_error(&format!("Streaming kernel launch failed: {}", e)))?;
|
.map_err(|e| CfdError::gpu_error(&format!("Streaming kernel launch failed: {}", e)))?;
|
||||||
|
}
|
||||||
|
|
||||||
// Swap buffers: f = f_temp
|
// Swap buffers: f = f_temp
|
||||||
// In real implementation, would swap buffer pointers
|
// In real implementation, would swap buffer pointers
|
||||||
@@ -483,6 +487,7 @@ __global__ void d3q19_bounce_back_boundaries(
|
|||||||
shared_mem_bytes: 0,
|
shared_mem_bytes: 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
unsafe {
|
||||||
self.kernel_manager
|
self.kernel_manager
|
||||||
.stream()
|
.stream()
|
||||||
.launch_builder(&func)
|
.launch_builder(&func)
|
||||||
@@ -501,6 +506,7 @@ __global__ void d3q19_bounce_back_boundaries(
|
|||||||
e
|
e
|
||||||
))
|
))
|
||||||
})?;
|
})?;
|
||||||
|
}
|
||||||
|
|
||||||
self.kernel_manager.synchronize()?;
|
self.kernel_manager.synchronize()?;
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -531,6 +537,7 @@ __global__ void d3q19_bounce_back_boundaries(
|
|||||||
shared_mem_bytes: 0,
|
shared_mem_bytes: 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
unsafe {
|
||||||
self.kernel_manager
|
self.kernel_manager
|
||||||
.stream()
|
.stream()
|
||||||
.launch_builder(&func)
|
.launch_builder(&func)
|
||||||
@@ -546,6 +553,7 @@ __global__ void d3q19_bounce_back_boundaries(
|
|||||||
.map_err(|e| {
|
.map_err(|e| {
|
||||||
CfdError::gpu_error(&format!("Equilibrium kernel launch failed: {}", e))
|
CfdError::gpu_error(&format!("Equilibrium kernel launch failed: {}", e))
|
||||||
})?;
|
})?;
|
||||||
|
}
|
||||||
|
|
||||||
self.kernel_manager.synchronize()?;
|
self.kernel_manager.synchronize()?;
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -575,6 +583,7 @@ __global__ void d3q19_bounce_back_boundaries(
|
|||||||
shared_mem_bytes: 0,
|
shared_mem_bytes: 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
unsafe {
|
||||||
self.kernel_manager
|
self.kernel_manager
|
||||||
.stream()
|
.stream()
|
||||||
.launch_builder(&func)
|
.launch_builder(&func)
|
||||||
@@ -584,6 +593,7 @@ __global__ void d3q19_bounce_back_boundaries(
|
|||||||
.arg(&(buffers.nz as i32))
|
.arg(&(buffers.nz as i32))
|
||||||
.launch(config)
|
.launch(config)
|
||||||
.map_err(|e| CfdError::gpu_error(&format!("Boundary kernel launch failed: {}", e)))?;
|
.map_err(|e| CfdError::gpu_error(&format!("Boundary kernel launch failed: {}", e)))?;
|
||||||
|
}
|
||||||
|
|
||||||
self.kernel_manager.synchronize()?;
|
self.kernel_manager.synchronize()?;
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -628,6 +638,7 @@ __global__ void d3q19_bounce_back_boundaries(
|
|||||||
shared_mem_bytes: 0,
|
shared_mem_bytes: 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
unsafe {
|
||||||
self.kernel_manager
|
self.kernel_manager
|
||||||
.stream()
|
.stream()
|
||||||
.launch_builder(&func)
|
.launch_builder(&func)
|
||||||
@@ -643,6 +654,7 @@ __global__ void d3q19_bounce_back_boundaries(
|
|||||||
.map_err(|e| {
|
.map_err(|e| {
|
||||||
CfdError::gpu_error(&format!("Initialization kernel launch failed: {}", e))
|
CfdError::gpu_error(&format!("Initialization kernel launch failed: {}", e))
|
||||||
})?;
|
})?;
|
||||||
|
}
|
||||||
|
|
||||||
self.kernel_manager.synchronize()?;
|
self.kernel_manager.synchronize()?;
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -771,6 +783,7 @@ mod tests {
|
|||||||
viscosity: 0.01,
|
viscosity: 0.01,
|
||||||
density: 1.0,
|
density: 1.0,
|
||||||
device_id: 0,
|
device_id: 0,
|
||||||
|
..CfdConfig::default()
|
||||||
};
|
};
|
||||||
|
|
||||||
let params = D3Q19Parameters::default();
|
let params = D3Q19Parameters::default();
|
||||||
@@ -799,6 +812,7 @@ mod tests {
|
|||||||
viscosity: 0.01,
|
viscosity: 0.01,
|
||||||
density: 1.0,
|
density: 1.0,
|
||||||
device_id: 0,
|
device_id: 0,
|
||||||
|
..CfdConfig::default()
|
||||||
};
|
};
|
||||||
|
|
||||||
let params = D3Q19Parameters::default();
|
let params = D3Q19Parameters::default();
|
||||||
@@ -839,6 +853,7 @@ mod tests {
|
|||||||
viscosity: 0.01,
|
viscosity: 0.01,
|
||||||
density: 1.0,
|
density: 1.0,
|
||||||
device_id: 0,
|
device_id: 0,
|
||||||
|
..CfdConfig::default()
|
||||||
};
|
};
|
||||||
|
|
||||||
let params = D3Q19Parameters::default();
|
let params = D3Q19Parameters::default();
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ impl KEpsilonGpuModel {
|
|||||||
|
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
kernel_manager,
|
kernel_manager,
|
||||||
constants: KEpsilonConstants::default(),
|
constants: KEpsilonConstants::standard(),
|
||||||
k_epsilon_module: None,
|
k_epsilon_module: None,
|
||||||
gpu_buffers: None,
|
gpu_buffers: None,
|
||||||
})
|
})
|
||||||
@@ -89,7 +89,7 @@ impl KEpsilonGpuModel {
|
|||||||
fn load_k_epsilon_kernels(&mut self) -> CfdResult<()> {
|
fn load_k_epsilon_kernels(&mut self) -> CfdResult<()> {
|
||||||
// In real implementation, would compile or load PTX for k-epsilon kernels
|
// In real implementation, would compile or load PTX for k-epsilon kernels
|
||||||
// For now, load from kernel manager
|
// For now, load from kernel manager
|
||||||
self.k_epsilon_module = Some(self.kernel_manager.get_module("k_epsilon_kernels")?);
|
self.k_epsilon_module = Some(self.kernel_manager.get_module("k_epsilon_kernels")?.clone());
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -140,12 +140,12 @@ impl KEpsilonGpuModel {
|
|||||||
let epsilon_host = vec![epsilon_init; n];
|
let epsilon_host = vec![epsilon_init; n];
|
||||||
|
|
||||||
self.kernel_manager
|
self.kernel_manager
|
||||||
.stream
|
.stream()
|
||||||
.memcpy_htod(&mut buffers.k, &k_host)
|
.memcpy_htod(&k_host, &mut buffers.k)
|
||||||
.map_err(|e| CfdError::gpu_error(&format!("Failed to copy k to GPU: {}", e)))?;
|
.map_err(|e| CfdError::gpu_error(&format!("Failed to copy k to GPU: {}", e)))?;
|
||||||
self.kernel_manager
|
self.kernel_manager
|
||||||
.stream
|
.stream()
|
||||||
.memcpy_htod(&mut buffers.epsilon, &epsilon_host)
|
.memcpy_htod(&epsilon_host, &mut buffers.epsilon)
|
||||||
.map_err(|e| CfdError::gpu_error(&format!("Failed to copy epsilon to GPU: {}", e)))?;
|
.map_err(|e| CfdError::gpu_error(&format!("Failed to copy epsilon to GPU: {}", e)))?;
|
||||||
|
|
||||||
self.kernel_manager.synchronize()?;
|
self.kernel_manager.synchronize()?;
|
||||||
@@ -187,6 +187,7 @@ impl KEpsilonGpuModel {
|
|||||||
shared_mem_bytes: 0,
|
shared_mem_bytes: 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
unsafe {
|
||||||
unsafe {
|
unsafe {
|
||||||
self.kernel_manager
|
self.kernel_manager
|
||||||
.stream()
|
.stream()
|
||||||
@@ -214,6 +215,7 @@ impl KEpsilonGpuModel {
|
|||||||
CfdError::gpu_error(&format!("Velocity gradients kernel launch failed: {}", e))
|
CfdError::gpu_error(&format!("Velocity gradients kernel launch failed: {}", e))
|
||||||
})?;
|
})?;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self.kernel_manager.synchronize()?;
|
self.kernel_manager.synchronize()?;
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -246,6 +248,7 @@ impl KEpsilonGpuModel {
|
|||||||
shared_mem_bytes: 0,
|
shared_mem_bytes: 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
unsafe {
|
||||||
unsafe {
|
unsafe {
|
||||||
self.kernel_manager
|
self.kernel_manager
|
||||||
.stream()
|
.stream()
|
||||||
@@ -262,6 +265,7 @@ impl KEpsilonGpuModel {
|
|||||||
CfdError::gpu_error(&format!("Eddy viscosity kernel launch failed: {}", e))
|
CfdError::gpu_error(&format!("Eddy viscosity kernel launch failed: {}", e))
|
||||||
})?;
|
})?;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self.kernel_manager.synchronize()?;
|
self.kernel_manager.synchronize()?;
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -292,6 +296,7 @@ impl KEpsilonGpuModel {
|
|||||||
shared_mem_bytes: 0,
|
shared_mem_bytes: 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
unsafe {
|
||||||
unsafe {
|
unsafe {
|
||||||
self.kernel_manager
|
self.kernel_manager
|
||||||
.stream()
|
.stream()
|
||||||
@@ -315,6 +320,7 @@ impl KEpsilonGpuModel {
|
|||||||
CfdError::gpu_error(&format!("Production kernel launch failed: {}", e))
|
CfdError::gpu_error(&format!("Production kernel launch failed: {}", e))
|
||||||
})?;
|
})?;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self.kernel_manager.synchronize()?;
|
self.kernel_manager.synchronize()?;
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -347,6 +353,7 @@ impl KEpsilonGpuModel {
|
|||||||
shared_mem_bytes: 0,
|
shared_mem_bytes: 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
unsafe {
|
||||||
unsafe {
|
unsafe {
|
||||||
self.kernel_manager
|
self.kernel_manager
|
||||||
.stream()
|
.stream()
|
||||||
@@ -355,8 +362,8 @@ impl KEpsilonGpuModel {
|
|||||||
.arg(&buffers.epsilon)
|
.arg(&buffers.epsilon)
|
||||||
.arg(&buffers.production)
|
.arg(&buffers.production)
|
||||||
.arg(&mut buffers.source_epsilon)
|
.arg(&mut buffers.source_epsilon)
|
||||||
.arg(&self.constants.c_e1)
|
.arg(&self.constants.c1_epsilon)
|
||||||
.arg(&self.constants.c_e2)
|
.arg(&self.constants.c2_epsilon)
|
||||||
.arg(&(buffers.nx as i32))
|
.arg(&(buffers.nx as i32))
|
||||||
.arg(&(buffers.ny as i32))
|
.arg(&(buffers.ny as i32))
|
||||||
.arg(&(buffers.nz as i32))
|
.arg(&(buffers.nz as i32))
|
||||||
@@ -365,6 +372,7 @@ impl KEpsilonGpuModel {
|
|||||||
CfdError::gpu_error(&format!("Epsilon source kernel launch failed: {}", e))
|
CfdError::gpu_error(&format!("Epsilon source kernel launch failed: {}", e))
|
||||||
})?;
|
})?;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self.kernel_manager.synchronize()?;
|
self.kernel_manager.synchronize()?;
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -399,6 +407,7 @@ impl KEpsilonGpuModel {
|
|||||||
shared_mem_bytes: 0,
|
shared_mem_bytes: 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
unsafe {
|
||||||
unsafe {
|
unsafe {
|
||||||
self.kernel_manager
|
self.kernel_manager
|
||||||
.stream()
|
.stream()
|
||||||
@@ -413,13 +422,14 @@ impl KEpsilonGpuModel {
|
|||||||
.arg(&dt)
|
.arg(&dt)
|
||||||
.arg(&nu)
|
.arg(&nu)
|
||||||
.arg(&self.constants.sigma_k)
|
.arg(&self.constants.sigma_k)
|
||||||
.arg(&self.constants.sigma_e)
|
.arg(&self.constants.sigma_epsilon)
|
||||||
.arg(&(buffers.nx as i32))
|
.arg(&(buffers.nx as i32))
|
||||||
.arg(&(buffers.ny as i32))
|
.arg(&(buffers.ny as i32))
|
||||||
.arg(&(buffers.nz as i32))
|
.arg(&(buffers.nz as i32))
|
||||||
.launch(config)
|
.launch(config)
|
||||||
.map_err(|e| CfdError::gpu_error(&format!("Update kernel launch failed: {}", e)))?;
|
.map_err(|e| CfdError::gpu_error(&format!("Update kernel launch failed: {}", e)))?;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self.kernel_manager.synchronize()?;
|
self.kernel_manager.synchronize()?;
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -436,7 +446,7 @@ impl KEpsilonGpuModel {
|
|||||||
let mut eddy_viscosity_host = vec![0.0f32; n];
|
let mut eddy_viscosity_host = vec![0.0f32; n];
|
||||||
|
|
||||||
self.kernel_manager
|
self.kernel_manager
|
||||||
.stream
|
.stream()
|
||||||
.memcpy_dtoh(&mut eddy_viscosity_host, &buffers.eddy_viscosity)
|
.memcpy_dtoh(&mut eddy_viscosity_host, &buffers.eddy_viscosity)
|
||||||
.map_err(|e| {
|
.map_err(|e| {
|
||||||
CfdError::gpu_error(&format!("Failed to copy eddy viscosity from GPU: {}", e))
|
CfdError::gpu_error(&format!("Failed to copy eddy viscosity from GPU: {}", e))
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ impl SmagorinskyGpuModel {
|
|||||||
|
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
kernel_manager,
|
kernel_manager,
|
||||||
constants: SmagorinskyConstants::default(),
|
constants: SmagorinskyConstants::standard(),
|
||||||
smagorinsky_module: None,
|
smagorinsky_module: None,
|
||||||
gpu_buffers: None,
|
gpu_buffers: None,
|
||||||
})
|
})
|
||||||
@@ -80,7 +80,7 @@ impl SmagorinskyGpuModel {
|
|||||||
/// Load and compile Smagorinsky CUDA kernels
|
/// Load and compile Smagorinsky CUDA kernels
|
||||||
fn load_smagorinsky_kernels(&mut self) -> CfdResult<()> {
|
fn load_smagorinsky_kernels(&mut self) -> CfdResult<()> {
|
||||||
// In real implementation, would compile or load PTX for Smagorinsky kernels
|
// In real implementation, would compile or load PTX for Smagorinsky kernels
|
||||||
self.smagorinsky_module = Some(self.kernel_manager.get_module("smagorinsky_kernels")?);
|
self.smagorinsky_module = Some(self.kernel_manager.get_module("smagorinsky_kernels")?.clone());
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -137,6 +137,7 @@ impl SmagorinskyGpuModel {
|
|||||||
shared_mem_bytes: 0,
|
shared_mem_bytes: 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
unsafe {
|
||||||
unsafe {
|
unsafe {
|
||||||
self.kernel_manager
|
self.kernel_manager
|
||||||
.stream()
|
.stream()
|
||||||
@@ -153,6 +154,7 @@ impl SmagorinskyGpuModel {
|
|||||||
CfdError::gpu_error(&format!("Filter width kernel launch failed: {}", e))
|
CfdError::gpu_error(&format!("Filter width kernel launch failed: {}", e))
|
||||||
})?;
|
})?;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self.kernel_manager.synchronize()?;
|
self.kernel_manager.synchronize()?;
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -215,6 +217,7 @@ impl SmagorinskyGpuModel {
|
|||||||
shared_mem_bytes: 0,
|
shared_mem_bytes: 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
unsafe {
|
||||||
unsafe {
|
unsafe {
|
||||||
self.kernel_manager
|
self.kernel_manager
|
||||||
.stream()
|
.stream()
|
||||||
@@ -242,6 +245,7 @@ impl SmagorinskyGpuModel {
|
|||||||
CfdError::gpu_error(&format!("Velocity gradients kernel launch failed: {}", e))
|
CfdError::gpu_error(&format!("Velocity gradients kernel launch failed: {}", e))
|
||||||
})?;
|
})?;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@@ -273,6 +277,7 @@ impl SmagorinskyGpuModel {
|
|||||||
shared_mem_bytes: 0,
|
shared_mem_bytes: 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
unsafe {
|
||||||
unsafe {
|
unsafe {
|
||||||
self.kernel_manager
|
self.kernel_manager
|
||||||
.stream()
|
.stream()
|
||||||
@@ -295,6 +300,7 @@ impl SmagorinskyGpuModel {
|
|||||||
CfdError::gpu_error(&format!("Strain rate kernel launch failed: {}", e))
|
CfdError::gpu_error(&format!("Strain rate kernel launch failed: {}", e))
|
||||||
})?;
|
})?;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@@ -324,6 +330,7 @@ impl SmagorinskyGpuModel {
|
|||||||
shared_mem_bytes: 0,
|
shared_mem_bytes: 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
unsafe {
|
||||||
unsafe {
|
unsafe {
|
||||||
self.kernel_manager
|
self.kernel_manager
|
||||||
.stream()
|
.stream()
|
||||||
@@ -340,6 +347,7 @@ impl SmagorinskyGpuModel {
|
|||||||
CfdError::gpu_error(&format!("SGS viscosity kernel launch failed: {}", e))
|
CfdError::gpu_error(&format!("SGS viscosity kernel launch failed: {}", e))
|
||||||
})?;
|
})?;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self.kernel_manager.synchronize()?;
|
self.kernel_manager.synchronize()?;
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -356,7 +364,7 @@ impl SmagorinskyGpuModel {
|
|||||||
let mut sgs_viscosity_host = vec![0.0f32; n];
|
let mut sgs_viscosity_host = vec![0.0f32; n];
|
||||||
|
|
||||||
self.kernel_manager
|
self.kernel_manager
|
||||||
.stream
|
.stream()
|
||||||
.memcpy_dtoh(&buffers.sgs_viscosity, &mut sgs_viscosity_host)
|
.memcpy_dtoh(&buffers.sgs_viscosity, &mut sgs_viscosity_host)
|
||||||
.map_err(|e| {
|
.map_err(|e| {
|
||||||
CfdError::gpu_error(&format!("Failed to copy SGS viscosity from GPU: {}", e))
|
CfdError::gpu_error(&format!("Failed to copy SGS viscosity from GPU: {}", e))
|
||||||
|
|||||||
Reference in New Issue
Block a user