Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
33 changes: 26 additions & 7 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:
- run: cargo fmt --all -- --check

unit-tests:
name: Tests - ${{ matrix.os }} - ${{ matrix.toolchain }} - ${{ matrix.llvm[0] }}
name: Tests - ${{ matrix.os }} - ${{ matrix.toolchain }} - ${{ matrix.llvm[0] }} - ${{ matrix.features }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
Expand All @@ -37,13 +37,17 @@ jobs:
- stable
os:
- ubuntu-latest
features:
- "rayon cranelift"
include:
- toolchain: stable
os: windows-latest
llvm: ""
features: "rayon cranelift"
- toolchain: stable
os: macos-latest
llvm: ["16.0", "16-0"]
features: "rayon cranelift"
#- toolchain: stable
# os: ubuntu-24.04-arm
# llvm: ["16.0", "16-0"]
Expand All @@ -53,9 +57,24 @@ jobs:
- toolchain: beta
os: ubuntu-latest
llvm: ["16.0", "16-0"]
features: "rayon cranelift"
- toolchain: nightly
os: ubuntu-latest
llvm: ["16.0", "16-0"]
features: "rayon cranelift"
- toolchain: stable
os: ubuntu-latest
llvm: ""
features: ""
- toolchain: stable
os: ubuntu-latest
llvm: ""
features: "rayon"
- toolchain: stable
os: ubuntu-latest
llvm: ""
features: "cranelift"



steps:
Expand All @@ -67,14 +86,14 @@ jobs:
path: |
${{ env.CARGO_HOME }}
target
key: unit-test-${{ runner.os }}-${{ matrix.toolchain}}-${{ matrix.llvm }}
key: unit-test-${{ runner.os }}-${{ matrix.toolchain}}-${{ matrix.llvm }}-${{ matrix.features }}
- name: Set up Rust
run: rustup default ${{ matrix.toolchain }} && rustup update ${{ matrix.toolchain }} --no-self-update && rustup component add clippy rust-docs
- name: Rust version
run: rustc -Vv
- name: Install LLVM and Clang
uses: KyleMayes/install-llvm-action@v2
if : matrix.os == 'ubuntu-latest' || matrix.os == 'macos-latest' || matrix.os == 'ubuntu-24.04-arm'
if : matrix.llvm != '' && (matrix.os == 'ubuntu-latest' || matrix.os == 'macos-latest' || matrix.os == 'ubuntu-24.04-arm')
with:
version: ${{ matrix.llvm[0] }}
- name: Install LLVM 16 (macos-13)
Expand All @@ -83,16 +102,16 @@ jobs:
brew install llvm@16
- name: Run tests (LLVM)
if : matrix.llvm != ''
run: cargo test --verbose --features llvm${{ matrix.llvm[1] }} --features cranelift
run: cargo test --verbose --features llvm${{ matrix.llvm[1] }} --features "${{ matrix.features }}"
- name: Run tests
if : matrix.llvm == ''
run: cargo test --verbose --features cranelift
run: cargo test --verbose --features "${{ matrix.features }}"
- name: Run Clippy (LLVM)
if: matrix.toolchain == 'nightly'
run: cargo clippy --verbose --features llvm${{ matrix.llvm[1] }} --features cranelift
run: cargo clippy --verbose --features llvm${{ matrix.llvm[1] }} --features "${{ matrix.features }}"
- name: Run Docs (LLVM)
if: matrix.toolchain == 'nightly'
run: cargo rustdoc --features llvm${{ matrix.llvm[1] }} --features cranelift
run: cargo rustdoc --features llvm${{ matrix.llvm[1] }} --features "${{ matrix.features }}"
book:
runs-on: ubuntu-latest
steps:
Expand Down
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ repository = "https://github.com/martinjrobins/diffsl"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[features]
default = ["rayon"]
default = []
llvm15-0 = ["inkwell-150", "llvm-sys-150", "llvm", "enzyme"]
llvm16-0 = ["inkwell-160", "llvm-sys-160", "llvm", "enzyme"]
llvm17-0 = ["inkwell-170", "llvm-sys-170", "llvm", "enzyme"]
Expand Down
36 changes: 9 additions & 27 deletions src/execution/compiler.rs
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,7 @@ impl<M: CodegenModule> Compiler<M> {
}
}

#[cfg(feature = "rayon")]
fn with_threading<F>(&self, f: F)
where
F: Fn(u32, u32) + Sync + Send,
Expand All @@ -278,7 +279,13 @@ impl<M: CodegenModule> Compiler<M> {
} else {
f(0, 1);
}
#[cfg(not(feature = "rayon"))]
}

#[cfg(not(feature = "rayon"))]
fn with_threading<F>(&self, f: F)
where
F: Fn(u32, u32),
{
f(0, 1);
}

Expand Down Expand Up @@ -864,15 +871,11 @@ impl<M: CodegenModule> Compiler<M> {
mod tests {
use crate::{
discretise::DiscreteModel,
execution::module::{
CodegenModule, CodegenModuleCompile, CodegenModuleEmit, CodegenModuleJit,
},
execution::module::{CodegenModule, CodegenModuleCompile, CodegenModuleJit},
parser::parse_ds_string,
Compiler,
};
use approx::assert_relative_eq;
use std::io::Write;
use target_lexicon::triple;

use super::CompilerMode;

Expand Down Expand Up @@ -1096,24 +1099,6 @@ mod tests {
.unwrap();
}

#[allow(dead_code)]
fn write_to_wasm<M: CodegenModuleCompile + CodegenModuleEmit>(
discrete_model: &DiscreteModel,
filename: &str,
mode: CompilerMode,
) {
let module = M::from_discrete_model(
discrete_model,
mode,
Some(triple!("wasm32-unknown-unknown")),
)
.unwrap();
let buffer = module.to_object().unwrap();
let full_filename = format!("test_output/{filename}.wasm");
let mut file = std::fs::File::create(full_filename.as_str()).unwrap();
file.write_all(&buffer).unwrap();
}

#[allow(dead_code)]
fn tensor_test_common<T: CodegenModuleCompile + CodegenModuleJit>(
discrete_model: &DiscreteModel,
Expand Down Expand Up @@ -1364,7 +1349,6 @@ mod tests {
#[cfg(feature = "llvm")]
{
use crate::execution::llvm::codegen::LlvmModule;
write_to_wasm::<LlvmModule>(&discrete_model, concat!(stringify!($name),"_llvm"), CompilerMode::SingleThreaded);
let results = tensor_test_common::<LlvmModule>(&discrete_model, $tensor_name, CompilerMode::SingleThreaded);
assert_relative_eq!(results[0].as_slice(), $expected_value.as_slice());
}
Expand Down Expand Up @@ -1567,7 +1551,6 @@ mod tests {
#[cfg(feature = "llvm")]
{
use crate::execution::llvm::codegen::LlvmModule;
write_to_wasm::<LlvmModule>(&discrete_model, concat!(stringify!($name),"_llvm"), CompilerMode::SingleThreaded);
let results = tensor_test_common::<LlvmModule>(&discrete_model, $tensor_name, CompilerMode::SingleThreaded);
assert_relative_eq!(results[1].as_slice(), $expected_grad.as_slice());
assert_relative_eq!(results[2].as_slice(), $expected_rgrad.as_slice());
Expand Down Expand Up @@ -1651,7 +1634,6 @@ mod tests {
#[cfg(feature = "llvm")]
{
use crate::execution::llvm::codegen::LlvmModule;
write_to_wasm::<LlvmModule>(&discrete_model, concat!(stringify!($name),"_llvm"), CompilerMode::SingleThreaded);
let results = tensor_test_common::<LlvmModule>(&discrete_model, $tensor_name, CompilerMode::SingleThreaded);
assert_relative_eq!(results[0].as_slice(), $expected_value.as_slice());
assert_relative_eq!(results[1].as_slice(), $expected_grad.as_slice());
Expand Down
4 changes: 4 additions & 0 deletions src/execution/module.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,12 @@ use crate::discretise::DiscreteModel;

use super::compiler::CompilerMode;

#[cfg(feature = "rayon")]
pub trait CodegenModule: Sized + Sync {}

#[cfg(not(feature = "rayon"))]
pub trait CodegenModule: Sized {}

pub trait CodegenModuleCompile: CodegenModule {
fn from_discrete_model(
model: &DiscreteModel,
Expand Down