llama.cpp学习笔记:后端加载

单例
struct ggml_backend_registry {std::vector<ggml_backend_reg_entry> backends;std::vector<ggml_backend_dev_t> devices;// ...
}struct ggml_backend_reg_entry {ggml_backend_reg_t reg;dl_handle_ptr handle;
};typedef struct ggml_backend_reg * ggml_backend_reg_t;typedef struct ggml_backend_device * ggml_backend_dev_t;
struct ggml_backend_device {struct ggml_backend_device_i iface;ggml_backend_reg_t reg;void * context;
};

每种后端一个单例:cuda、cpu等

版本号、接口和上下文信息

    struct ggml_backend_reg {int api_version; // initialize to GGML_BACKEND_API_VERSIONstruct ggml_backend_reg_i iface;void * context;};

后端对应的设备:接口、所属后端和上下文信息

typedef struct ggml_backend_device * ggml_backend_dev_t;
struct ggml_backend_device {struct ggml_backend_device_i iface;ggml_backend_reg_t reg;void * context;
};

cuda后端

cuda后端iface

static const ggml_backend_reg_i ggml_backend_cuda_reg_interface = {/* .get_name          = */ ggml_backend_cuda_reg_get_name,/* .get_device_count  = */ ggml_backend_cuda_reg_get_device_count,/* .get_device        = */ ggml_backend_cuda_reg_get_device,/* .get_proc_address  = */ ggml_backend_cuda_reg_get_proc_address,
};

cuda后端context,存储多个cuda设备(GPU)的接口、所属后端和上下文等信息

struct ggml_backend_cuda_reg_context {std::vector<ggml_backend_dev_t> devices;
};

 cuda设备GPU的接口iface

static const ggml_backend_device_i ggml_backend_cuda_device_interface = {/* .get_name                = */ ggml_backend_cuda_device_get_name,/* .get_description         = */ ggml_backend_cuda_device_get_description,/* .get_memory              = */ ggml_backend_cuda_device_get_memory,/* .get_type                = */ ggml_backend_cuda_device_get_type,/* .get_props               = */ ggml_backend_cuda_device_get_props,/* .init_backend            = */ ggml_backend_cuda_device_init_backend,/* .get_buffer_type         = */ ggml_backend_cuda_device_get_buffer_type,/* .get_host_buffer_type    = */ ggml_backend_cuda_device_get_host_buffer_type,/* .buffer_from_host_ptr    = */ NULL,/* .supports_op             = */ ggml_backend_cuda_device_supports_op,/* .supports_buft           = */ ggml_backend_cuda_device_supports_buft,/* .offload_op              = */ ggml_backend_cuda_device_offload_op,/* .event_new               = */ ggml_backend_cuda_device_event_new,/* .event_free              = */ ggml_backend_cuda_device_event_free,/* .event_synchronize       = */ ggml_backend_cuda_device_event_synchronize,
};

cuda设备GPU的context

struct ggml_backend_cuda_device_context {int device;std::string name;std::string description;
};

 

CPU后端

CPU后端iface

static const struct ggml_backend_reg_i ggml_backend_cpu_reg_i = {/* .get_name         = */ ggml_backend_cpu_reg_get_name,/* .get_device_count = */ ggml_backend_cpu_reg_get_device_count,/* .get_device       = */ ggml_backend_cpu_reg_get_device,/* .get_proc_address = */ ggml_backend_cpu_get_proc_address,
};

CPU后端无context

CPU设备接口iface

static const struct ggml_backend_device_i ggml_backend_cpu_device_i = {/* .get_name             = */ ggml_backend_cpu_device_get_name,/* .get_description      = */ ggml_backend_cpu_device_get_description,/* .get_memory           = */ ggml_backend_cpu_device_get_memory,/* .get_type             = */ ggml_backend_cpu_device_get_type,/* .get_props            = */ ggml_backend_cpu_device_get_props,/* .init_backend         = */ ggml_backend_cpu_device_init_backend,/* .get_buffer_type      = */ ggml_backend_cpu_device_get_buffer_type,/* .get_host_buffer_type = */ NULL,/* .buffer_from_host_ptr = */ ggml_backend_cpu_device_buffer_from_host_ptr,/* .supports_op          = */ ggml_backend_cpu_device_supports_op,/* .supports_buft        = */ ggml_backend_cpu_device_supports_buft,/* .offload_op           = */ NULL,/* .event_new            = */ NULL,/* .event_free           = */ NULL,/* .event_synchronize    = */ NULL,
};

CPU设备CPU的context

struct ggml_backend_cpu_device_context {std::string description = "CPU";// ...
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/86887.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/86887.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Prompt工程标准化在多模型协同中的作用

&#x1f680; 在AI模型"群雄逐鹿"的时代&#xff0c;如何让这些"AI武林高手"协同作战&#xff1f;答案可能藏在一个看似平凡却至关重要的概念中&#xff1a;Prompt工程标准化。 &#x1f4da; 文章目录 引言&#xff1a;AI模型的"巴别塔"困境什…

Java面试宝典:基础五

104. 源文件命名规则 题目:主类名为 a1,保存它的源文件可以是? 选项: A. a1.java B. a1.class C. a1 D. 都对 答案:A 解析: Java 源文件必须与公共类名完全匹配(区分大小写),后缀为 .java。.class 是编译后的字节码文件,非源文件。105. Java类的本质 题目:Java类…

Pycaita二次开发基础代码解析:几何特征统计、跨零件复制与发布技术的工业级实现

本文将从工业实践角度深入剖析CATIA二次开发中的三项核心技术&#xff1a;几何特征量化分析、跨零件特征迁移和产品对象发布。全文严格基于提供的类方法代码展开解析&#xff0c;不做任何修改和补充。 一、几何图形集特征统计技术&#xff1a;设计复杂度的精确量化 方法功能解…

入门级STM32F103C8T6无人机(共两张)

入门级STM32F103C8T6无人机&#xff08;原理图其一&#xff09; 一、STM32F103C8T6 最小系统电路中各接口&#xff08;引脚&#xff09;的解释及作用 一&#xff09;电源相关引脚 引脚名称说明3.3V为芯片及部分外围电路提供 3.3V 工作电源&#xff0c;保障芯片正常运行所需的电…

Git安装全攻略:避坑指南与最佳实践

1、系统环境检查 确认操作系统版本&#xff08;Windows/macOS/Linux&#xff09;及位数&#xff08;32/64位&#xff09;检查是否已安装旧版Git&#xff0c;避免版本冲突确保系统环境变量配置权限 2、下载安装包注意事项 官方下载地址推荐&#xff08;避免第三方镜像源&…

AlpineLinux安装部署MariaDB

简单来说,MariaDB被视为MySQL的一个社区驱动的分支,它保留了MySQL的许多特性和功能,同时引入了一些新的特性和改进。许多用户和组织选择使用MariaDB,因为它提供了更多的自由度和对未来许可证变更的保护。而对于一些需要特定Oracle支持或特定MySQL功能的用例,依然使用MySQL…

SpringBoot医疗用品销售网站源码

概述 一个基于SpringBoot框架开发的医疗用品销售网站完整项目源码&#xff0c;包含用户管理、商品展示、订单处理等完整电商功能。该项目采用SpringBoot框架开发&#xff0c;代码规范、结构清晰&#xff0c;非常适合二次开发或学习参考&#xff0c;帮助开发者快速搭建医疗用品…

使用CSS创建带三角形指示器的气泡框

在网页设计中&#xff0c;气泡框&#xff08;或工具提示&#xff09;是一种常见的UI元素&#xff0c;用于突出显示信息或提供额外说明。本文将介绍如何使用纯CSS创建一个简单的气泡框&#xff0c;并添加一个三角形指示器。 HTML结构 首先&#xff0c;我们有一个简单的HTML结…

Java面试题031:一文深入了解MySQL(3)

Java面试题029&#xff1a;一文深入了解MySQL&#xff08;1&#xff09; Java面试题030&#xff1a;一文深入了解MySQL&#xff08;2&#xff09; 1、MySQL多表查询 &#xff08;1&#xff09;内连接 inner join 返回两个表中完全匹配的行&#xff0c;即只保留两个表连接字段值…

springboot小区物业管理系统

目 录 第一章 绪 论 1.1背景及意义 1 1.2国内外研究概况 2 1.3 研究的内容 2 第二章 关键技术的研究 2.1 相关技术 3 2.2 Java技术 3 2.3 MySQL数据库 4 2.4 Tomcat介绍 4 2.5 Spring Boot框架 5 第三章 系统分析 3.1 系统设计目标 6 3.2 系统可行性分析 6 3.3 系统功能分析…

微信小程序云开发--环境共享

1、创建配置文件 // utils/cloudConfig.js // 云开发环境配置// 当前小程序配置 const currentConfig {env: "cloudbase-6goxxxxxxd6c75e0", // 当前小程序环境 IDappid: "wxdexxxxx5dbcf04", // 当前小程序 AppID };// 共享云开发环境配置 const shared…

SpringBoot+ShardingSphere-分库分表教程(一)

日常使用数据库的时候&#xff0c;更多的时间是在关心业务功能的实现&#xff0c;为了尽快完成新版本的发布上线&#xff0c;通常在项目初期不太会去在意数据库的压力和性能问题。在服务上线一段时间之后&#xff0c;就会发现当初设计存在着很多的不足&#xff0c;这都是项目研…

INA226 电流计 功率计电路图转PCB制作

上次发布了TI的INA226电路图&#xff0c;今天抽了点时间&#xff0c;把电路图生成了PCB。 帖出来&#xff0c;不足之处&#xff0c;请兄弟们留言指正。 没什么问题就可以去嘉立创白嫖了。^_^

Vcpkg 经典模式完整迁移方案

&#x1f680; 从零开始&#xff1a;高效使用 Vcpkg 安装 Qt WebEngine&#xff08;经典模式 缓存优化 性能释放&#xff09; &#x1f9e9; 背景简介 在使用 Vcpkg 安装 Qt 系列库时&#xff0c;特别是庞大的 qtwebengine 模块&#xff0c;编译量极大&#xff0c;耗时可达…

FPGA产品

FPGA产品 文章目录 FPGA产品1. Xilinx公司FPGA产品2. Altera公司FPGA产品3. FPGA产品的工业等级简介4. FPGA产品的速度等级简介总结 1. Xilinx公司FPGA产品 Xilinx公司是FPGA芯片的发明者&#xff0c;因此是一家骨灰级的老牌FPGA公司&#xff0c;同时也是目前最大的可编程逻辑…

205-06-26 Python深度学习1——安装Anaconda与PyTorch库(Win11+WSL2+Ubuntu24.04版)

文章目录 1 安装 wsl1.1 开启 Windows 支持1.2 安装 wsl1.3 移动 wsl 至其他盘1.4 其他事项 2 安装 Anaconda3 安装 Python 环境3.1 创建 Conda 环境3.2 安装 Pytorch 库&#xff08;gpu&#xff09; 4 安装 Pycharm4.1 Toolbox App 安装4.2 安装 Pycharm4.3 配置 Pycharm 5 测…

Redis 数据迁移同步:应对大 Key 同步挑战

在企业级的数据同步和迁移场景中&#xff0c;Redis 凭借高性能和灵活的数据结构&#xff0c;常被用于缓存和高频读写场景。随着业务数据的积累&#xff0c;Redis 中不可避免会出现包含大量元素的“大 Key”&#xff0c;如包含几十万条数据的 List、Set 或 Hash 类型。在进行全量…

视频关键帧提取

&#x1f39e;️ 视频关键帧提取与特征分析指南 &#x1f4cc; 抽帧数量建议 视频时长推荐抽帧数原因短视频&#xff08;≤15秒&#xff09;3&#xff5e;5 帧覆盖不同场景即可中长视频&#xff08;1&#xff5e;3分钟&#xff09;5&#xff5e;10 帧内容跨度大长视频&#xf…

协作机器人优化自动化工作流程,提升工作效率

无损检测(NDT)是一种检查方法&#xff0c;用于识别材料中的裂纹或缺陷&#xff0c;或者在不损坏材料的情况下确定材料的元素组成。Olympus拥有多种NDT设备&#xff0c;这些设备具有多种多样的测量功能&#xff0c;允许最终用户对各种行业中使用的金属、塑料、陶瓷和复合材料进行…

复用对象Aspose.Words 中 DocumentBuilder 的状态管理解析

doc manager.LoadDocument(filePath) builder.Document doc 是不是builder就自动清空重建了,不需要清理builder Aspose.Words 中 DocumentBuilder 的状态管理解析 在您的代码中&#xff0c;builder.Document doc 这行代码不会自动清空或重建DocumentBuilder的状态。Docume…