mirror of
https://github.com/ggerganov/llama.cpp.git
synced 2025-01-10 18:51:45 +00:00
69 lines
2.2 KiB
C
69 lines
2.2 KiB
C
#pragma once
|
|
|
|
#include "ggml.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#if defined(_WIN32)
|
|
typedef int ggml_thread_ret_t;
|
|
#else
|
|
typedef void *ggml_thread_ret_t;
|
|
#endif
|
|
|
|
struct ggml_threading_context;
|
|
|
|
// Optional (experimental) features.
|
|
enum ggml_threading_features {
|
|
GGML_THREADING_FEATURE_NONE = 0,
|
|
GGML_THREADING_FEATURE_WAIT_ON_DONE = 1 << 0,
|
|
GGML_THREADING_FEATURE_PERF = 1 << 1,
|
|
};
|
|
|
|
// The thread runner to feed into OS threads.
|
|
typedef ggml_thread_ret_t(ggml_threading_thread_runner)(void *data);
|
|
|
|
// Init and start underlying workers if n_threads > 1.
|
|
// n_threads: number of threads (including caller) involving in computing tasks.
|
|
//
|
|
// thread: optional OS thread runner, default value:
|
|
// `ggml_threading_graph_compute_thread`.
|
|
//
|
|
// task_runner: default task runner, nullable when tensor.runner is not NULL.
|
|
// Overridden by tensor.runner.
|
|
// features: configure threading behaviour, optional.
|
|
// threading additional features. see `ggml_threading_feature`, default 0.
|
|
//
|
|
// stages_time: optional for collecting per-stage wall clock time.
|
|
struct ggml_threading_context *
|
|
ggml_threading_start(int n_threads, ggml_threading_thread_runner *thread,
|
|
ggml_task_runner *task_runner,
|
|
enum ggml_threading_features features,
|
|
int64_t stages_time[3]);
|
|
|
|
// Suspend worker threads.
|
|
void ggml_threading_suspend(struct ggml_threading_context *ctx);
|
|
|
|
// Resume worker threads.
|
|
void ggml_threading_resume(struct ggml_threading_context *ctx);
|
|
|
|
// Stop workers (if exist), free memories (including the ctx).
|
|
void ggml_threading_stop(struct ggml_threading_context *ctx);
|
|
|
|
// Is all worker threads suspending?
|
|
bool ggml_threading_is_suspending(struct ggml_threading_context *ctx);
|
|
|
|
// The default implementation of `ggml_threading_thread_runner`
|
|
ggml_thread_ret_t ggml_threading_graph_compute_thread(void *data);
|
|
|
|
// Compute a tensor. It computes the enabled task stages one by one.
|
|
// Caller should take care of the return error: retry for fallback error.
|
|
enum ggml_compute_error
|
|
ggml_threading_compute_tensor(struct ggml_threading_context *ctx,
|
|
struct ggml_tensor *node, void *wdata,
|
|
size_t wsize);
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|