#include <vector>
#ifdef GGML_USE_CPU_HBM
-#include "ggml-cpu-hbm.h"
+# include "ggml-cpu-hbm.h"
#endif
#ifdef GGML_USE_CPU_KLEIDIAI
-#include "kleidiai/kleidiai.h"
-#endif
-
-#if defined(__APPLE__)
-#include <sys/types.h>
-#include <sys/sysctl.h>
+# include "kleidiai/kleidiai.h"
#endif
#if defined(_WIN32)
-#define WIN32_LEAN_AND_MEAN
-#ifndef NOMINMAX
- #define NOMINMAX
+# define WIN32_LEAN_AND_MEAN
+# ifndef NOMINMAX
+# define NOMINMAX
+# endif
+# include <windows.h>
+#else
+# include <unistd.h>
#endif
-#include <windows.h>
+
+#if defined(__APPLE__)
+# include <sys/sysctl.h>
+# include <sys/types.h>
#endif
// ggml-backend interface
}
static bool ggml_backend_cpu_is_extra_buffer_type(ggml_backend_buffer_type_t buft) {
- for (auto extra : ggml_backend_cpu_get_extra_buffers_type()) {
- if (extra && extra == buft) return true;
+ for (auto * extra : ggml_backend_cpu_get_extra_buffers_type()) {
+ if (extra && extra == buft) {
+ return true;
+ }
}
return false;
}
}
static void ggml_backend_cpu_device_get_memory(ggml_backend_dev_t dev, size_t * free, size_t * total) {
- // TODO
- *free = 0;
- *total = 0;
+#ifdef _WIN32
+ MEMORYSTATUSEX status;
+ status.dwLength = sizeof(status);
+ GlobalMemoryStatusEx(&status);
+ *total = status.ullTotalPhys;
+ *free = status.ullAvailPhys;
+#else
+ long pages = sysconf(_SC_PHYS_PAGES);
+ long page_size = sysconf(_SC_PAGE_SIZE);
+ *total = pages * page_size;
+ *free = *total;
+#endif
GGML_UNUSED(dev);
}
void ggml_backend_rpc_start_server(ggml_backend_t backend, const char * endpoint,
const char * cache_dir,
size_t free_mem, size_t total_mem) {
+ printf("Starting RPC server v%d.%d.%d\n",
+ RPC_PROTO_MAJOR_VERSION,
+ RPC_PROTO_MINOR_VERSION,
+ RPC_PROTO_PATCH_VERSION);
+ printf(" endpoint : %s\n", endpoint);
+ printf(" local cache : %s\n", cache_dir ? cache_dir : "n/a");
+ printf(" backend memory : %zu MB\n", free_mem / (1024 * 1024));
+
std::string host;
int port;
if (!parse_endpoint(endpoint, host, port)) {
if (std::strcmp(name, "ggml_backend_rpc_add_device") == 0) {
return (void *)ggml_backend_rpc_add_device;
}
+ if (std::strcmp(name, "ggml_backend_rpc_start_server") == 0) {
+ return (void *)ggml_backend_rpc_start_server;
+ }
return NULL;
GGML_UNUSED(reg);