Skip to content

Commit 30dce98

Browse files
authored
fix: check --all-features option in CI and fix identified issues (#323)
* ci: add new step for build and test workflows with `--all-features` option * fix: remove nightly feature `stdsimd` (does not exist anymore?) * fix: update pointer type conversion for avx512 usage this needs testing, the `*mut i64` conversions seem very weird to me, but the original `*mut u8` also were... * fix: remove default `avx512` feature my mistake, I added it for the lsp to diagnostic correctly * fix: add missing error handling to metis graph init * fix: add correct option to CI also, don't run tests with all features since there's no avx512 on regular GH runners
1 parent 6abd08f commit 30dce98

4 files changed

Lines changed: 30 additions & 29 deletions

File tree

.github/workflows/ci.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ jobs:
2424
- uses: Swatinem/rust-cache@v2
2525
- name: Install dependencies
2626
run: sudo apt-get -y install libclang-dev libmetis-dev libscotch-dev
27-
- name: Run tests
27+
- name: Run tests (default features)
2828
run: cargo test --all
2929

3030
fmt:
@@ -78,5 +78,7 @@ jobs:
7878
- uses: Swatinem/rust-cache@v2
7979
- name: Install dependencies
8080
run: sudo apt-get -y install libclang-dev libmetis-dev libscotch-dev
81-
- name: Build crates
81+
- name: Build crates (default features)
8282
run: cargo build --all-targets
83+
- name: Build crates (all features)
84+
run: cargo build --all-targets --all-features

coupe/src/algorithms/recursive_bisection.rs

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -251,18 +251,18 @@ fn reorder_split_avx512<const D: usize, W>(
251251

252252
for coord in 0..D {
253253
_mm256_mask_compressstoreu_ps(
254-
items.points[coord].as_mut_ptr().add(lw) as *mut u8,
254+
items.points[coord].as_mut_ptr().add(lw),
255255
mask,
256256
val[coord],
257257
);
258258
}
259259
_mm512_mask_compressstoreu_epi64(
260-
items.weights.as_mut_ptr().add(lw) as *mut u8,
260+
items.weights.as_mut_ptr().add(lw) as *mut i64, // TODO: test
261261
mask,
262262
val_weights,
263263
);
264264
_mm512_mask_compressstoreu_epi64(
265-
items.parts.as_mut_ptr().add(lw) as *mut u8,
265+
items.parts.as_mut_ptr().add(lw) as *mut i64, // TODO: test
266266
mask,
267267
val_parts,
268268
);
@@ -271,18 +271,18 @@ fn reorder_split_avx512<const D: usize, W>(
271271
rw -= nb_high;
272272
for coord in 0..D {
273273
_mm256_mask_compressstoreu_ps(
274-
items.points[coord].as_mut_ptr().add(rw) as *mut u8,
274+
items.points[coord].as_mut_ptr().add(rw),
275275
!mask,
276276
val[coord],
277277
);
278278
}
279279
_mm512_mask_compressstoreu_epi64(
280-
items.weights.as_mut_ptr().add(rw) as *mut u8,
280+
items.weights.as_mut_ptr().add(rw) as *mut i64, // TODO: test
281281
!mask,
282282
val_weights,
283283
);
284284
_mm512_mask_compressstoreu_epi64(
285-
items.parts.as_mut_ptr().add(rw) as *mut u8,
285+
items.parts.as_mut_ptr().add(rw) as *mut i64, // TODO: test
286286
!mask,
287287
val_parts,
288288
);
@@ -300,37 +300,37 @@ fn reorder_split_avx512<const D: usize, W>(
300300
let nb_high = mask_high.count_ones() as usize;
301301
for coord in 0..D {
302302
_mm256_mask_compressstoreu_ps(
303-
items.points[coord].as_mut_ptr().add(lw) as *mut u8,
303+
items.points[coord].as_mut_ptr().add(lw),
304304
mask_low,
305305
val[coord],
306306
);
307307
}
308308
_mm512_mask_compressstoreu_epi64(
309-
items.weights.as_mut_ptr().add(lw) as *mut u8,
309+
items.weights.as_mut_ptr().add(lw) as *mut i64, // TODO: test
310310
mask_low,
311311
val_weights,
312312
);
313313
_mm512_mask_compressstoreu_epi64(
314-
items.parts.as_mut_ptr().add(lw) as *mut u8,
314+
items.parts.as_mut_ptr().add(lw) as *mut i64, // TODO: test
315315
mask_low,
316316
val_parts,
317317
);
318318
lw += nb_low;
319319
rw -= nb_high;
320320
for coord in 0..D {
321321
_mm256_mask_compressstoreu_ps(
322-
items.points[coord].as_mut_ptr().add(rw) as *mut u8,
322+
items.points[coord].as_mut_ptr().add(rw),
323323
mask_high,
324324
val[coord],
325325
);
326326
}
327327
_mm512_mask_compressstoreu_epi64(
328-
items.weights.as_mut_ptr().add(rw) as *mut u8,
328+
items.weights.as_mut_ptr().add(rw) as *mut i64, // TODO: test
329329
mask_high,
330330
val_weights,
331331
);
332332
_mm512_mask_compressstoreu_epi64(
333-
items.parts.as_mut_ptr().add(rw) as *mut u8,
333+
items.parts.as_mut_ptr().add(rw) as *mut i64, // TODO: test
334334
mask_high,
335335
val_parts,
336336
);
@@ -340,37 +340,37 @@ fn reorder_split_avx512<const D: usize, W>(
340340
let nb_high = AVX2_REGISTER_BYTES - nb_low;
341341
for coord in 0..D {
342342
_mm256_mask_compressstoreu_ps(
343-
items.points[coord].as_mut_ptr().add(lw) as *mut u8,
343+
items.points[coord].as_mut_ptr().add(lw),
344344
mask,
345345
lv[coord],
346346
);
347347
}
348348
_mm512_mask_compressstoreu_epi64(
349-
items.weights.as_mut_ptr().add(lw) as *mut u8,
349+
items.weights.as_mut_ptr().add(lw) as *mut i64, // TODO: test
350350
mask,
351351
lv_weights,
352352
);
353353
_mm512_mask_compressstoreu_epi64(
354-
items.parts.as_mut_ptr().add(lw) as *mut u8,
354+
items.parts.as_mut_ptr().add(lw) as *mut i64, // TODO: test
355355
mask,
356356
lv_parts,
357357
);
358358
lw += nb_low;
359359
rw -= nb_high;
360360
for coord in 0..D {
361361
_mm256_mask_compressstoreu_ps(
362-
items.points[coord].as_mut_ptr().add(rw) as *mut u8,
362+
items.points[coord].as_mut_ptr().add(rw),
363363
!mask,
364364
lv[coord],
365365
);
366366
}
367367
_mm512_mask_compressstoreu_epi64(
368-
items.weights.as_mut_ptr().add(rw) as *mut u8,
368+
items.weights.as_mut_ptr().add(rw) as *mut i64, // TODO: test
369369
!mask,
370370
lv_weights,
371371
);
372372
_mm512_mask_compressstoreu_epi64(
373-
items.parts.as_mut_ptr().add(rw) as *mut u8,
373+
items.parts.as_mut_ptr().add(rw) as *mut i64, // TODO: test
374374
!mask,
375375
lv_parts,
376376
);
@@ -380,37 +380,37 @@ fn reorder_split_avx512<const D: usize, W>(
380380
let nb_high = AVX2_REGISTER_BYTES - nb_low;
381381
for coord in 0..D {
382382
_mm256_mask_compressstoreu_ps(
383-
items.points[coord].as_mut_ptr().add(lw) as *mut u8,
383+
items.points[coord].as_mut_ptr().add(lw),
384384
mask,
385385
rv[coord],
386386
);
387387
}
388388
_mm512_mask_compressstoreu_epi64(
389-
items.weights.as_mut_ptr().add(lw) as *mut u8,
389+
items.weights.as_mut_ptr().add(lw) as *mut i64, // TODO: test
390390
mask,
391391
rv_weights,
392392
);
393393
_mm512_mask_compressstoreu_epi64(
394-
items.parts.as_mut_ptr().add(lw) as *mut u8,
394+
items.parts.as_mut_ptr().add(lw) as *mut i64, // TODO: test
395395
mask,
396396
rv_parts,
397397
);
398398
lw += nb_low;
399399
rw -= nb_high;
400400
for coord in 0..D {
401401
_mm256_mask_compressstoreu_ps(
402-
items.points[coord].as_mut_ptr().add(rw) as *mut u8,
402+
items.points[coord].as_mut_ptr().add(rw),
403403
!mask,
404404
rv[coord],
405405
);
406406
}
407407
_mm512_mask_compressstoreu_epi64(
408-
items.weights.as_mut_ptr().add(rw) as *mut u8,
408+
items.weights.as_mut_ptr().add(rw) as *mut i64, // TODO: test
409409
!mask,
410410
rv_weights,
411411
);
412412
_mm512_mask_compressstoreu_epi64(
413-
items.parts.as_mut_ptr().add(rw) as *mut u8,
413+
items.parts.as_mut_ptr().add(rw) as *mut i64, // TODO: test
414414
!mask,
415415
rv_parts,
416416
);

coupe/src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
//! - [Fiduccia-Mattheyses][FiducciaMattheyses]
3030
//! - [Kernighan-Lin][KernighanLin]
3131
32-
#![cfg_attr(feature = "avx512", feature(stdsimd))]
3332
#![warn(
3433
missing_copy_implementations,
3534
missing_debug_implementations,

tools/lib/metis.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ impl<const D: usize> ToRunner<D> for Recursive {
3535

3636
let mut metis_partition = vec![0; problem.adjacency().rows()];
3737
Box::new(move |partition| {
38-
let mut graph = metis::Graph::new(ncon, self.part_count, &mut xadj, &mut adjncy);
38+
let mut graph = metis::Graph::new(ncon, self.part_count, &mut xadj, &mut adjncy)?;
3939
if let Some(weights) = &mut weights {
4040
graph = graph.set_vwgt(weights);
4141
}
@@ -85,7 +85,7 @@ impl<const D: usize> ToRunner<D> for KWay {
8585

8686
let mut metis_partition = vec![0; problem.adjacency().rows()];
8787
Box::new(move |partition| {
88-
let mut graph = metis::Graph::new(ncon, self.part_count, &mut xadj, &mut adjncy);
88+
let mut graph = metis::Graph::new(ncon, self.part_count, &mut xadj, &mut adjncy)?;
8989
if let Some(weights) = &mut weights {
9090
graph = graph.set_vwgt(weights);
9191
}

0 commit comments

Comments
 (0)