@@ -18655,18 +18655,11 @@ static int ggml_get_n_tasks(struct ggml_tensor * node, int n_threads) {
18655
18655
18656
18656
static thread_ret_t ggml_graph_compute_secondary_thread(void* data);
18657
18657
18658
- enum {
18659
- SCHED_PRIO_NORMAL,
18660
- SCHED_PRIO_MEDIUM,
18661
- SCHED_PRIO_HIGH,
18662
- SCHED_PRIO_REALTIME
18663
- };
18664
-
18665
18658
#if defined(_WIN32)
18666
18659
#include "windows.h"
18667
18660
18668
18661
// TODO: support > 64 CPUs
18669
- static bool ggml_thread_apply_affinity(bool * mask) {
18662
+ bool ggml_thread_apply_affinity(bool * mask) {
18670
18663
HANDLE h = GetCurrentThread();
18671
18664
uint64_t bitmask = 0ULL;
18672
18665
@@ -18700,33 +18693,20 @@ static bool ggml_thread_apply_affinity(bool * mask) {
18700
18693
return m != 0;
18701
18694
}
18702
18695
18703
- static bool ggml_thread_apply_thread_priority(int32_t prio) {
18704
- DWORD p = NORMAL_PRIORITY_CLASS;
18705
-
18706
- if (prio == SCHED_PRIO_NORMAL) {
18707
- // Keep inherited policy/priority
18708
- return true;
18709
- }
18710
-
18711
- // On Windows we have to update Process Priority Class in order to set Thread priority.
18712
-
18696
+ static bool ggml_thread_apply_priority(int32_t prio) {
18697
+ // Note that on Windows the Process Priority Class must be updated in order to set Thread priority.
18698
+ // This is up to the applications.
18699
+ DWORD p = THREAD_PRIORITY_NORMAL;
18713
18700
switch (prio) {
18714
- case SCHED_PRIO_NORMAL: p = NORMAL_PRIORITY_CLASS; break;
18715
- case SCHED_PRIO_MEDIUM: p = ABOVE_NORMAL_PRIORITY_CLASS; break;
18716
- case SCHED_PRIO_HIGH: p = HIGH_PRIORITY_CLASS; break;
18717
- case SCHED_PRIO_REALTIME: p = REALTIME_PRIORITY_CLASS; break;
18718
- }
18719
-
18720
- if (!SetPriorityClass(GetCurrentProcess(), p)) {
18721
- fprintf(stderr, "warn: failed to set process priority class %d : (%d)\n", prio, (int) GetLastError());
18722
- return false;
18701
+ case GGML_SCHED_PRIO_NORMAL: p = THREAD_PRIORITY_NORMAL; break;
18702
+ case GGML_SCHED_PRIO_MEDIUM: p = THREAD_PRIORITY_ABOVE_NORMAL; break;
18703
+ case GGML_SCHED_PRIO_HIGH: p = THREAD_PRIORITY_HIGHEST; break;
18704
+ case GGML_SCHED_PRIO_REALTIME: p = THREAD_PRIORITY_TIME_CRITICAL; break;
18723
18705
}
18724
18706
18725
- switch (prio) {
18726
- case SCHED_PRIO_NORMAL: p = THREAD_PRIORITY_NORMAL; break;
18727
- case SCHED_PRIO_MEDIUM: p = THREAD_PRIORITY_ABOVE_NORMAL; break;
18728
- case SCHED_PRIO_HIGH: p = THREAD_PRIORITY_HIGHEST; break;
18729
- case SCHED_PRIO_REALTIME: p = THREAD_PRIORITY_TIME_CRITICAL; break;
18707
+ if (prio == GGML_SCHED_PRIO_NORMAL) {
18708
+ // Keep inherited policy/priority
18709
+ return true;
18730
18710
}
18731
18711
18732
18712
if (!SetThreadPriority(GetCurrentThread(), p)) {
@@ -18747,17 +18727,17 @@ static bool ggml_thread_apply_affinity(const bool * mask) {
18747
18727
return true;
18748
18728
}
18749
18729
18750
- static bool ggml_thread_apply_thread_priority (int32_t prio) {
18730
+ static bool ggml_thread_apply_priority (int32_t prio) {
18751
18731
struct sched_param p;
18752
18732
int32_t policy = SCHED_OTHER;
18753
18733
switch (prio) {
18754
- case SCHED_PRIO_NORMAL : policy = SCHED_OTHER; p.sched_priority = 0; break;
18755
- case SCHED_PRIO_MEDIUM : policy = SCHED_FIFO; p.sched_priority = 40; break;
18756
- case SCHED_PRIO_HIGH : policy = SCHED_FIFO; p.sched_priority = 80; break;
18757
- case SCHED_PRIO_REALTIME : policy = SCHED_FIFO; p.sched_priority = 90; break;
18734
+ case GGML_SCHED_PRIO_NORMAL : policy = SCHED_OTHER; p.sched_priority = 0; break;
18735
+ case GGML_SCHED_PRIO_MEDIUM : policy = SCHED_FIFO; p.sched_priority = 40; break;
18736
+ case GGML_SCHED_PRIO_HIGH : policy = SCHED_FIFO; p.sched_priority = 80; break;
18737
+ case GGML_SCHED_PRIO_REALTIME : policy = SCHED_FIFO; p.sched_priority = 90; break;
18758
18738
}
18759
18739
18760
- if (prio == SCHED_PRIO_NORMAL ) {
18740
+ if (prio == GGML_SCHED_PRIO_NORMAL ) {
18761
18741
// Keep inherited policy/priority
18762
18742
return true;
18763
18743
}
@@ -18802,17 +18782,17 @@ static bool ggml_thread_apply_affinity(const bool * mask) {
18802
18782
return true;
18803
18783
}
18804
18784
18805
- static bool ggml_thread_apply_thread_priority (int32_t prio) {
18785
+ static bool ggml_thread_apply_priority (int32_t prio) {
18806
18786
struct sched_param p;
18807
18787
int32_t policy = SCHED_OTHER;
18808
18788
switch (prio) {
18809
- case SCHED_PRIO_NORMAL : policy = SCHED_OTHER; p.sched_priority = 0; break;
18810
- case SCHED_PRIO_MEDIUM : policy = SCHED_FIFO; p.sched_priority = 40; break;
18811
- case SCHED_PRIO_HIGH : policy = SCHED_FIFO; p.sched_priority = 80; break;
18812
- case SCHED_PRIO_REALTIME : policy = SCHED_FIFO; p.sched_priority = 90; break;
18789
+ case GGML_SCHED_PRIO_NORMAL : policy = SCHED_OTHER; p.sched_priority = 0; break;
18790
+ case GGML_SCHED_PRIO_MEDIUM : policy = SCHED_FIFO; p.sched_priority = 40; break;
18791
+ case GGML_SCHED_PRIO_HIGH : policy = SCHED_FIFO; p.sched_priority = 80; break;
18792
+ case GGML_SCHED_PRIO_REALTIME : policy = SCHED_FIFO; p.sched_priority = 90; break;
18813
18793
}
18814
18794
18815
- if (prio == SCHED_PRIO_NORMAL ) {
18795
+ if (prio == GGML_SCHED_PRIO_NORMAL ) {
18816
18796
// Keep inherited policy/priority
18817
18797
return true;
18818
18798
}
@@ -19190,7 +19170,7 @@ static thread_ret_t ggml_graph_compute_secondary_thread(void* data) {
19190
19170
struct ggml_compute_state * state = (struct ggml_compute_state *) data;
19191
19171
struct ggml_compute_threadpool * threadpool = state->threadpool;
19192
19172
19193
- ggml_thread_apply_thread_priority (threadpool->prio);
19173
+ ggml_thread_apply_priority (threadpool->prio);
19194
19174
if (ggml_thread_cpumask_is_valid(state->cpumask)) {
19195
19175
ggml_thread_apply_affinity(state->cpumask);
19196
19176
}
@@ -19238,7 +19218,7 @@ static void ggml_graph_compute_kickoff(struct ggml_compute_threadpool * threadpo
19238
19218
19239
19219
if (threadpool->pause) {
19240
19220
// Update main thread prio and affinity to match the threadpool settings
19241
- ggml_thread_apply_thread_priority (threadpool->prio);
19221
+ ggml_thread_apply_priority (threadpool->prio);
19242
19222
if (ggml_thread_cpumask_is_valid(threadpool->workers[0].cpumask)) {
19243
19223
ggml_thread_apply_affinity(threadpool->workers[0].cpumask);
19244
19224
}
@@ -19333,7 +19313,7 @@ static struct ggml_compute_threadpool * ggml_create_threadpool_impl(
19333
19313
19334
19314
if (!threadpool->pause) {
19335
19315
// Update main thread prio and affinity at the start, otherwise we'll do it in resume
19336
- ggml_thread_apply_thread_priority (threadpool->prio);
19316
+ ggml_thread_apply_priority (threadpool->prio);
19337
19317
if (ggml_thread_cpumask_is_valid(threadpool->workers[0].cpumask)) {
19338
19318
ggml_thread_apply_affinity(threadpool->workers[0].cpumask);
19339
19319
}
0 commit comments