Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
5664f7e
Trait draft for adding optimized subset_ops
SallySoul Apr 21, 2025
5d0ab3d
notes
SallySoul Jun 11, 2025
e512ad1
I think 1d is good
SallySoul Jun 12, 2025
504eacb
Move dim specific subset ops into separate files, add 2d
SallySoul Jun 12, 2025
e9b2bec
Oops forgot to add new files, but 3d is also done, there ya go
SallySoul Jun 12, 2025
fe92cf2
Hooked subset ops up to ap solver
SallySoul Jun 12, 2025
8e091e8
Comment out something
SallySoul Jun 12, 2025
05eceed
Merge branch 'main' into dev/rb/optimize_subset_ops
SallySoul Jun 12, 2025
f642da8
Fix rotating example
SallySoul Jun 12, 2025
3fb8ddd
Merge branch 'main' into dev/rb/optimize_subset_ops
SallySoul Jun 13, 2025
38a3e61
Add profiling scopes for subset ops
SallySoul Jun 13, 2025
249cd7c
plumb in threads to subset ops
SallySoul Jun 13, 2025
f0ef7c3
Fix tests, thread 2d
SallySoul Jun 14, 2025
c91177c
Misc things while profiling
SallySoul Jun 14, 2025
61f91d6
Merge branch 'main' into dev/rb/optimize_subset_ops
SallySoul Jun 16, 2025
71ab87e
Merge fixes
SallySoul Jun 16, 2025
3afcb2e
Formatting
SallySoul Jun 16, 2025
6fb94ee
I think 2d subset ops is clearly better
SallySoul Jun 16, 2025
852fac6
Merge branch 'main' into dev/rb/optimize_subset_ops
SallySoul Jun 21, 2025
1f5c0fe
I think this unified copy op is the way to go
SallySoul Jun 23, 2025
170269e
I think we've cracked it, now to cleanup and get the other two up to …
SallySoul Jun 23, 2025
8a68334
Have other subset ops updates, need to test some examples
SallySoul Jun 23, 2025
47f0f39
Add print statement
SallySoul Jun 23, 2025
7e6fa32
Merge branch 'main' into dev/rb/optimize_subset_ops
SallySoul Jun 24, 2025
888f63a
Merge branch 'main' into dev/rb/optimize_subset_ops
SallySoul Jun 24, 2025
b09faf3
I think this PR is all but there, however its too hot right now for m…
SallySoul Jun 24, 2025
fbbf622
minor tweaks
SallySoul Jun 25, 2025
af63da8
Merge branch 'main' into dev/rb/optimize_subset_ops
SallySoul Jun 25, 2025
65e00e4
Check this in, on to other things
SallySoul Jun 25, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion examples/heat_1d_ap_fft.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ fn main() {
// Create AP Solver
let solver_params = args.solver_parameters();
let mut solver =
generate_ap_solver(&stencil, direct_solver, &solver_params);
generate_ap_solver_1d(&stencil, direct_solver, &solver_params);

args.run_solver(&mut solver);
}
2 changes: 1 addition & 1 deletion examples/heat_2d_ap_fft.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ fn main() {
// Create AP Solver
let solver_params = args.solver_parameters();
let mut solver =
generate_ap_solver(&stencil, direct_solver, &solver_params);
generate_ap_solver_2d(&stencil, direct_solver, &solver_params);

args.run_solver(&mut solver);
}
4 changes: 2 additions & 2 deletions examples/heat_3d_ap_fft.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@ fn main() {
};

// Create AP Solver
let solver_parameters = args.solver_parameters();
let solver_params = args.solver_parameters();
let mut solver =
generate_ap_solver(&stencil, direct_solver, &solver_parameters);
generate_ap_solver_3d(&stencil, direct_solver, &solver_params);

args.run_solver(&mut solver);
}
2 changes: 1 addition & 1 deletion examples/tv_heat_1d_ap_fft.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ fn main() {
// Create AP Solver
let solver_params = args.solver_parameters();
let mut solver =
generate_tv_ap_solver(&stencil, direct_solver, &solver_params);
generate_tv_ap_solver_1d(&stencil, direct_solver, &solver_params);

args.run_solver(&mut solver);
}
2 changes: 1 addition & 1 deletion examples/tv_heat_2d_ap_fft.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ fn main() {
// Create AP Solver
let solver_params = args.solver_parameters();
let mut solver =
generate_tv_ap_solver(&stencil, direct_solver, &solver_params);
generate_tv_ap_solver_2d(&stencil, direct_solver, &solver_params);

args.run_solver(&mut solver);
}
2 changes: 1 addition & 1 deletion examples/tv_rotating_2d.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ fn main() {
// Create AP Solver
let solver_params = args.solver_parameters();
let mut solver =
generate_tv_ap_solver(&stencil, direct_solver, &solver_params);
generate_tv_ap_solver_2d(&stencil, direct_solver, &solver_params);

args.run_solver(&mut solver);
}
113 changes: 99 additions & 14 deletions src/ap_solver/generate_solver.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,37 +5,122 @@ use crate::ap_solver::solver::*;
use crate::ap_solver::solver_parameters::*;
use crate::ap_solver::tv_periodic_ops_collector::*;
use crate::direct_solver::*;
use crate::domain::*;
use crate::stencil::*;
use crate::SolverInterface;

pub fn generate_ap_solver<
const GRID_DIMENSION: usize,
pub fn generate_ap_solver_1d<
const NEIGHBORHOOD_SIZE: usize,
DirectSolverType: DirectSolverInterface<GRID_DIMENSION>,
DirectSolverType: DirectSolverInterface<1>,
>(
stencil: &Stencil<GRID_DIMENSION, NEIGHBORHOOD_SIZE>,
stencil: &Stencil<1, NEIGHBORHOOD_SIZE>,
direct_solver: DirectSolverType,
params: &SolverParameters<GRID_DIMENSION>,
) -> impl SolverInterface<GRID_DIMENSION> {
params: &SolverParameters<1>,
) -> impl SolverInterface<1> {
let create_ops_builder = || ApPeriodicOpsBuilder::new(stencil, params);
let planner_result = generate_plan(stencil, create_ops_builder, params);
let complex_buffer_type = ComplexBufferType::DomainOnly;
Solver::new(direct_solver, params, planner_result, complex_buffer_type)
let subset_ops = SubsetOps1d {};
Solver::new(
direct_solver,
subset_ops,
params,
planner_result,
complex_buffer_type,
)
}

pub fn generate_tv_ap_solver<
pub fn generate_ap_solver_2d<
const NEIGHBORHOOD_SIZE: usize,
DirectSolverType: DirectSolverInterface<2>,
>(
stencil: &Stencil<2, NEIGHBORHOOD_SIZE>,
direct_solver: DirectSolverType,
params: &SolverParameters<2>,
) -> impl SolverInterface<2> {
let create_ops_builder = || ApPeriodicOpsBuilder::new(stencil, params);
let planner_result = generate_plan(stencil, create_ops_builder, params);
let complex_buffer_type = ComplexBufferType::DomainOnly;
let subset_ops = SubsetOps2d {
chunk_size: params.chunk_size,
};
Solver::new(
direct_solver,
subset_ops,
params,
planner_result,
complex_buffer_type,
)
}

pub fn generate_ap_solver_3d<
const NEIGHBORHOOD_SIZE: usize,
DirectSolverType: DirectSolverInterface<3>,
>(
stencil: &Stencil<3, NEIGHBORHOOD_SIZE>,
direct_solver: DirectSolverType,
params: &SolverParameters<3>,
) -> impl SolverInterface<3> {
let create_ops_builder = || ApPeriodicOpsBuilder::new(stencil, params);
let planner_result = generate_plan(stencil, create_ops_builder, params);
let complex_buffer_type = ComplexBufferType::DomainOnly;
let subset_ops = SubsetOps3d {
chunk_size: params.chunk_size,
task_min: params.task_min,
};
Solver::new(
direct_solver,
subset_ops,
params,
planner_result,
complex_buffer_type,
)
}

pub fn generate_tv_ap_solver_1d<
'a,
const NEIGHBORHOOD_SIZE: usize,
StencilType: TVStencil<1, NEIGHBORHOOD_SIZE>,
DirectSolverType: DirectSolverInterface<1> + 'a,
>(
stencil: &'a StencilType,
direct_solver: DirectSolverType,
params: &'a SolverParameters<1>,
) -> impl SolverInterface<1> + 'a {
let create_ops_builder = || TvPeriodicOpsCollector::new(stencil, params);
let planner_result = generate_plan(stencil, create_ops_builder, params);
let complex_buffer_type = ComplexBufferType::DomainAndOp;
let subset_ops = SubsetOps1d {};
Solver::new(
direct_solver,
subset_ops,
params,
planner_result,
complex_buffer_type,
)
}

pub fn generate_tv_ap_solver_2d<
'a,
const GRID_DIMENSION: usize,
const NEIGHBORHOOD_SIZE: usize,
StencilType: TVStencil<GRID_DIMENSION, NEIGHBORHOOD_SIZE>,
DirectSolverType: DirectSolverInterface<GRID_DIMENSION> + 'a,
StencilType: TVStencil<2, NEIGHBORHOOD_SIZE>,
DirectSolverType: DirectSolverInterface<2> + 'a,
>(
stencil: &'a StencilType,
direct_solver: DirectSolverType,
params: &'a SolverParameters<GRID_DIMENSION>,
) -> impl SolverInterface<GRID_DIMENSION> + 'a {
params: &'a SolverParameters<2>,
) -> impl SolverInterface<2> + 'a {
let create_ops_builder = || TvPeriodicOpsCollector::new(stencil, params);
let planner_result = generate_plan(stencil, create_ops_builder, params);
let complex_buffer_type = ComplexBufferType::DomainAndOp;
Solver::new(direct_solver, params, planner_result, complex_buffer_type)
let subset_ops = SubsetOps2d {
chunk_size: params.chunk_size,
};
Solver::new(
direct_solver,
subset_ops,
params,
planner_result,
complex_buffer_type,
)
}
Loading
Loading