Skip to content

Commit fe585ac

Browse files
authored
Use std::available_parallelism instead of num_cpus (#633)
* Explicitly set minimum rust version * Use std::available_parallelism instead of num_cpus
1 parent 460fa3c commit fe585ac

File tree

8 files changed

+19
-6
lines changed

8 files changed

+19
-6
lines changed

Cargo.lock

-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ repository = "https://github.com/master-of-zen/Av1an"
99
keywords = ["video"]
1010
categories = ["command-line-utilities"]
1111
license = "GPL-3.0"
12+
rust-version = "1.59"
1213
edition = "2021"
1314

1415
[[bin]]

av1an-cli/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ repository = "https://github.com/master-of-zen/Av1an"
99
keywords = ["video"]
1010
categories = ["command-line-utilities"]
1111
license = "GPL-3.0"
12+
rust-version = "1.59"
1213
edition = "2021"
1314

1415
[dependencies]

av1an-core/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
[package]
22
name = "av1an-core"
33
version = "0.3.1"
4+
rust-version = "1.59"
45
edition = "2021"
56
authors = ["Zen <[email protected]>"]
67
description = """
@@ -20,7 +21,6 @@ atty = "0.2.14"
2021
av-format = "0.3.1"
2122
av-ivf = "0.2.2"
2223
memchr = "2.4.1"
23-
num_cpus = "1.13.0"
2424
anyhow = "1.0.42"
2525
rand = "0.8.4"
2626
serde = { version = "1.0", features = ["derive"] }

av1an-core/src/broker.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use std::process::ExitStatus;
66
use std::sync::atomic::{self, AtomicU64};
77
use std::sync::mpsc::Sender;
88
use std::sync::Arc;
9+
use std::thread::available_parallelism;
910

1011
use cfg_if::cfg_if;
1112
use memchr::memmem;
@@ -123,7 +124,7 @@ impl<'a> Broker<'a> {
123124
cfg_if! {
124125
if #[cfg(any(target_os = "linux", target_os = "windows"))] {
125126
if let Some(threads) = set_thread_affinity {
126-
let available_threads = num_cpus::get();
127+
let available_threads = available_parallelism().expect("Unrecoverable: Failed to get thread count").get();
127128
let requested_threads = threads.saturating_mul(self.project.workers);
128129
if requested_threads > available_threads {
129130
warn!(

av1an-core/src/lib.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ use std::io::Write;
2929
use std::path::{Path, PathBuf};
3030
use std::string::ToString;
3131
use std::sync::atomic::{AtomicBool, AtomicUsize};
32+
use std::thread::available_parallelism;
3233
use std::time::Instant;
3334

3435
use ::ffmpeg::color::TransferCharacteristic;
@@ -327,7 +328,9 @@ pub fn determine_workers(encoder: Encoder) -> u64 {
327328
let mut system = sysinfo::System::new();
328329
system.refresh_memory();
329330

330-
let cpu = num_cpus::get() as u64;
331+
let cpu = available_parallelism()
332+
.expect("Unrecoverable: Failed to get thread count")
333+
.get() as u64;
331334
// available_memory returns kb, convert to gb
332335
let ram_gb = system.available_memory() / 10_u64.pow(6);
333336

av1an-core/src/settings.rs

+6-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use std::path::{Path, PathBuf};
99
use std::process::{exit, Command, Stdio};
1010
use std::sync::atomic::{self, AtomicBool, AtomicU64, AtomicUsize};
1111
use std::sync::{mpsc, Arc};
12+
use std::thread::available_parallelism;
1213
use std::{cmp, fs, iter, thread};
1314

1415
use ansi_term::{Color, Style};
@@ -1340,7 +1341,11 @@ properly into a mkv file. Specify mkvmerge as the concatenation method by settin
13401341
Some(filter) => Some(filter),
13411342
None => None,
13421343
},
1343-
self.vmaf_threads.unwrap_or_else(num_cpus::get),
1344+
self.vmaf_threads.unwrap_or_else(|| {
1345+
available_parallelism()
1346+
.expect("Unrecoverable: Failed to get thread count")
1347+
.get()
1348+
}),
13441349
) {
13451350
error!("VMAF calculation failed with error: {}", e);
13461351
}

av1an-core/src/target_quality.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use std::convert::TryInto;
44
use std::fmt::Error;
55
use std::path::{Path, PathBuf};
66
use std::process::Stdio;
7+
use std::thread::available_parallelism;
78

89
use ffmpeg::format::Pixel;
910
use splines::{Interpolation, Key, Spline};
@@ -299,7 +300,9 @@ pub fn vmaf_auto_threads(workers: usize) -> usize {
299300
const OVER_PROVISION_FACTOR: f64 = 1.25;
300301

301302
// Logical CPUs
302-
let threads = num_cpus::get();
303+
let threads = available_parallelism()
304+
.expect("Unrecoverable: Failed to get thread count")
305+
.get();
303306

304307
cmp::max(
305308
((threads / workers) as f64 * OVER_PROVISION_FACTOR) as usize,

0 commit comments

Comments
 (0)