[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-KomputeProject--kompute":3,"tool-KomputeProject--kompute":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",142651,2,"2026-04-06T23:34:12",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",107888,"2026-04-06T11:32:50",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":10,"last_commit_at":59,"category_tags":60,"status":17},4487,"LLMs-from-scratch","rasbt\u002FLLMs-from-scratch","LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目，旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型（LLM）。它不仅是同名技术著作的官方代码库，更提供了一套完整的实践方案，涵盖模型开发、预训练及微调的全过程。\n\n该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型，却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码，用户能够透彻掌握 Transformer 架构、注意力机制等关键原理，从而真正理解大模型是如何“思考”的。此外，项目还包含了加载大型预训练权重进行微调的代码，帮助用户将理论知识延伸至实际应用。\n\nLLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API，而是渴望探究模型构建细节的技术人员而言，这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计：将复杂的系统工程拆解为清晰的步骤，配合详细的图表与示例，让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础，还是为未来研发更大规模的模型做准备",90106,"2026-04-06T11:19:32",[35,15,13,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":72,"owner_name":73,"owner_avatar_url":74,"owner_bio":75,"owner_company":76,"owner_location":76,"owner_email":77,"owner_twitter":76,"owner_website":78,"owner_url":79,"languages":80,"stars":105,"forks":106,"last_commit_at":107,"license":108,"difficulty_score":10,"env_os":109,"env_gpu":110,"env_ram":111,"env_deps":112,"category_tags":119,"github_topics":120,"view_count":32,"oss_zip_url":76,"oss_zip_packed_at":76,"status":17,"created_at":137,"updated_at":138,"faqs":139,"releases":165},4861,"KomputeProject\u002Fkompute","kompute","General purpose GPU compute framework built on Vulkan to support 1000s of cross vendor graphics cards (AMD, Qualcomm, NVIDIA & friends). Blazing fast, mobile-enabled, asynchronous and optimized for advanced GPU data processing usecases. Backed by the Linux Foundation.","Kompute 是一个基于 Vulkan 构建的通用 GPU 计算框架，旨在让开发者能够轻松利用显卡的强大算力进行高性能数据处理。它打破了硬件品牌的限制，完美支持 AMD、NVIDIA、Qualcomm 等厂商的数千款图形卡，甚至能在移动设备上流畅运行。\n\n在人工智能和大数据时代，许多应用需要高效的并行计算能力，但不同硬件间的兼容性往往成为开发瓶颈。Kompute 通过统一的接口解决了这一难题，让开发者无需为不同显卡编写重复代码，即可实现极速的异步并行处理。无论是机器学习模型推理、移动端智能应用开发，还是游戏引擎中的实时计算，它都能提供强有力的底层支持。\n\n这款工具特别适合 C++ 和 Python 开发者、AI 研究人员以及需要跨平台 GPU 加速的工程团队。其独特的技术亮点包括“自带 Vulkan\"（BYOV）设计理念，可无缝集成到现有的 Vulkan 应用中；同时提供了灵活的 Python 模块与高性能 C++ SDK，并具备严谨的内存管理机制以确保稳定性。作为 Linux 基金会托管的项目，Kompute 拥有活跃的社区支持和极高的测试覆盖率，是构建下一代高效能应用的可靠选择。","\n![GitHub](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FVersion-0.7.0-green.svg)\n![GitHub](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FC++-14—20-purple.svg)\n![GitHub](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FBuild-cmake-red.svg)\n![GitHub](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPython-3.7—3.9-blue.svg)\n![GitHub](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-Apache-black.svg)\n[![CII Best Practices](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKomputeProject_kompute_readme_eda489f85045.png)](https:\u002F\u002Fbestpractices.coreinfrastructure.org\u002Fprojects\u002F4834)\n\n\u003Ctable>\n\u003Ctr>\n\n\u003Ctd width=\"20%\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKomputeProject_kompute_readme_dc8450d57873.jpg\">\n\u003C\u002Ftd>\n\n\u003Ctd>\n\n\u003Ch1>Kompute\u003C\u002Fh1>\n\u003Ch3>The general purpose GPU compute framework for cross vendor graphics cards (AMD, Qualcomm, NVIDIA & friends)\u003C\u002Fh3>\n\n\u003C\u002Ftd>\n\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n\u003Ch4>Blazing fast, mobile-enabled, asynchronous, and optimized for advanced GPU acceleration usecases.\u003C\u002Fh4>\n\n💬 [Join the Discord & Community Calls](https:\u002F\u002Fkompute.cc\u002Foverview\u002Fcommunity.html) 🔋 [Documentation](https:\u002F\u002Fkompute.cc) 💻 [Blog Post](https:\u002F\u002Fmedium.com\u002F@AxSaucedo\u002Fmachine-learning-and-data-processing-in-the-gpu-with-vulkan-kompute-c9350e5e5d3a) ⌨ [Examples](#more-examples) 💾\n\n\u003Chr>\n\n##### Kompute is backed by the Linux Foundation as a \u003Ca href=\"https:\u002F\u002Flfaidata.foundation\u002Fblog\u002F2021\u002F08\u002F26\u002Fkompute-joins-lf-ai-data-as-new-sandbox-project\u002F\">hosted project\u003C\u002Fa> by the LF AI & Data Foundation.\n\n\u003Ctable>\n\u003Ctr>\n\u003Ctd>\n\u003Ca href=\"https:\u002F\u002Fwww.linuxfoundation.org\u002Fprojects\u002F\">\n\u003Cimg src=\"https:\u002F\u002Fupload.wikimedia.org\u002Fwikipedia\u002Fcommons\u002Fb\u002Fb5\u002FLinux_Foundation_logo.png\">\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\u003Ctd>\n\u003Ca href=\"https:\u002F\u002Flfaidata.foundation\u002Fprojects\u002F\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKomputeProject_kompute_readme_577df18433e0.png\">\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n\n## Principles & Features\n\n* [Flexible Python module](#your-first-kompute-python) with [C++ SDK](#your-first-kompute-c) for optimizations\n* [Asynchronous & parallel processing](#asynchronous-and-parallel-operations) support through GPU family queues\n* [Mobile enabled](#mobile-enabled) with examples via Android NDK across several architectures\n* BYOV: [Bring-your-own-Vulkan design](#motivations) to play nice with existing Vulkan applications\n* Explicit relationships for GPU and host [memory ownership and memory management](https:\u002F\u002Fkompute.cc\u002Foverview\u002Fmemory-management.html)\n* Robust codebase with [90% unit test code coverage](https:\u002F\u002Fkompute.cc\u002Fcodecov\u002F)\n* Advanced use-cases on [machine learning 🤖](https:\u002F\u002Ftowardsdatascience.com\u002Fmachine-learning-and-data-processing-in-the-gpu-with-vulkan-kompute-c9350e5e5d3a), [mobile development 📱](https:\u002F\u002Ftowardsdatascience.com\u002Fgpu-accelerated-machine-learning-in-your-mobile-applications-using-the-android-ndk-vulkan-kompute-1e9da37b7617) and [game development 🎮](https:\u002F\u002Ftowardsdatascience.com\u002Fsupercharging-game-development-with-gpu-accelerated-ml-using-vulkan-kompute-the-godot-game-engine-4e75a84ea9f0).\n* Active community with [monthly calls, discord chat and more](https:\u002F\u002Fkompute.cc\u002Foverview\u002Fcommunity.html)\n\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKomputeProject_kompute_readme_86f02f999bbd.gif)\n\n## Projects using Kompute ❤️  🤖\n\n* [GPT4ALL](https:\u002F\u002Fgithub.com\u002Fnomic-ai\u002Fgpt4all) ![](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fnomic-ai\u002Fgpt4all.svg?style=social) - An ecosystem of open-source on-edge large language models that run locally on your CPU and nearly any GPU.\n* [llama.cpp](https:\u002F\u002Fgithub.com\u002Fggerganov\u002Fllama.cpp) ![](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fggerganov\u002Fllama.cpp.svg?style=social) - Port of Facebook's LLaMA model in C\u002FC++ (now decomissioned).\n* [tpoisonooo\u002Fhow-to-optimize-gemm](https:\u002F\u002Fgithub.com\u002Ftpoisonooo\u002Fhow-to-optimize-gemm) ![](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Ftpoisonooo\u002Fhow-to-optimize-gemm.svg?style=social) - row-major matmul optimization.\n* [vkJAX](https:\u002F\u002Fgithub.com\u002Falexander-g\u002FvkJAX) ![](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Falexander-g\u002FvkJAX.svg?style=social) - JAX interpreter for Vulkan.\n\n## Getting Started\n\nBelow you can find a GPU multiplication example using the C++ and Python Kompute interfaces.\n\nYou can [join the Discord](https:\u002F\u002Fdiscord.gg\u002FMaH5Jv5zwv) for questions \u002F discussion, open a [github issue](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002Fnew), or read [the documentation](https:\u002F\u002Fkompute.cc\u002F).\n\n### Your First Kompute (C++)\n\nThe C++ interface provides low level access to the native components of Kompute, enabling for [advanced optimizations](https:\u002F\u002Fkompute.cc\u002Foverview\u002Fasync-parallel.html) as well as [extension of components](https:\u002F\u002Fkompute.cc\u002Foverview\u002Freference.html).\n\n```c++\n\nvoid kompute(const std::string& shader) {\n\n    \u002F\u002F 1. Create Kompute Manager with default settings (device 0, first queue and no extensions)\n    kp::Manager mgr; \n\n    \u002F\u002F 2. Create and initialise Kompute Tensors through manager\n\n    \u002F\u002F Default tensor constructor simplifies creation of float values\n    auto tensorInA = mgr.tensor({ 2., 2., 2. });\n    auto tensorInB = mgr.tensor({ 1., 2., 3. });\n    \u002F\u002F Explicit type constructor supports uint32, int32, double, float and bool\n    auto tensorOutA = mgr.tensorT\u003Cuint32_t>({ 0, 0, 0 });\n    auto tensorOutB = mgr.tensorT\u003Cuint32_t>({ 0, 0, 0 });\n\n    std::vector\u003Cstd::shared_ptr\u003Ckp::Memory>> params = {tensorInA, tensorInB, tensorOutA, tensorOutB};\n\n    \u002F\u002F 3. Create algorithm based on shader (supports buffers & push\u002Fspec constants)\n    kp::Workgroup workgroup({3, 1, 1});\n    std::vector\u003Cfloat> specConsts({ 2 });\n    std::vector\u003Cfloat> pushConstsA({ 2.0 });\n    std::vector\u003Cfloat> pushConstsB({ 3.0 });\n\n    auto algorithm = mgr.algorithm(params,\n                                   \u002F\u002F See documentation shader section for compileSource\n                                   compileSource(shader),\n                                   workgroup,\n                                   specConsts,\n                                   pushConstsA);\n\n    \u002F\u002F 4. Run operation synchronously using sequence\n    mgr.sequence()\n        ->record\u003Ckp::OpSyncDevice>(params)\n        ->record\u003Ckp::OpAlgoDispatch>(algorithm) \u002F\u002F Binds default push consts\n        ->eval() \u002F\u002F Evaluates the two recorded operations\n        ->record\u003Ckp::OpAlgoDispatch>(algorithm, pushConstsB) \u002F\u002F Overrides push consts\n        ->eval(); \u002F\u002F Evaluates only last recorded operation\n\n    \u002F\u002F 5. Sync results from the GPU asynchronously\n    auto sq = mgr.sequence();\n    sq->evalAsync\u003Ckp::OpSyncLocal>(params);\n\n    \u002F\u002F ... Do other work asynchronously whilst GPU finishes\n\n    sq->evalAwait();\n\n    \u002F\u002F Prints the first output which is: { 4, 8, 12 }\n    for (const float& elem : tensorOutA->vector()) std::cout \u003C\u003C elem \u003C\u003C \"  \";\n    \u002F\u002F Prints the second output which is: { 10, 10, 10 }\n    for (const float& elem : tensorOutB->vector()) std::cout \u003C\u003C elem \u003C\u003C \"  \";\n\n} \u002F\u002F Manages \u002F releases all CPU and GPU memory resources\n\nint main() {\n\n    \u002F\u002F Define a raw string shader (or use the Kompute tools to compile to SPIRV \u002F C++ header\n    \u002F\u002F files). This shader shows some of the main components including constants, buffers, etc\n    std::string shader = (R\"(\n        #version 450\n\n        layout (local_size_x = 1) in;\n\n        \u002F\u002F The input tensors bind index is relative to index in parameter passed\n        layout(set = 0, binding = 0) buffer buf_in_a { float in_a[]; };\n        layout(set = 0, binding = 1) buffer buf_in_b { float in_b[]; };\n        layout(set = 0, binding = 2) buffer buf_out_a { uint out_a[]; };\n        layout(set = 0, binding = 3) buffer buf_out_b { uint out_b[]; };\n\n        \u002F\u002F Kompute supports push constants updated on dispatch\n        layout(push_constant) uniform PushConstants {\n            float val;\n        } push_const;\n\n        \u002F\u002F Kompute also supports spec constants on initalization\n        layout(constant_id = 0) const float const_one = 0;\n\n        void main() {\n            uint index = gl_GlobalInvocationID.x;\n            out_a[index] += uint( in_a[index] * in_b[index] );\n            out_b[index] += uint( const_one * push_const.val );\n        }\n    )\");\n\n    \u002F\u002F Run the function declared above with our raw string shader\n    kompute(shader);\n}\n\n```\n\n### Your First Kompute (Python)\n\nThe [Python package](https:\u002F\u002Fkompute.cc\u002Foverview\u002Fpython-package.html) provides a [high level interactive interface](https:\u002F\u002Fkompute.cc\u002Foverview\u002Fpython-reference.html) that enables for experimentation whilst ensuring high performance and fast development workflows.\n\n```python\n\nfrom .utils import compile_source # using util function from python\u002Ftest\u002Futils\n\ndef kompute(shader):\n    # 1. Create Kompute Manager with default settings (device 0, first queue and no extensions)\n    mgr = kp.Manager()\n\n    # 2. Create and initialise Kompute Tensors through manager\n\n    # Default tensor constructor simplifies creation of float values\n    tensor_in_a = mgr.tensor([2, 2, 2])\n    tensor_in_b = mgr.tensor([1, 2, 3])\n    # Explicit type constructor supports uint32, int32, double, float and bool\n    tensor_out_a = mgr.tensor_t(np.array([0, 0, 0], dtype=np.uint32))\n    tensor_out_b = mgr.tensor_t(np.array([0, 0, 0], dtype=np.uint32))\n    assert(t_data.data_type() == kp.DataTypes.uint)\n\n    params = [tensor_in_a, tensor_in_b, tensor_out_a, tensor_out_b]\n\n    # 3. Create algorithm based on shader (supports buffers & push\u002Fspec constants)\n    workgroup = (3, 1, 1)\n    spec_consts = [2]\n    push_consts_a = [2]\n    push_consts_b = [3]\n\n    # See documentation shader section for compile_source\n    spirv = compile_source(shader)\n\n    algo = mgr.algorithm(params, spirv, workgroup, spec_consts, push_consts_a)\n\n    # 4. Run operation synchronously using sequence\n    (mgr.sequence()\n        .record(kp.OpTensorSyncDevice(params))\n        .record(kp.OpAlgoDispatch(algo)) # Binds default push consts provided\n        .eval() # evaluates the two recorded ops\n        .record(kp.OpAlgoDispatch(algo, push_consts_b)) # Overrides push consts\n        .eval()) # evaluates only the last recorded op\n\n    # 5. Sync results from the GPU asynchronously\n    sq = mgr.sequence()\n    sq.eval_async(kp.OpTensorSyncLocal(params))\n\n    # ... Do other work asynchronously whilst GPU finishes\n\n    sq.eval_await()\n\n    # Prints the first output which is: { 4, 8, 12 }\n    print(tensor_out_a)\n    # Prints the first output which is: { 10, 10, 10 }\n    print(tensor_out_b)\n\nif __name__ == \"__main__\":\n\n    # Define a raw string shader (or use the Kompute tools to compile to SPIRV \u002F C++ header\n    # files). This shader shows some of the main components including constants, buffers, etc\n    shader = \"\"\"\n        #version 450\n\n        layout (local_size_x = 1) in;\n\n        \u002F\u002F The input tensors bind index is relative to index in parameter passed\n        layout(set = 0, binding = 0) buffer buf_in_a { float in_a[]; };\n        layout(set = 0, binding = 1) buffer buf_in_b { float in_b[]; };\n        layout(set = 0, binding = 2) buffer buf_out_a { uint out_a[]; };\n        layout(set = 0, binding = 3) buffer buf_out_b { uint out_b[]; };\n\n        \u002F\u002F Kompute supports push constants updated on dispatch\n        layout(push_constant) uniform PushConstants {\n            float val;\n        } push_const;\n\n        \u002F\u002F Kompute also supports spec constants on initalization\n        layout(constant_id = 0) const float const_one = 0;\n\n        void main() {\n            uint index = gl_GlobalInvocationID.x;\n            out_a[index] += uint( in_a[index] * in_b[index] );\n            out_b[index] += uint( const_one * push_const.val );\n        }\n    \"\"\"\n\n    kompute(shader)\n\n```\n\n### Interactive Notebooks & Hands on Videos\n\nYou are able to try out the interactive Colab Notebooks which allow you to use a free GPU. The available examples are the Python and C++ examples below:\n\n\u003Ctable>\n\u003Ctr>\n\n\u003Ctd width=\"50%\">\n\u003Ch5>Try the interactive \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fdrive\u002F1l3hNSq2AcJ5j2E3YIw__jKy5n6M615GP?usp=sharing\">C++ Colab\u003C\u002Fa> from \u003Ca href=\"https:\u002F\u002Ftowardsdatascience.com\u002Fmachine-learning-and-data-processing-in-the-gpu-with-vulkan-kompute-c9350e5e5d3a\">Blog Post\u003C\u002Fa>\u003C\u002Fh5>\n\u003C\u002Ftd>\n\n\u003Ctd>\n\u003Ch5>Try the interactive \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fdrive\u002F15uQ7qMZuOyk8JcXF-3SB2R5yNFW21I4P\">Python Colab\u003C\u002Fa> from \u003Ca href=\"https:\u002F\u002Ftowardsdatascience.com\u002Fbeyond-cuda-gpu-accelerated-python-for-machine-learning-in-cross-vendor-graphics-cards-made-simple-6cc828a45cc3\">Blog Post\u003C\u002Fa>\u003C\u002Fh5>\n\u003C\u002Ftd>\n\n\u003C\u002Ftr>\n\u003Ctr>\n\n\u003Ctd width=\"50%\">\n\u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fdrive\u002F1l3hNSq2AcJ5j2E3YIw__jKy5n6M615GP?authuser=1#scrollTo=1BipBsO-fQRD\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKomputeProject_kompute_readme_ad3710067380.jpg\">\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\n\u003Ctd>\n\u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fdrive\u002F15uQ7qMZuOyk8JcXF-3SB2R5yNFW21I4P\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKomputeProject_kompute_readme_8fb88833330d.jpg\">\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n\nYou can also check out the two following talks presented at the FOSDEM 2021 conference. \n\nBoth videos have timestamps which will allow you to skip to the most relevant section for you - the intro & motivations for both is almost the same so you can skip to the more specific content.\n\n\u003Ctable>\n\u003Ctr>\n\n\u003Ctd width=\"50%\">\n\u003Ch5>Watch the video for \u003Ca href=\"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=Xz4fiQNmGSA\">C++ Enthusiasts\u003C\u002Fa> \u003C\u002Fh5>\n\u003C\u002Ftd>\n\n\u003Ctd>\n\u003Ch5>Watch the video for \u003Ca href=\"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=AJRyZ09IUdg\">Python & Machine Learning\u003C\u002Fa> Enthusiasts\u003C\u002Fh5>\n\u003C\u002Ftd>\n\n\u003C\u002Ftr>\n\u003Ctr>\n\n\u003Ctd width=\"50%\">\n\u003Ca href=\"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=Xz4fiQNmGSA\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKomputeProject_kompute_readme_f162af685f26.png\">\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\n\u003Ctd>\n\u003Ca href=\"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=AJRyZ09IUdg\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKomputeProject_kompute_readme_814ebd3cb678.png\">\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n\n## Architectural Overview\n\nThe core architecture of Kompute includes the following:\n* [Kompute Manager](https:\u002F\u002Fkompute.cc\u002Foverview\u002Freference.html#manager) - Base orchestrator which creates and manages device and child components\n* [Kompute Sequence](https:\u002F\u002Fkompute.cc\u002Foverview\u002Freference.html#sequence) - Container of operations that can be sent to GPU as batch\n* [Kompute Operation (Base)](https:\u002F\u002Fkompute.cc\u002Foverview\u002Freference.html#algorithm) - Base class from which all operations inherit\n* [Kompute Tensor](https:\u002F\u002Fkompute.cc\u002Foverview\u002Freference.html#tensor) - Tensor structured data used in GPU operations\n* [Kompute Algorithm](https:\u002F\u002Fkompute.cc\u002Foverview\u002Freference.html#algorithm) - Abstraction for (shader) logic executed in the GPU\n\nTo see a full breakdown you can read further in the [C++ Class Reference](https:\u002F\u002Fkompute.cc\u002Foverview\u002Freference.html).\n\n\u003Ctable>\n\u003Cth>\nFull Architecture\n\u003C\u002Fth>\n\u003Cth>\nSimplified Kompute Components\n\u003C\u002Fth>\n\u003Ctr>\n\u003Ctd width=30%>\n\n\n\u003Cimg width=\"100%\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKomputeProject_kompute_readme_f93e5e049605.jpg\">\n\n\u003Cbr>\n\u003Cbr>\n(very tiny, check the \u003Ca href=\"https:\u002F\u002Fethicalml.github.io\u002Fvulkan-kompute\u002Foverview\u002Freference.html\">full reference diagram in docs for details\u003C\u002Fa>)\n\u003Cbr>\n\u003Cbr>\n\n\u003Cimg width=\"100%\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKomputeProject_kompute_readme_32dd7e6369b2.png\">\n\n\u003C\u002Ftd>\n\u003Ctd>\n\u003Cimg width=\"100%\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKomputeProject_kompute_readme_4b42ea28ba89.jpg\">\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n\n## Asynchronous and Parallel Operations\n\nKompute provides flexibility to run operations in an asynrchonous way through vk::Fences. Furthermore, Kompute enables for explicit allocation of queues, which allow for parallel execution of operations across queue families.\n\nThe image below provides an intuition on how Kompute Sequences can be allocated to different queues to enable parallel execution based on hardware. You can see the [hands on example](https:\u002F\u002Fkompute.cc\u002Foverview\u002Fadvanced-examples.html#parallel-operations), as well as the [detailed documentation page](https:\u002F\u002Fkompute.cc\u002Foverview\u002Fasync-parallel.html) describing how it would work using an NVIDIA 1650 as an example. \n\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKomputeProject_kompute_readme_5e35b0e4aec7.jpg)\n\n## Mobile Enabled\n\nKompute has been optimized to work in mobile environments. The [build system](#build-overview) enables for dynamic loading of the Vulkan shared library for Android environments, together with a working [Android NDK wrapper](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Ftree\u002Fmaster\u002Fvk_ndk_wrapper_include) for the CPP headers.\n\n\u003Ctable>\n\u003Ctr>\n\n\u003Ctd width=\"70%\">\n\u003Cp>\nFor a full deep dive you can read the blog post \"\u003Ca href=\"https:\u002F\u002Ftowardsdatascience.com\u002Fgpu-accelerated-machine-learning-in-your-mobile-applications-using-the-android-ndk-vulkan-kompute-1e9da37b7617\">Supercharging your Mobile Apps with On-Device GPU Accelerated Machine Learning\u003C\u002Fa>\". \n\nYou can also access the \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Ftree\u002Fv0.4.0\u002Fexamples\u002Fandroid\u002Fandroid-simple\">end-to-end example code\u003C\u002Fa> in the repository, which can be run using android studio.\n\n\u003C\u002Fp>\n\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKomputeProject_kompute_readme_dd6269796ef2.jpg\">\n\n\u003C\u002Ftd>\n\n\n\u003Ctd width=\"30%\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKomputeProject_kompute_readme_e03f034e95d2.jpg\">\n\u003C\u002Ftd>\n\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n## More examples\n\n### Simple examples\n\n* [Simple multiplication example](https:\u002F\u002Fkompute.cc\u002Foverview\u002Fadvanced-examples.html#simple-shader-example)\n* [Record batch commands with a Kompute Sequence](https:\u002F\u002Fkompute.cc\u002Foverview\u002Fadvanced-examples.html#record-batch-commands)\n* [Run Asynchronous Operations](https:\u002F\u002Fkompute.cc\u002Foverview\u002Fadvanced-examples.html#asynchronous-operations)\n* [Run Parallel Operations Across Multiple GPU Queues](https:\u002F\u002Fkompute.cc\u002Foverview\u002Fadvanced-examples.html#parallel-operations)\n* [Create your custom Kompute Operations](https:\u002F\u002Fkompute.cc\u002Foverview\u002Fadvanced-examples.html#your-custom-kompute-operation)\n* [Implementing logistic regression from scratch](https:\u002F\u002Fkompute.cc\u002Foverview\u002Fadvanced-examples.html#logistic-regression-example)\n\n### End-to-end examples\n\n* [Machine Learning Logistic Regression Implementation](https:\u002F\u002Ftowardsdatascience.com\u002Fmachine-learning-and-data-processing-in-the-gpu-with-vulkan-kompute-c9350e5e5d3a)\n* [Parallelizing GPU-intensive Workloads via Multi-Queue Operations](https:\u002F\u002Ftowardsdatascience.com\u002Fparallelizing-heavy-gpu-workloads-via-multi-queue-operations-50a38b15a1dc)\n* [Android NDK Mobile Kompute ML Application](https:\u002F\u002Ftowardsdatascience.com\u002Fgpu-accelerated-machine-learning-in-your-mobile-applications-using-the-android-ndk-vulkan-kompute-1e9da37b7617)\n* [Game Development Kompute ML in Godot Engine](https:\u002F\u002Ftowardsdatascience.com\u002Fsupercharging-game-development-with-gpu-accelerated-ml-using-vulkan-kompute-the-godot-game-engine-4e75a84ea9f0)\n\n## Python Package\n\nBesides the C++ core SDK you can also use the Python package of Kompute, which exposes the same core functionality, and supports interoperability with Python objects like Lists, Numpy Arrays, etc.\n\nThe only dependencies are Python 3.5+ and Cmake 3.4.1+. You can install Kompute from the [Python pypi package](https:\u002F\u002Fpypi.org\u002Fproject\u002Fkp\u002F) using the following command.\n\n```\npip install kp\n```\n\nYou can also install from master branch using:\n\n```\npip install git+git:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute.git@master\n```\n\nFor further details you can read the [Python Package documentation](https:\u002F\u002Fkompute.cc\u002Foverview\u002Fpython-package.html) or the [Python Class Reference documentation](https:\u002F\u002Fkompute.cc\u002Foverview\u002Fpython-reference.html).\n\n## C++ Build Overview\n\nThe build system provided uses `cmake`, which allows for cross platform builds.\n\nThe top level `Makefile` provides a set of optimized configurations for development as well as the docker image build, but you can start a build with the following command:\n\n```\n   cmake -Bbuild\n```\n\nYou also are able to add Kompute in your repo with `add_subdirectory` - the [Android example CMakeLists.txt file](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fblob\u002F7c8c0eeba2cdc098349fcd999102bb2cca1bf711\u002Fexamples\u002Fandroid\u002Fandroid-simple\u002Fapp\u002Fsrc\u002Fmain\u002Fcpp\u002FCMakeLists.txt#L3) shows how this would be done.\n\nFor a more advanced overview of the build configuration check out the [Build System Deep Dive](https:\u002F\u002Fkompute.cc\u002Foverview\u002Fbuild-system.html) documentation.\n\n## Kompute Development\n\nWe appreciate PRs and Issues. If you want to contribute try checking the \"Good first issue\" tag, but even using Kompute and reporting issues is a great contribution!\n\n### Contributing\n\n#### Dev Dependencies\n\n* Testing\n    + GTest\n* Documentation\n    + Doxygen (with Dot)\n    + Sphynx\n\n#### Development\n\n* Follows Mozilla C++ Style Guide https:\u002F\u002Fwww-archive.mozilla.org\u002Fhacking\u002Fmozilla-style-guide.html\n    + Uses post-commit hook to run the linter, you can set it up so it runs the linter before commit\n    + All dependencies are defined in vcpkg.json \n* Uses cmake as build system, and provides a top level makefile with recommended command\n* Uses xxd (or xxd.exe windows 64bit port) to convert shader spirv to header files\n* Uses doxygen and sphinx for documentation and autodocs\n* Uses vcpkg for finding the dependencies, it's the recommended set up to retrieve the libraries\n\nIf you want to run with debug layers you can add them with the `KOMPUTE_ENV_DEBUG_LAYERS` parameter as:\n\n```\nexport KOMPUTE_ENV_DEBUG_LAYERS=\"VK_LAYER_LUNARG_api_dump\"\n```\n\n##### Updating documentation\n\nTo update the documentation you will need to:\n* Run the gendoxygen target in the build system\n* Run the gensphynx target in the build-system \n* Push to github pages with `make push_docs_to_ghpages`\n\n##### Running tests\n\nRunning the unit tests has been significantly simplified for contributors.\n\nThe tests run on CPU, and can be triggered using the ACT command line interface (https:\u002F\u002Fgithub.com\u002Fnektos\u002Fact) - once you install the command line (And start the Docker daemon) you just have to type:\n\n```\n$ act\n\n[Python Tests\u002Fpython-tests] 🚀  Start image=axsauze\u002Fkompute-builder:0.2\n[C++ Tests\u002Fcpp-tests      ] 🚀  Start image=axsauze\u002Fkompute-builder:0.2\n[C++ Tests\u002Fcpp-tests      ]   🐳  docker run image=axsauze\u002Fkompute-builder:0.2 entrypoint=[\"\u002Fusr\u002Fbin\u002Ftail\" \"-f\" \"\u002Fdev\u002Fnull\"] cmd=[]\n[Python Tests\u002Fpython-tests]   🐳  docker run image=axsauze\u002Fkompute-builder:0.2 entrypoint=[\"\u002Fusr\u002Fbin\u002Ftail\" \"-f\" \"\u002Fdev\u002Fnull\"] cmd=[]\n...\n```\n\nThe repository contains unit tests for the C++ and Python code, and can be found under the `test\u002F` and `python\u002Ftest` folder.\n\nThe tests are currently run through the CI using Github Actions. It uses the images found in `docker-builders\u002F`.\n\nIn order to minimise hardware requirements the tests can run without a GPU, directly in the CPU using [Swiftshader](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fswiftshader).\n\nFor more information on how the CI and tests are setup, you can go to the [CI, Docker and Tests Section](https:\u002F\u002Fkompute.cc\u002Foverview\u002Fci-tests.html) in the documentation.\n\n## Motivations\n\nThis project started after seeing that a lot of new and renowned ML & DL projects like Pytorch, Tensorflow, Alibaba DNN, Tencent NCNN - among others - have either integrated or are looking to integrate the Vulkan SDK to add mobile (and cross-vendor) GPU support.\n\nThe Vulkan SDK offers a great low level interface that enables for highly specialized optimizations - however it comes at a cost of highly verbose code which requires 500-2000 lines of code to even begin writing application code. This has resulted in each of these projects having to implement the same baseline to abstract the non-compute related features of the Vulkan SDK. This large amount of non-standardised boiler-plate can result in limited knowledge transfer, higher chance of unique framework implementation bugs being introduced, etc.\n\nWe are currently developing Kompute not to hide the Vulkan SDK interface (as it's incredibly well designed) but to augment it with a direct focus on the Vulkan SDK's GPU computing capabilities. [This article](https:\u002F\u002Ftowardsdatascience.com\u002Fmachine-learning-and-data-processing-in-the-gpu-with-vulkan-kompute-c9350e5e5d3a) provides a high level overview of the motivations of Kompute, together with a set of hands on examples that introduce both GPU computing as well as the core Kompute architecture.\n","![GitHub](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FVersion-0.7.0-green.svg)\n![GitHub](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FC++-14—20-purple.svg)\n![GitHub](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FBuild-cmake-red.svg)\n![GitHub](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPython-3.7—3.9-blue.svg)\n![GitHub](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-Apache-black.svg)\n[![CII 最佳实践](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKomputeProject_kompute_readme_eda489f85045.png)](https:\u002F\u002Fbestpractices.coreinfrastructure.org\u002Fprojects\u002F4834)\n\n\u003Ctable>\n\u003Ctr>\n\n\u003Ctd width=\"20%\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKomputeProject_kompute_readme_dc8450d57873.jpg\">\n\u003C\u002Ftd>\n\n\u003Ctd>\n\n\u003Ch1>Kompute\u003C\u002Fh1>\n\u003Ch3>面向跨厂商显卡（AMD、Qualcomm、NVIDIA 等）的通用 GPU 计算框架\u003C\u002Fh3>\n\n\u003C\u002Ftd>\n\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n\u003Ch4>极速、支持移动端、异步，并针对高级 GPU 加速用例进行了优化。\u003C\u002Fh4>\n\n💬 [加入 Discord 社区与定期会议](https:\u002F\u002Fkompute.cc\u002Foverview\u002Fcommunity.html) 🔋 [文档](https:\u002F\u002Fkompute.cc) 💻 [博客文章](https:\u002F\u002Fmedium.com\u002F@AxSaucedo\u002Fmachine-learning-and-data-processing-in-the-gpu-with-vulkan-kompute-c9350e5e5d3a) ⌨ [示例](#more-examples) 💾\n\n\u003Chr>\n\n##### Kompute 得到 Linux 基金会的支持，作为 LF AI & Data 基金会的 \u003Ca href=\"https:\u002F\u002Flfaidata.foundation\u002Fblog\u002F2021\u002F08\u002F26\u002Fkompute-joins-lf-ai-data-as-new-sandbox-project\u002F\">托管项目\u003C\u002Fa>。\n\n\u003Ctable>\n\u003Ctr>\n\u003Ctd>\n\u003Ca href=\"https:\u002F\u002Fwww.linuxfoundation.org\u002Fprojects\u002F\">\n\u003Cimg src=\"https:\u002F\u002Fupload.wikimedia.org\u002Fwikipedia\u002Fcommons\u002Fb\u002Fb5\u002FLinux_Foundation_logo.png\">\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\u003Ctd>\n\u003Ca href=\"https:\u002F\u002Flfaidata.foundation\u002Fprojects\u002F\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKomputeProject_kompute_readme_577df18433e0.png\">\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n\n## 核心原则与特性\n\n* 具有 [C++ SDK](#your-first-kompute-c) 的灵活 Python 模块，用于优化\n* 通过 GPU 家族队列支持 [异步与并行处理](#asynchronous-and-parallel-operations)\n* 支持 [移动端](#mobile-enabled)，提供基于 Android NDK 的多架构示例\n* BYOV：采用 [自带 Vulkan 设计](#motivations)，可与现有 Vulkan 应用程序良好兼容\n* 明确定义 GPU 和主机之间的 [内存所有权与内存管理关系](https:\u002F\u002Fkompute.cc\u002Foverview\u002Fmemory-management.html)\n* 强健的代码库，单元测试覆盖率达 [90%](https:\u002F\u002Fkompute.cc\u002Fcodecov\u002F)\n* 适用于 [机器学习 🤖](https:\u002F\u002Ftowardsdatascience.com\u002Fmachine-learning-and-data-processing-in-the-gpu-with-vulkan-kompute-c9350e5e5d3a)、[移动开发 📱](https:\u002F\u002Ftowardsdatascience.com\u002Fgpu-accelerated-machine-learning-in-your-mobile-applications-using-the-android-ndk-vulkan-kompute-1e9da37b7617) 和 [游戏开发 🎮](https:\u002F\u002Ftowardsdatascience.com\u002Fsupercharging-game-development-with-gpu-accelerated-ml-using-vulkan-kompute-the-godot-game-engine-4e75a84ea9f0) 等高级场景。\n* 活跃的社区，包括 [每月例会、Discord 聊天等](https:\u002F\u002Fkompute.cc\u002Foverview\u002Fcommunity.html)\n\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKomputeProject_kompute_readme_86f02f999bbd.gif)\n\n## 使用 Kompute 的项目 ❤️  🤖\n\n* [GPT4ALL](https:\u002F\u002Fgithub.com\u002Fnomic-ai\u002Fgpt4all) ![](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fnomic-ai\u002Fgpt4all.svg?style=social) - 一个开源的边缘大型语言模型生态系统，可在本地 CPU 和几乎所有 GPU 上运行。\n* [llama.cpp](https:\u002F\u002Fgithub.com\u002Fggerganov\u002Fllama.cpp) ![](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fggerganov\u002Fllama.cpp.svg?style=social) - Facebook LLaMA 模型的 C\u002FC++ 移植版本（现已停止维护）。\n* [tpoisonooo\u002Fhow-to-optimize-gemm](https:\u002F\u002Fgithub.com\u002Ftpoisonooo\u002Fhow-to-optimize-gemm) ![](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Ftpoisonooo\u002Fhow-to-optimize-gemm.svg?style=social) - 行主序矩阵乘法优化。\n* [vkJAX](https:\u002F\u002Fgithub.com\u002Falexander-g\u002FvkJAX) ![](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Falexander-g\u002FvkJAX.svg?style=social) - 面向 Vulkan 的 JAX 解释器。\n\n## 快速上手\n\n下方提供了使用 C++ 和 Python Kompute 接口的 GPU 乘法示例。\n\n如有疑问或讨论，您可 [加入 Discord](https:\u002F\u002Fdiscord.gg\u002FMaH5Jv5zwv)，打开 [GitHub 问题](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002Fnew)，或阅读 [文档](https:\u002F\u002Fkompute.cc\u002F)。\n\n### 你的第一个 Kompute (C++) \n\nC++ 接口提供了对 Kompute 原生组件的低级访问，从而实现[高级优化](https:\u002F\u002Fkompute.cc\u002Foverview\u002Fasync-parallel.html)以及[组件扩展](https:\u002F\u002Fkompute.cc\u002Foverview\u002Freference.html)。\n\n```c++\n\nvoid kompute(const std::string& shader) {\n\n    \u002F\u002F 1. 使用默认设置创建 Kompute 管理器（设备 0、第一个队列，无扩展）\n    kp::Manager mgr; \n\n    \u002F\u002F 2. 通过管理器创建并初始化 Kompute 张量\n\n    \u002F\u002F 默认张量构造函数简化了浮点值的创建\n    auto tensorInA = mgr.tensor({ 2., 2., 2. });\n    auto tensorInB = mgr.tensor({ 1., 2., 3. });\n    \u002F\u002F 显式类型构造函数支持 uint32、int32、double、float 和 bool\n    auto tensorOutA = mgr.tensorT\u003Cuint32_t>({ 0, 0, 0 });\n    auto tensorOutB = mgr.tensorT\u003Cuint32_t>({ 0, 0, 0 });\n\n    std::vector\u003Cstd::shared_ptr\u003Ckp::Memory>> params = {tensorInA, tensorInB, tensorOutA, tensorOutB};\n\n    \u002F\u002F 3. 基于着色器创建算法（支持缓冲区和推送\u002F特殊常量）\n    kp::Workgroup workgroup({3, 1, 1});\n    std::vector\u003Cfloat> specConsts({ 2 });\n    std::vector\u003Cfloat> pushConstsA({ 2.0 });\n    std::vector\u003Cfloat> pushConstsB({ 3.0 });\n\n    auto algorithm = mgr.algorithm(params,\n                                   \u002F\u002F 编译源代码请参阅文档中的着色器部分\n                                   compileSource(shader),\n                                   workgroup,\n                                   specConsts,\n                                   pushConstsA);\n\n    \u002F\u002F 4. 使用序列同步运行操作\n    mgr.sequence()\n        ->record\u003Ckp::OpSyncDevice>(params)\n        ->record\u003Ckp::OpAlgoDispatch>(algorithm) \u002F\u002F 绑定默认推送常量\n        ->eval() \u002F\u002F 执行记录的两个操作\n        ->record\u003Ckp::OpAlgoDispatch>(algorithm, pushConstsB) \u002F\u002F 覆盖推送常量\n        ->eval(); \u002F\u002F 仅执行最后一条记录的操作\n\n    \u002F\u002F 5. 异步从 GPU 同步结果\n    auto sq = mgr.sequence();\n    sq->evalAsync\u003Ckp::OpSyncLocal>(params);\n\n    \u002F\u002F ... 在 GPU 完成计算的同时异步执行其他工作\n\n    sq->evalAwait();\n\n    \u002F\u002F 打印第一个输出：{ 4, 8, 12 }\n    for (const float& elem : tensorOutA->vector()) std::cout \u003C\u003C elem \u003C\u003C \"  \";\n    \u002F\u002F 打印第二个输出：{ 10, 10, 10 }\n    for (const float& elem : tensorOutB->vector()) std::cout \u003C\u003C elem \u003C\u003C \"  \";\n\n} \u002F\u002F 管理并释放所有 CPU 和 GPU 内存资源\n\nint main() {\n\n    \u002F\u002F 定义原始字符串着色器（或使用 Kompute 工具将其编译为 SPIRV \u002F C++ 头文件）。该着色器展示了包括常量、缓冲区等在内的主要组件。\n    std::string shader = (R\"(\n        #version 450\n\n        layout (local_size_x = 1) in;\n\n        \u002F\u002F 输入张量的绑定索引相对于传入参数的索引\n        layout(set = 0, binding = 0) buffer buf_in_a { float in_a[]; };\n        layout(set = 0, binding = 1) buffer buf_in_b { float in_b[]; };\n        layout(set = 0, binding = 2) buffer buf_out_a { uint out_a[]; };\n        layout(set = 0, binding = 3) buffer buf_out_b { uint out_b[]; };\n\n        \u002F\u002F Kompute 支持在调度时更新的推送常量\n        layout(push_constant) uniform PushConstants {\n            float val;\n        } push_const;\n\n        \u002F\u002F Kompute 还支持在初始化时使用的特殊常量\n        layout(constant_id = 0) const float const_one = 0;\n\n        void main() {\n            uint index = gl_GlobalInvocationID.x;\n            out_a[index] += uint( in_a[index] * in_b[index] );\n            out_b[index] += uint( const_one * push_const.val );\n        }\n    )\");\n\n    \u002F\u002F 使用上述定义的函数和原始字符串着色器运行程序\n    kompute(shader);\n}\n\n```\n\n### 你的第一个 Kompute（Python）\n\n[Python 软件包](https:\u002F\u002Fkompute.cc\u002Foverview\u002Fpython-package.html) 提供了一个[高级交互式接口](https:\u002F\u002Fkompute.cc\u002Foverview\u002Fpython-reference.html)，它既支持实验性操作，又能确保高性能和快速的开发流程。\n\n```python\n\nfrom .utils import compile_source # 使用 python\u002Ftest\u002Futils 中的工具函数\n\ndef kompute(shader):\n    # 1. 使用默认设置创建 Kompute 管理器（设备 0、第一个队列且无扩展）\n    mgr = kp.Manager()\n\n    # 2. 通过管理器创建并初始化 Kompute 张量\n\n    # 默认张量构造函数简化了浮点值的创建\n    tensor_in_a = mgr.tensor([2, 2, 2])\n    tensor_in_b = mgr.tensor([1, 2, 3])\n    # 显式类型构造函数支持 uint32、int32、double、float 和 bool\n    tensor_out_a = mgr.tensor_t(np.array([0, 0, 0], dtype=np.uint32))\n    tensor_out_b = mgr.tensor_t(np.array([0, 0, 0], dtype=np.uint32))\n    assert(t_data.data_type() == kp.DataTypes.uint)\n\n    params = [tensor_in_a, tensor_in_b, tensor_out_a, tensor_out_b]\n\n    # 3. 根据着色器创建算法（支持缓冲区及推送\u002F特殊常量）\n    workgroup = (3, 1, 1)\n    spec_consts = [2]\n    push_consts_a = [2]\n    push_consts_b = [3]\n\n    # 编译着色器请参阅文档中的着色器部分\n    spirv = compile_source(shader)\n\n    algo = mgr.algorithm(params, spirv, workgroup, spec_consts, push_consts_a)\n\n    # 4. 使用序列同步运行操作\n    (mgr.sequence()\n        .record(kp.OpTensorSyncDevice(params))\n        .record(kp.OpAlgoDispatch(algo)) # 绑定提供的默认推送常量\n        .eval() # 执行记录的两个操作\n        .record(kp.OpAlgoDispatch(algo, push_consts_b)) # 覆盖推送常量\n        .eval()) # 只执行最后一条记录的操作\n\n    # 5. 异步将结果从 GPU 同步回主机\n    sq = mgr.sequence()\n    sq.eval_async(kp.OpTensorSyncLocal(params))\n\n    # ... 在 GPU 完成工作的同时异步进行其他任务\n\n    sq.eval_await()\n\n    # 打印第一个输出：{ 4, 8, 12 }\n    print(tensor_out_a)\n    # 打印第二个输出：{ 10, 10, 10 }\n    print(tensor_out_b)\n\nif __name__ == \"__main__\":\n\n    # 定义一个原始字符串着色器（或使用 Kompute 工具将其编译为 SPIRV \u002F C++ 头文件）。此着色器展示了包括常量、缓冲区等在内的主要组件\n    shader = \"\"\"\n        #version 450\n\n        layout (local_size_x = 1) in;\n\n        \u002F\u002F 输入张量的绑定索引相对于传入参数的索引\n        layout(set = 0, binding = 0) buffer buf_in_a { float in_a[]; };\n        layout(set = 0, binding = 1) buffer buf_in_b { float in_b[]; };\n        layout(set = 0, binding = 2) buffer buf_out_a { uint out_a[]; };\n        layout(set = 0, binding = 3) buffer buf_out_b { uint out_b[]; };\n\n        \u002F\u002F Kompute 支持在调度时更新的推送常量\n        layout(push_constant) uniform PushConstants {\n            float val;\n        } push_const;\n\n        \u002F\u002F Kompute 还支持在初始化时使用的特殊常量\n        layout(constant_id = 0) const float const_one = 0;\n\n        void main() {\n            uint index = gl_GlobalInvocationID.x;\n            out_a[index] += uint( in_a[index] * in_b[index] );\n            out_b[index] += uint( const_one * push_const.val );\n        }\n    \"\"\"\n\n    kompute(shader)\n\n```\n\n### 交互式笔记本与动手视频\n\n你可以尝试使用免费 GPU 的 Colab 交互式笔记本。可用的示例包括以下 Python 和 C++ 示例：\n\n\u003Ctable>\n\u003Ctr>\n\n\u003Ctd width=\"50%\">\n\u003Ch5>尝试来自 \u003Ca href=\"https:\u002F\u002Ftowardsdatascience.com\u002Fmachine-learning-and-data-processing-in-the-gpu-with-vulkan-kompute-c9350e5e5d3a\">博客文章\u003C\u002Fa> 的交互式 \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fdrive\u002F1l3hNSq2AcJ5j2E3YIw__jKy5n6M615GP?usp=sharing\">C++ Colab\u003C\u002Fa>\u003C\u002Fh5>\n\u003C\u002Ftd>\n\n\u003Ctd>\n\u003Ch5>尝试来自 \u003Ca href=\"https:\u002F\u002Ftowardsdatascience.com\u002Fbeyond-cuda-gpu-accelerated-python-for-machine-learning-in-cross-vendor-graphics-cards-made-simple-6cc828a45cc3\">博客文章\u003C\u002Fa> 的交互式 \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fdrive\u002F15uQ7qMZuOyk8JcXF-3SB2R5yNFW21I4P\">Python Colab\u003C\u002Fa>\u003C\u002Fh5>\n\u003C\u002Ftd>\n\n\u003C\u002Ftr>\n\u003Ctr>\n\n\u003Ctd width=\"50%\">\n\u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fdrive\u002F1l3hNSq2AcJ5j2E3YIw__jKy5n6M615GP?authuser=1#scrollTo=1BipBsO-fQRD\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKomputeProject_kompute_readme_ad3710067380.jpg\">\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\n\u003Ctd>\n\u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fdrive\u002F15uQ7qMZuOyk8JcXF-3SB2R5yNFW21I4P\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKomputeProject_kompute_readme_8fb88833330d.jpg\">\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n\n你还可以观看在 FOSDEM 2021 大会上发表的两场演讲。\n\n这两段视频都带有时间戳，方便你跳转到最相关的内容——两者的介绍和动机部分几乎相同，因此可以直接跳到更具体的内容。\n\n\u003Ctable>\n\u003Ctr>\n\n\u003Ctd width=\"50%\">\n\u003Ch5>观看面向 \u003Ca href=\"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=Xz4fiQNmGSA\">C++ 爱好者\u003C\u002Fa> 的视频\u003C\u002Fh5>\n\u003C\u002Ftd>\n\n\u003Ctd>\n\u003Ch5>观看面向 \u003Ca href=\"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=AJRyZ09IUdg\">Python 和机器学习爱好者\u003C\u002Fa> 的视频\u003C\u002Fh5>\n\u003C\u002Ftd>\n\n\u003C\u002Ftr>\n\u003Ctr>\n\n\u003Ctd width=\"50%\">\n\u003Ca href=\"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=Xz4fiQNmGSA\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKomputeProject_kompute_readme_f162af685f26.png\">\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\n\u003Ctd>\n\u003Ca href=\"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=AJRyZ09IUdg\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKomputeProject_kompute_readme_814ebd3cb678.png\">\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n## 架构概览\n\nKompute 的核心架构包括以下组件：\n* [Kompute Manager](https:\u002F\u002Fkompute.cc\u002Foverview\u002Freference.html#manager) - 基础编排器，用于创建和管理设备及子组件\n* [Kompute Sequence](https:\u002F\u002Fkompute.cc\u002Foverview\u002Freference.html#sequence) - 可作为批处理发送到 GPU 的操作容器\n* [Kompute Operation (Base)](https:\u002F\u002Fkompute.cc\u002Foverview\u002Freference.html#algorithm) - 所有操作均继承的基类\n* [Kompute Tensor](https:\u002F\u002Fkompute.cc\u002Foverview\u002Freference.html#tensor) - 在 GPU 操作中使用的张量结构化数据\n* [Kompute Algorithm](https:\u002F\u002Fkompute.cc\u002Foverview\u002Freference.html#algorithm) - 在 GPU 中执行的（着色器）逻辑抽象\n\n如需完整分解，可进一步阅读 [C++ 类参考文档](https:\u002F\u002Fkompute.cc\u002Foverview\u002Freference.html)。\n\n\u003Ctable>\n\u003Cth>\n完整架构\n\u003C\u002Fth>\n\u003Cth>\n简化后的 Kompute 组件\n\u003C\u002Fth>\n\u003Ctr>\n\u003Ctd width=30%>\n\n\n\u003Cimg width=\"100%\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKomputeProject_kompute_readme_f93e5e049605.jpg\">\n\n\u003Cbr>\n\u003Cbr>\n（非常小，请查看 \u003Ca href=\"https:\u002F\u002Fethicalml.github.io\u002Fvulkan-kompute\u002Foverview\u002Freference.html\">文档中的完整参考图以获取详细信息\u003C\u002Fa>）\n\u003Cbr>\n\u003Cbr>\n\n\u003Cimg width=\"100%\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKomputeProject_kompute_readme_32dd7e6369b2.png\">\n\n\u003C\u002Ftd>\n\u003Ctd>\n\u003Cimg width=\"100%\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKomputeProject_kompute_readme_4b42ea28ba89.jpg\">\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n\n## 异步与并行操作\n\nKompute 通过 vk::Fences 提供了以异步方式运行操作的灵活性。此外，Kompute 还支持显式分配队列，从而允许跨队列族并行执行操作。\n\n下图直观展示了如何将 Kompute Sequence 分配到不同队列，以根据硬件实现并行执行。您可以在 [动手示例](https:\u002F\u002Fkompute.cc\u002Foverview\u002Fadvanced-examples.html#parallel-operations) 和 [详细文档页面](https:\u002F\u002Fkompute.cc\u002Foverview\u002Fasync-parallel.html) 中了解其工作原理，其中以 NVIDIA 1650 为例进行了说明。\n\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKomputeProject_kompute_readme_5e35b0e4aec7.jpg)\n\n## 移动端支持\n\nKompute 已针对移动环境进行了优化。[构建系统](#build-overview)支持在 Android 环境中动态加载 Vulkan 共享库，并提供适用于 CPP 头文件的 [Android NDK 封装](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Ftree\u002Fmaster\u002Fvk_ndk_wrapper_include)。\n\n\u003Ctable>\n\u003Ctr>\n\n\u003Ctd width=\"70%\">\n\u003Cp>\n如需深入了解，可阅读博客文章“\u003Ca href=\"https:\u002F\u002Ftowardsdatascience.com\u002Fgpu-accelerated-machine-learning-in-your-mobile-applications-using-the-android-ndk-vulkan-kompute-1e9da37b7617\">利用 Android NDK、Vulkan 和 Kompute 为您的移动应用注入 GPU 加速机器学习动力\u003C\u002Fa>”。\n\n您还可以访问仓库中的 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Ftree\u002Fv0.4.0\u002Fexamples\u002Fandroid\u002Fandroid-simple\">端到端示例代码\u003C\u002Fa>,该代码可通过 Android Studio 运行。\n\n\u003C\u002Fp>\n\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKomputeProject_kompute_readme_dd6269796ef2.jpg\">\n\n\u003C\u002Ftd>\n\n\n\u003Ctd width=\"30%\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKomputeProject_kompute_readme_e03f034e95d2.jpg\">\n\u003C\u002Ftd>\n\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n## 更多示例\n\n### 简单示例\n\n* [简单乘法示例](https:\u002F\u002Fkompute.cc\u002Foverview\u002Fadvanced-examples.html#simple-shader-example)\n* [使用 Kompute Sequence 记录批处理命令](https:\u002F\u002Fkompute.cc\u002Foverview\u002Fadvanced-examples.html#record-batch-commands)\n* [运行异步操作](https:\u002F\u002Fkompute.cc\u002Foverview\u002Fadvanced-examples.html#asynchronous-operations)\n* [在多个 GPU 队列上并行运行操作](https:\u002F\u002Fkompute.cc\u002Foverview\u002Fadvanced-examples.html#parallel-operations)\n* [创建自定义 Kompute 操作](https:\u002F\u002Fkompute.cc\u002Foverview\u002Fadvanced-examples.html#your-custom-kompute-operation)\n* [从零开始实现逻辑回归](https:\u002F\u002Fkompute.cc\u002Foverview\u002Fadvanced-examples.html#logistic-regression-example)\n\n### 端到端示例\n\n* [GPU 上的机器学习逻辑回归实现](https:\u002F\u002Ftowardsdatascience.com\u002Fmachine-learning-and-data-processing-in-the-gpu-with-vulkan-kompute-c9350e5e5d3a)\n* [通过多队列操作并行化 GPU 密集型工作负载](https:\u002F\u002Ftowardsdatascience.com\u002Fparallelizing-heavy-gpu-workloads-via-multi-queue-operations-50a38b15a1dc)\n* [Android NDK 移动 Kompute ML 应用程序](https:\u002F\u002Ftowardsdatascience.com\u002Fgpu-accelerated-machine-learning-in-your-mobile-applications-using-the-android-ndk-vulkan-kompute-1e9da37b7617)\n* [Godot 引擎中的游戏开发 Kompute ML](https:\u002F\u002Ftowardsdatascience.com\u002Fsupercharging-game-development-with-gpu-accelerated-ml-using-vulkan-kompute-the-godot-game-engine-4e75a84ea9f0)\n\n## Python 包\n\n除了 C++ 核心 SDK 外，您还可以使用 Kompute 的 Python 包，它提供了相同的核心功能，并支持与 Python 对象（如列表、NumPy 数组等）的互操作。\n\n唯一的依赖项是 Python 3.5+ 和 CMake 3.4.1+。您可以通过以下命令从 [Python pypi 包](https:\u002F\u002Fpypi.org\u002Fproject\u002Fkp\u002F) 安装 Kompute：\n\n```\npip install kp\n```\n\n您也可以从主分支安装：\n\n```\npip install git+git:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute.git@master\n```\n\n有关更多详情，请参阅 [Python 包文档](https:\u002F\u002Fkompute.cc\u002Foverview\u002Fpython-package.html) 或 [Python 类参考文档](https:\u002F\u002Fkompute.cc\u002Foverview\u002Fpython-reference.html)。\n\n## C++ 构建概览\n\n提供的构建系统使用 `cmake`，支持跨平台构建。\n\n顶级 `Makefile` 提供了针对开发以及 Docker 镜像构建的优化配置，但您也可以通过以下命令开始构建：\n\n```\n   cmake -Bbuild\n```\n\n您还可以使用 `add_subdirectory` 将 Kompute 添加到您的项目中——[Android 示例 CMakeLists.txt 文件](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fblob\u002F7c8c0eeba2cdc098349fcd999102bb2cca1bf711\u002Fexamples\u002Fandroid\u002Fandroid-simple\u002Fapp\u002Fsrc\u002Fmain\u002Fcpp\u002FCMakeLists.txt#L3)展示了具体做法。\n\n如需更深入地了解构建配置，请参阅 [构建系统深度解析](https:\u002F\u002Fkompute.cc\u002Foverview\u002Fbuild-system.html) 文档。\n\n## Kompute 开发\n\n我们欢迎 PR 和问题提交。如果您想贡献代码，可以查看“Good first issue”标签；即使只是使用 Kompute 并报告问题，也是一种很好的贡献！\n\n### 贡献\n\n#### 开发依赖\n\n* 测试\n    + GTest\n* 文档\n    + Doxygen（带 Dot）\n    + Sphinx\n\n#### 开发规范\n\n* 遵循 Mozilla C++ 代码风格指南：https:\u002F\u002Fwww-archive.mozilla.org\u002Fhacking\u002Fmozilla-style-guide.html\n    + 使用提交后钩子运行代码检查工具；可以配置为在提交前自动执行代码检查。\n    + 所有依赖项均在 `vcpkg.json` 文件中定义。\n* 使用 CMake 作为构建系统，并提供顶层 Makefile，其中包含推荐的构建命令。\n* 使用 `xxd`（或 Windows 64 位版本 `xxd.exe`）将着色器 SPIR-V 文件转换为头文件。\n* 使用 Doxygen 和 Sphinx 生成文档及自动文档。\n* 使用 vcpkg 管理依赖库，这是推荐的获取第三方库的方式。\n\n若需启用调试层，可通过设置 `KOMPUTE_ENV_DEBUG_LAYERS` 参数来添加，例如：\n\n```\nexport KOMPUTE_ENV_DEBUG_LAYERS=\"VK_LAYER_LUNARG_api_dump\"\n```\n\n##### 更新文档\n\n要更新文档，您需要：\n* 在构建系统中运行 `gendoxygen` 目标；\n* 在构建系统中运行 `gensphynx` 目标；\n* 使用 `make push_docs_to_ghpages` 命令将文档推送到 GitHub Pages。\n\n##### 运行测试\n\n对于贡献者而言，运行单元测试已大大简化。\n\n测试在 CPU 上执行，可通过 ACT 命令行工具（https:\u002F\u002Fgithub.com\u002Fnektos\u002Fact）触发。安装该工具并启动 Docker 守护进程后，只需输入以下命令即可：\n\n```\n$ act\n\n[Python Tests\u002Fpython-tests] 🚀  Start image=axsauze\u002Fkompute-builder:0.2\n[C++ Tests\u002Fcpp-tests      ] 🚀  Start image=axsauze\u002Fkompute-builder:0.2\n[C++ Tests\u002Fcpp-tests      ]   🐳  docker run image=axsauze\u002Fkompute-builder:0.2 entrypoint=[\"\u002Fusr\u002Fbin\u002Ftail\" \"-f\" \"\u002Fdev\u002Fnull\"] cmd=[]\n[Python Tests\u002Fpython-tests]   🐳  docker run image=axsauze\u002Fkompute-builder:0.2 entrypoint=[\"\u002Fusr\u002Fbin\u002Ftail\" \"-f\" \"\u002Fdev\u002Fnull\"] cmd=[]\n...\n```\n\n仓库包含 C++ 和 Python 代码的单元测试，分别位于 `test\u002F` 和 `python\u002Ftest` 目录下。\n\n目前，这些测试通过 GitHub Actions 的 CI 系统运行，并使用 `docker-builders\u002F` 中的镜像。\n\n为降低硬件要求，测试可以在没有 GPU 的情况下直接在 CPU 上运行，借助 [SwiftShader](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fswiftshader) 实现。\n\n有关 CI 和测试的具体配置，请参阅文档中的 [CI、Docker 和测试章节](https:\u002F\u002Fkompute.cc\u002Foverview\u002Fci-tests.html)。\n\n## 动机\n\n本项目源于观察到许多新兴且知名的机器学习和深度学习框架，如 PyTorch、TensorFlow、阿里巴巴 DNN、腾讯 NCNN 等，均已集成或正计划集成 Vulkan SDK，以支持移动端及其他厂商的 GPU 加速计算功能。\n\nVulkan SDK 提供了一个优秀的底层接口，能够实现高度定制化的优化；然而，其代码编写较为冗长，仅开始编写应用代码就需要 500 到 2000 行代码。这导致各个项目不得不重复实现相同的抽象层，用于屏蔽 Vulkan SDK 中与计算无关的功能。这种大量非标准化的样板代码不仅限制了知识共享，还增加了引入特定框架独有缺陷的风险等。\n\n我们当前开发 Kompute 的目的，并非隐藏设计精良的 Vulkan SDK 接口，而是围绕 Vulkan SDK 的 GPU 计算能力进行扩展和完善。[这篇文章](https:\u002F\u002Ftowardsdatascience.com\u002Fmachine-learning-and-data-processing-in-the-gpu-with-vulkan-kompute-c9350e5e5d3a) 对 Kompute 的开发动机进行了高层次的概述，并结合实际示例介绍了 GPU 计算以及 Kompute 的核心架构。","# Kompute 快速上手指南\n\nKompute 是一个通用的 GPU 计算框架，支持跨厂商显卡（AMD、Qualcomm、NVIDIA 等），基于 Vulkan API 构建。它提供高性能的异步并行处理能力，适用于机器学习、移动开发及游戏开发等场景。\n\n## 环境准备\n\n### 系统要求\n- **操作系统**: Linux, Windows, macOS (需 MoltenVK), Android\n- **GPU**: 支持 Vulkan 的显卡 (AMD, NVIDIA, Intel, Qualcomm Adreno 等)\n- **编译器**: 支持 C++14 至 C++20 的编译器 (GCC, Clang, MSVC)\n- **Python**: 3.7 - 3.9 (如需使用 Python 接口)\n\n### 前置依赖\n确保系统已安装以下工具：\n- **CMake**: 3.15 或更高版本\n- **Vulkan SDK**: 必须安装并配置 `VULKAN_SDK` 环境变量\n- **Git**: 用于克隆代码库\n\n> **提示**: 国内用户可通过 [华为云镜像](https:\u002F\u002Fmirrors.huaweicloud.com\u002F) 或 [清华大学镜像站](https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002F) 加速下载 Vulkan SDK 及相关依赖。\n\n## 安装步骤\n\n### 方式一：从源码构建 (C++ SDK)\n\n```bash\n# 1. 克隆仓库\ngit clone https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute.git\ncd kompute\n\n# 2. 创建构建目录\nmkdir build && cd build\n\n# 3. 配置 CMake (可选：指定 Python 路径或安装前缀)\ncmake .. -DKOMPUTE_BUILD_PYTHON=OFF\n\n# 4. 编译并安装\ncmake --build . --config Release\nsudo cmake --install .\n```\n\n### 方式二：安装 Python 包\n\n推荐使用 pip 直接安装预编译包（需确保系统已安装 Vulkan 运行时）：\n\n```bash\npip install kp\n```\n\n若需从源码构建 Python 绑定：\n\n```bash\npip install .[dev]\n```\n\n## 基本使用\n\n### C++ 示例：GPU 矩阵乘法\n\n以下示例演示如何创建 Manager、初始化张量、定义 Shader 并执行异步计算。\n\n```c++\n#include \"kompute\u002FKompute.hpp\"\n#include \u003Ciostream>\n#include \u003Cvector>\n\nvoid kompute(const std::string& shader) {\n    \u002F\u002F 1. 创建 Kompute Manager (默认使用设备 0)\n    kp::Manager mgr; \n\n    \u002F\u002F 2. 创建并初始化张量\n    auto tensorInA = mgr.tensor({ 2., 2., 2. });\n    auto tensorInB = mgr.tensor({ 1., 2., 3. });\n    auto tensorOutA = mgr.tensorT\u003Cuint32_t>({ 0, 0, 0 });\n    auto tensorOutB = mgr.tensorT\u003Cuint32_t>({ 0, 0, 0 });\n\n    std::vector\u003Cstd::shared_ptr\u003Ckp::Memory>> params = {tensorInA, tensorInB, tensorOutA, tensorOutB};\n\n    \u002F\u002F 3. 基于 Shader 创建算法\n    kp::Workgroup workgroup({3, 1, 1});\n    std::vector\u003Cfloat> specConsts({ 2 });\n    std::vector\u003Cfloat> pushConstsA({ 2.0 });\n    std::vector\u003Cfloat> pushConstsB({ 3.0 });\n\n    \u002F\u002F 假设 compileSource 函数已将 GLSL 源码编译为 SPIR-V\n    auto algorithm = mgr.algorithm(params, compileSource(shader), workgroup, specConsts, pushConstsA);\n\n    \u002F\u002F 4. 同步执行操作序列\n    mgr.sequence()\n        ->record\u003Ckp::OpSyncDevice>(params)\n        ->record\u003Ckp::OpAlgoDispatch>(algorithm) \n        ->eval()\n        ->record\u003Ckp::OpAlgoDispatch>(algorithm, pushConstsB) \n        ->eval();\n\n    \u002F\u002F 5. 异步同步结果回主机\n    auto sq = mgr.sequence();\n    sq->evalAsync\u003Ckp::OpSyncLocal>(params);\n\n    \u002F\u002F ... 此处可执行其他异步任务\n\n    sq->evalAwait();\n\n    \u002F\u002F 输出结果\n    for (const float& elem : tensorOutA->vector()) std::cout \u003C\u003C elem \u003C\u003C \"  \"; \u002F\u002F 输出: 4  8  12\n    std::cout \u003C\u003C std::endl;\n    for (const float& elem : tensorOutB->vector()) std::cout \u003C\u003C elem \u003C\u003C \"  \"; \u002F\u002F 输出: 10  10  10\n}\n\nint main() {\n    \u002F\u002F 定义 GLSL 计算着色器\n    std::string shader = (R\"(\n        #version 450\n        layout (local_size_x = 1) in;\n        layout(set = 0, binding = 0) buffer buf_in_a { float in_a[]; };\n        layout(set = 0, binding = 1) buffer buf_in_b { float in_b[]; };\n        layout(set = 0, binding = 2) buffer buf_out_a { uint out_a[]; };\n        layout(set = 0, binding = 3) buffer buf_out_b { uint out_b[]; };\n        layout(push_constant) uniform PushConstants { float val; } push_const;\n        layout(constant_id = 0) const float const_one = 0;\n\n        void main() {\n            uint index = gl_GlobalInvocationID.x;\n            out_a[index] += uint( in_a[index] * in_b[index] );\n            out_b[index] += uint( const_one * push_const.val );\n        }\n    )\");\n\n    kompute(shader);\n    return 0;\n}\n```\n\n### Python 示例：交互式 GPU 计算\n\nPython 接口提供了更简洁的高级 API，适合快速原型开发。\n\n```python\nimport numpy as np\nimport kp\nfrom utils import compile_source  # 需自行实现或使用测试工具中的 compile_source\n\ndef kompute(shader):\n    # 1. 创建 Manager\n    mgr = kp.Manager()\n\n    # 2. 创建张量\n    tensor_in_a = mgr.tensor([2, 2, 2])\n    tensor_in_b = mgr.tensor([1, 2, 3])\n    tensor_out_a = mgr.tensor_t(np.array([0, 0, 0], dtype=np.uint32))\n    tensor_out_b = mgr.tensor_t(np.array([0, 0, 0], dtype=np.uint32))\n\n    params = [tensor_in_a, tensor_in_b, tensor_out_a, tensor_out_b]\n\n    # 3. 创建算法\n    workgroup = (3, 1, 1)\n    spec_consts = [2]\n    push_consts_a = [2]\n    push_consts_b = [3]\n\n    spirv = compile_source(shader)\n    algo = mgr.algorithm(params, spirv, workgroup, spec_consts, push_consts_a)\n\n    # 4. 执行序列\n    (mgr.sequence()\n        .record(kp.OpTensorSyncDevice(params))\n        .record(kp.OpAlgoDispatch(algo))\n        .eval()\n        .record(kp.OpAlgoDispatch(algo, push_consts_b))\n        .eval())\n\n    # 5. 异步获取结果\n    sq = mgr.sequence()\n    sq.eval_async(kp.OpTensorSyncLocal(params))\n    \n    # ... 执行其他任务\n    \n    sq.eval_await()\n\n    print(tensor_out_a)  # 输出: [4 8 12]\n    print(tensor_out_b)  # 输出: [10 10 10]\n\nif __name__ == \"__main__\":\n    shader = \"\"\"\n        #version 450\n        layout (local_size_x = 1) in;\n        layout(set = 0, binding = 0) buffer buf_in_a { float in_a[]; };\n        layout(set = 0, binding = 1) buffer buf_in_b { float in_b[]; };\n        layout(set = 0, binding = 2) buffer buf_out_a { uint out_a[]; };\n        layout(set = 0, binding = 3) buffer buf_out_b { uint out_b[]; };\n        layout(push_constant) uniform PushConstants { float val; } push_const;\n        layout(constant_id = 0) const float const_one = 0;\n\n        void main() {\n            uint index = gl_GlobalInvocationID.x;\n            out_a[index] += uint( in_a[index] * in_b[index] );\n            out_b[index] += uint( const_one * push_const.val );\n        }\n    \"\"\"\n    kompute(shader)\n```","一家移动端 AI 初创团队正在开发一款运行在安卓手机上的实时图像增强应用，需要在不同品牌的手机 GPU 上高效执行复杂的矩阵运算。\n\n### 没有 kompute 时\n- **硬件兼容性差**：团队不得不为 NVIDIA、AMD 和高通等不同厂商的 GPU 编写多套底层代码，维护成本极高且容易出错。\n- **开发门槛高**：直接使用 Vulkan API 进行通用计算需要处理繁琐的内存管理和同步机制，导致核心算法开发进度缓慢。\n- **性能瓶颈明显**：由于缺乏高效的异步队列支持，CPU 与 GPU 之间的数据传输经常阻塞主线程，造成应用界面卡顿。\n- **跨平台部署难**：难以将现有的 C++ 算法无缝迁移到移动端的 Android NDK 环境，限制了产品的覆盖范围。\n\n### 使用 kompute 后\n- **一次编写，处处运行**：kompute 基于 Vulkan 构建，自动屏蔽了底层硬件差异，同一套代码即可在数千种跨厂商显卡上流畅运行。\n- **开发效率倍增**：通过简洁的 Python 模块和 C++ SDK，开发者无需关注底层细节，只需聚焦业务逻辑，大幅缩短了研发周期。\n- **极致并行性能**：利用 kompute 原生的异步处理特性，GPU 家族队列实现了数据流水线作业，彻底消除了传输阻塞，帧率显著提升。\n- **原生移动支持**：凭借对 Android NDK 的深度优化，团队轻松将高性能计算模型部署到各类安卓架构设备上，实现了真正的端侧智能。\n\nkompute 让开发者能够以最低的成本释放跨平台 GPU 的算力潜能，真正实现了“一次开发，全端加速”。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FKomputeProject_kompute_86f02f99.gif","KomputeProject","The Kompute Project","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002FKomputeProject_16632b6c.jpg","Kompute is a Sandbox Project in LF AI & Data Foundation focused on advancing the GPU acceleration ecosystem through cross-vendor graphics card tooling.",null,"a@ethical.institute","https:\u002F\u002Fkompute.cc","https:\u002F\u002Fgithub.com\u002FKomputeProject",[81,85,89,93,97,101],{"name":82,"color":83,"percentage":84},"C++","#f34b7d",77.7,{"name":86,"color":87,"percentage":88},"CMake","#DA3434",10.4,{"name":90,"color":91,"percentage":92},"Python","#3572A5",8.2,{"name":94,"color":95,"percentage":96},"Makefile","#427819",1.4,{"name":98,"color":99,"percentage":100},"Shell","#89e051",1.2,{"name":102,"color":103,"percentage":104},"Dockerfile","#384d54",1,2486,186,"2026-04-05T17:47:33","Apache-2.0","Linux, macOS, Windows, Android","必需。支持跨厂商显卡（AMD, Qualcomm, NVIDIA 等），需支持 Vulkan API。无特定显存大小要求，取决于具体算法负载。不使用 CUDA，基于 Vulkan。","未说明",{"notes":113,"python":114,"dependencies":115},"该工具是一个基于 Vulkan 的通用 GPU 计算框架，不支持 CUDA，而是通过 Vulkan API 实现跨厂商（包括 AMD、NVIDIA、Qualcomm）和跨平台（含移动端 Android NDK）加速。开发需安装 Vulkan SDK 和 CMake。支持同步和异步操作模式，并提供 C++ SDK 和 Python 绑定。","3.7—3.9",[116,86,117,118],"C++14-20","Vulkan SDK","SPIRV-Tools (用于编译 Shader)",[14],[121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136],"vulkan","vulkan-compute","vulkan-example","vulkan-tutorial","vulkan-demos","vulkan-compute-tutorial","vulkan-compute-framework","vulkan-compute-example","cpp","machine-learning","machine-learning-gpu","deep-learning","deep-learning-gpu","gpgpu","gpu-computing","python","2026-03-27T02:49:30.150509","2026-04-07T13:27:29.096892",[140,145,150,155,160],{"id":141,"question_zh":142,"answer_zh":143,"source_url":144},22113,"在 Android 上使用 Chaquopy (Python) 调用 Kompute 时遇到原生崩溃 (SIGSEGV) 怎么办？","该问题通常是由于在 pybind 层初始化 Manager 对象时发生了转换错误。解决方案是不要在 Python\u002Fpybind 层直接初始化 Manager，而是将 Manager 的初始化逻辑移至 C++ 调用层，然后在 Python 中仅调用该 C++ 封装好的方法。此外，建议编写一个小型的测试包装器（toy wrapper）来单独测试张量创建功能，以隔离问题。","https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F429",{"id":146,"question_zh":147,"answer_zh":148,"source_url":149},22114,"如何在 Raspberry Pi 上使用 Mesa Vulkan 驱动程序运行 Kompute？","Raspberry Pi 现已支持符合 Vulkan 1.0 标准的 Mesa 驱动程序。要在此类设备上运行，需确保驱动权限配置正确。最佳实践是保持驱动文件所有者为 root，并使用 `chmod ugo+r` 命令修改权限，使其对其他用户和组可见，从而允许非 root 用户访问 Vulkan 设备。","https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F131",{"id":151,"question_zh":152,"answer_zh":153,"source_url":154},22115,"Push Constants (推送常量) 在测试中返回零值或不生效怎么办？","如果遇到 Push Constants 值全为 0 的情况，这通常是一个已知的兼容性问题或版本缺陷。维护者曾发布专门的修复补丁（如 PR #174）。建议检查并应用最新的代码更新，或者在测试时明确指定常量的数据类型（例如尝试更改 constants type），并参考项目中 `TestPushConstants` 相关的测试用例进行验证。","https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F168",{"id":156,"question_zh":157,"answer_zh":158,"source_url":159},22116,"是否有深度学习卷积神经网络 (CNN) 的实现示例？","是的，仓库中已经包含了一个基础的 VGG7 示例，展示了如何使用 Kompute 实现卷积神经网络。您可以查看相关的 Pull Request (#227) 获取代码。此外，项目后续版本增加了对 Push Constants 和 Specialization Constants 的支持，这有助于优化此类算法的实现性能。","https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F162",{"id":161,"question_zh":162,"answer_zh":163,"source_url":164},22117,"在 Windows 上编译示例时遇到 CMake 错误提示找不到 'Vulkan-Headers' 或 'fmt' 的 CMakeLists.txt 怎么办？","此错误通常是因为构建配置试图使用子模块构建 (`KOMPUTE_OPT_REPO_SUBMODULE_BUILD=1`)，但对应的子目录（如 `external\u002FVulkan-Headers` 或 `external\u002Ffmt`）为空或未正确初始化。解决方法是确保在克隆仓库后运行了 `git submodule update --init --recursive` 命令，或者调整 CMake 配置选项，不使用子模块构建而改为链接系统已安装的依赖库。","https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F261",[166,171,176,181,186,191,196,201,206,211,216,221,226,231],{"id":167,"version":168,"summary_zh":169,"released_at":170},135837,"v0.9.0","## [v0.9.0](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Ftree\u002Fv0.9.0)\n\n[完整更新日志](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fcompare\u002Fv0.8.1...v0.9.0)\n\n**已合并的拉取请求：**\n\n- 重新添加缺失的 codecov CMake 目标 [\\#345](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fpull\u002F345) ([axsaucedo](https:\u002F\u002Fgithub.com\u002Faxsaucedo))\n- 修复示例构建问题 [\\#340](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fpull\u002F340) ([ToKiNoBug](https:\u002F\u002Fgithub.com\u002FToKiNoBug))\n- 修复 find_package，启用 CPack 并支持 clang-cl [\\#338](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fpull\u002F338) ([ToKiNoBug](https:\u002F\u002Fgithub.com\u002FToKiNoBug))\n- 修复 cmake install2（已签名确认）[\\#337](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fpull\u002F337) ([ToKiNoBug](https:\u002F\u002Fgithub.com\u002FToKiNoBug))\n- \\[性能 bug\\] 修复 Sequence::clear() [\\#328](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fpull\u002F328) ([Crydsch](https:\u002F\u002Fgithub.com\u002FCrydsch))\n- 修复 Vulkan 版本解析问题 [\\#325](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fpull\u002F325) ([Crydsch](https:\u002F\u002Fgithub.com\u002FCrydsch))\n- 添加存储张量功能及测试 [\\#316](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fpull\u002F316) ([axsaucedo](https:\u002F\u002Fgithub.com\u002Faxsaucedo))\n- 修复 spdlog 日志记录相关问题 [\\#315](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fpull\u002F315) ([axsaucedo](https:\u002F\u002Fgithub.com\u002Faxsaucedo))\n- 添加 CI 配置以确保示例自动测试 [\\#314](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fpull\u002F314) ([axsaucedo](https:\u002F\u002Fgithub.com\u002Faxsaucedo))\n- 将默认头文件更新为 Vulkan v1.3.231 [\\#312](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fpull\u002F312) ([axsaucedo](https:\u002F\u002Fgithub.com\u002Faxsaucedo))\n- 修复 gcc 12 下的构建错误 [\\#311](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fpull\u002F311) ([hungrymonkey](https:\u002F\u002Fgithub.com\u002Fhungrymonkey))\n- 升级到 Vulkan 1.3 [\\#309](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fpull\u002F309) ([axsaucedo](https:\u002F\u002Fgithub.com\u002Faxsaucedo))\n- 更新 fetch_content 的 Git 仓库和提交哈希 [\\#307](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fpull\u002F307) ([COM8](https:\u002F\u002Fgithub.com\u002FCOM8))\n- 修正注释中的两处错误，并移除一个未使用的 vk::MappedMemoryRange [\\#301](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fpull\u002F301) ([MiroPalmu](https:\u002F\u002Fgithub.com\u002FMiroPalmu))\n- 添加获取当前 vk 实例的选项 [\\#292](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fpull\u002F292) ([COM8](https:\u002F\u002Fgithub.com\u002FCOM8))\n- 修复（CMakeLists.txt）：拼写错误 [\\#291](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fpull\u002F291) ([tpoisonooo](https:\u002F\u002Fgithub.com\u002Ftpoisonooo))\n- 修复编译器警告 [\\#289](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fpull\u002F289) ([COM8](https:\u002F\u002Fgithub.com\u002FCOM8))\n- 重构构建系统 [\\#287](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fpull\u002F287) ([COM8](https:\u002F\u002Fgithub.com\u002FCOM8))\n- 添加 .clang-format 文件并格式化所有代码 [\\#286](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fpull\u002F286) ([COM8](https:\u002F\u002Fgithub.com\u002FCOM8))\n- 为 fmt 8.x 修复枚举类问题 [\\#285](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fpull\u002F285","2024-01-20T15:39:17",{"id":172,"version":173,"summary_zh":174,"released_at":175},135838,"v0.8.1","## [v0.8.1](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Ftree\u002Fv0.8.1)\n\n[完整更新日志](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fcompare\u002Fv0.8.0...v0.8.1)\n\n**已关闭的问题：**\n\n- README 和文档中的 Discord 链接已失效 [\\#276](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F276)\n- 官网示例中的拼写错误以及 6500 XT 被识别为未知 GPU [\\#275](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F275)\n- \\[提问\\] 如何禁用所有日志？ [\\#274](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F274)\n- 完整图表出现 404 错误 [\\#271](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F271)\n- 启用 `KOMPUTE_ENABLE_SPDLOG` 时出现错误 [\\#268](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F268)\n- 添加 KOMPUTE_LOG_ACTIVE_LEVEL 替代现有的 SPDLOG_ACTIVE_LEVEL [\\#267](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F267)\n- 更新\u002F修复 Android 项目 [\\#264](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F264)\n- 将示例和文档中的 compileSource 函数更新为正确版本 [\\#261](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F261)\n- 从技术上讲，Kompute 是否可以被修改以支持数据可视化？ [\\#260](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F260)\n- 集成显卡的数据传输 [\\#258](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F258)\n- Python“入门”示例运行失败 [\\#252](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F252)\n- README 中的 Python 示例无法运行 [\\#248](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F248)\n- 运行 Android 应用程序 [\\#234](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F234)\n\n**已合并的拉取请求：**\n\n- 为 Kompute 添加了活动日志级别定义 [\\#280](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fpull\u002F280) ([axsaucedo](https:\u002F\u002Fgithub.com\u002Faxsaucedo))\n- 修复 TestDestroy.TestDestroyTensorSingle 测试 [\\#279](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fpull\u002F279) ([ScheissSchiesser](https:\u002F\u002Fgithub.com\u002FScheissSchiesser))\n- 更新了 Discord 链接 [\\#277](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fpull\u002F277) ([axsaucedo](https:\u002F\u002Fgithub.com\u002Faxsaucedo))\n- 格式化（src\u002FAlgorithm）：修复拼写错误 [\\#273](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fpull\u002F273) ([tpoisonooo](https:\u002F\u002Fgithub.com\u002Ftpoisonooo))\n- 按照博客文章步骤修复 Android 示例 [\\#266](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fpull\u002F266) ([axsaucedo](https:\u002F\u002Fgithub.com\u002Faxsaucedo))\n- 添加治理结构及 TSC 章程 [\\#263](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fpull\u002F263) ([axsaucedo](https:\u002F\u002Fgithub.com\u002Faxsaucedo))\n- 更新 array_multiplication 示例使其正常工作 [\\#262](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fpull\u002F262) ([axsaucedo](https:\u002F\u002Fgithub.com\u002Faxsaucedo))\n- 更新了代码格式 [\\#257](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fpull\u002F257) ([axsaucedo](https:\u002F\u002Fgithub.com\u002Faxsaucedo))\n- 修复文档中的前两个 Python 示例 [\\#256](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fpull\u002F256) ([lopuhin](https:\u002F\u002Fgithub.com\u002Flopuhin))\n- 从 INSTALL_INTERFACE 中移除不存在的“single_include”项 [\\#254](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fpull\u002F254) ([axsaucedo](https:\u002F\u002Fgithub.com\u002Faxsaucedo))","2022-04-13T10:24:33",{"id":177,"version":178,"summary_zh":179,"released_at":180},135839,"v0.8.0","## [v0.8.0](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Ftree\u002Fv0.8.0)\n\n[完整变更日志](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fcompare\u002Fv0.7.0...v0.8.0)\n\n**已关闭的问题：**\n\n- KOMPUTE_ENV_DEBUG_LAYERS 未设置会导致 KP_LOG_DEBUG 传递 envLayerNamesVal==nullptr [\\#245](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F245)\n- 在测试中扩展 Windows 平台的工具着色器辅助函数 [\\#240](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F240)\n- 导入 kp 后 Python 发生段错误 [\\#230](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F230)\n- 简单和扩展的 Python 示例无法运行（v 0.7.0）[\\#228](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F228)\n- Python macOS 问题（ImportError: dlopen(...): 找不到合适的映像文件。找到的文件是 mach-o，但架构不匹配）[\\#223](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F223)\n- Python macOS 问题（符号未找到：__PyThreadState_Current ... 预期在扁平命名空间中）[\\#221](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F221)\n- 完成 Kompute 向 Linux 基金会的迁移 [\\#216](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F216)\n- CMake 错误：导入的目标 \"kompute::kompute\" 包含不存在的路径 \"\u002Fusr\u002Flocal\u002Fsingle_include\" [\\#212](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F212)\n- 由于 \\#168 引入的不兼容性，导致 Vulkan 1.1.x 版本出现问题 [\\#209](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F209)\n- 外部库 [\\#201](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F201)\n- 开始建立 Slack 群组或 Discord，以提供替代或更快速的问题解答渠道 [\\#198](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F198)\n- 测试 SingleSequenceRecord 不是线程安全的，并且在 AMD 显卡上会失败 [\\#196](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F196)\n- 更新 Kompute 头文件，使其引用 glslang 头文件，用于安装和构建接口 [\\#193](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F193)\n- 在 glslang 仓库中的问题解决后，集成 glslang 的 find_package 文件 [\\#191](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F191)\n- 发布 0.7.0 版本 [\\#187](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F187)\n- 获取可用设备的数量 [\\#185](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F185)\n- 深度学习卷积神经网络 (CNN) 示例实现 [\\#162](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F162)\n- 创建一个在树莓派上使用 Mesa Vulkan 驱动编译并运行的示例 [\\#131](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F131)\n- 添加对 VK_EXT_debug_utils 标签的支持 [\\#110](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fissues\u002F110)\n\n**已合并的拉取请求：**\n\n- 修复空调试日志导致 fmt 库抛出异常的问题 [\\#246](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fpull\u002F246) ([axsaucedo](https:\u002F\u002Fgithub.com\u002Faxsaucedo))\n- 0.8.0 版本发布 [\\#244](https:\u002F\u002Fgithub.com\u002FKomputeProject\u002Fkompute\u002Fpull\u002F244) ([axsaucedo](https:\u002F\u002Fgithub.com\u002Faxsaucedo))\n- 添加对 diffe 的支持","2021-09-16T04:09:57",{"id":182,"version":183,"summary_zh":184,"released_at":185},135840,"v0.7.0","# 发布 v0.7.0\n\n0.7.0 版本引入了非常丰富的功能列表，高层次概览包括：\n\n* 支持推送常量\n* 支持专用化常量\n* 支持布尔、浮点、双精度浮点、32位整数和32位无符号整数张量数据类型\n* 能够在管理器外部定义操作\n* 能够在管理器外部创建算法\n* 新增 OpMemoryBarrier 以添加自定义内存屏障\n* 新增 OpAlgoDispatch 以使用推送常量调度算法\n* 新的序列接口\n* 新的内存关系，均由顶层管理器通过弱引用来管理，从而允许智能指针正确地析构对象\n* 使用 gcov + lcov 的代码覆盖率度量\n\n**已实现的增强：**\n\n- 将非 spdlog 打印函数扩展为使用 std::format [\\#158](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fissues\u002F158)\n- 添加 codecov 代码覆盖率报告 [\\#145](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fissues\u002F145)\n- 探讨从 Tensor 中完全移除 `std::vector mData;`，转而始终将数据存储在主机可见的缓冲区内存中（待定）[\\#144](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fissues\u002F144)\n- 更新所有示例以匹配 0.7.0 中的破坏性变更 [\\#141](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fissues\u002F141)\n- 在返回 Python numpy \u002F array 时避免拷贝 [\\#139](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fissues\u002F139)\n- 在 CI 中覆盖所有 Python 和 C++ 测试 [\\#121](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fissues\u002F121)\n- 为简单工作组示例添加 C++ 测试 [\\#117](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fissues\u002F117)\n- 在 OpAlgo 中暴露推送常量 [\\#54](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fissues\u002F54)\n- 暴露在 OpTensor 操作中创建屏障的能力 [\\#45](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fissues\u002F45)\n- 在管理器中创建删除函数，用于释放\u002F销毁序列 [\\#36](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fissues\u002F36)\n- 使专用化数据可扩展 [\\#12](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fissues\u002F12)\n- 支持 Kompute 张量的多种数据类型 [\\#2](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fissues\u002F2)\n- 添加了重新录制序列的功能并更新了文档 [\\#171](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fpull\u002F171)（由 axsaucedo 实现）\n- 将非 spdlog 打印函数扩展为使用 fmt::format \u002F fmt::print [\\#159](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fpull\u002F159)（由 axsaucedo 实现）\n- 添加了对自定义 SpecializedConstants 的支持，并移除了 KomputeWorkgroup 类 [\\#151](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fpull\u002F151)（由 axsaucedo 实现）\n- 为张量和序列添加了销毁函数（命名和对象形式）[\\#146](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fpull\u002F146)（由 axsaucedo 实现）\n\n**修复的 bug：**\n\n- 我的情况中 push_constant 无法正常工作？[\\#168](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fissues\u002F168)\n- 描述符池集合未被…","2021-03-14T16:03:43",{"id":187,"version":188,"summary_zh":189,"released_at":190},135841,"v0.6.0","## [v0.6.0](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Ftree\u002Fv0.6.0)\n\n[完整更新日志](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fcompare\u002Fv0.5.1...v0.6.0)\n\n**已实现的增强功能：**\n\n- 为 Python 的 `log_level` 函数添加简单测试 [\\#120](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fissues\u002F120)\n- 进一步支持 NumPy [\\#104](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fissues\u002F104)\n- SWIG 语法错误——更改关键字顺序。[\\#94](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fissues\u002F94)\n- 创建模拟对象以隔离组件的单元测试 [\\#8](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fissues\u002F8)\n- 禁止零尺寸张量 [\\#129](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fpull\u002F129)（[alexander-g](https:\u002F\u002Fgithub.com\u002Falexander-g)）\n- 向 CI 添加更多测试，并提供使用 SwiftShader 构建的 Docker 镜像 [\\#119](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fpull\u002F119)（[axsaucedo](https:\u002F\u002Fgithub.com\u002Faxsaucedo)）\n- Python 中的工作组 [\\#116](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fpull\u002F116)（[alexander-g](https:\u002F\u002Fgithub.com\u002Falexander-g)）\n- Ubuntu CI [\\#115](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fpull\u002F115)（[alexander-g](https:\u002F\u002Fgithub.com\u002Falexander-g)）\n- 更快的 `set_data()` 方法 [\\#109](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fpull\u002F109)（[alexander-g](https:\u002F\u002Fgithub.com\u002Falexander-g)）\n- Python 中 `eval_algo_str` 方法的字符串参数 [\\#105](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fpull\u002F105)（[alexander-g](https:\u002F\u002Fgithub.com\u002Falexander-g)）\n- 添加了 `numpy()` 方法 [\\#103](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fpull\u002F103)（[alexander-g](https:\u002F\u002Fgithub.com\u002Falexander-g)）\n\n**已修复的缺陷：**\n\n- [PYTHON] 在传递原始着色器字符串时，支持使用字符串参数代替列表作为 `eval_algo_data` 的输入 [\\#93](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fissues\u002F93)\n- [PYTHON] 修复 Python 实现中的日志级别（使用 pybind 的日志函数）[\\#92](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fissues\u002F92)\n\n**已关闭的问题：**\n\n- 为自定义操作添加文档 [\\#128](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fissues\u002F128)\n- Python Kompute 中的 NumPy 数组支持和工作组配置 [\\#124](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fissues\u002F124)\n- 移除 Python 模块中对 spdlog 的引用 [\\#122](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fissues\u002F122)\n- 使用 GitHub Actions 为 PR 设置自动化 CI 测试 [\\#114](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fissues\u002F114)\n- Python 示例中的类型错误（pyshader）。[\\#111](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fissues\u002F111)\n- 更新所有对操作的引用，使其不再使用模板 [\\#101](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fissues\u002F101)\n- 创建 Kompute Manager 时出现未定义引用错误 [\\#100](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fissues\u002F100)\n\n**已合并的拉取请求：**\n\n- 122 移除 Python 中的 spdlog 引用 [\\#123](https:\u002F\u002Fgithub.com\u002FEthicalML\u002Fvulkan-kompute\u002Fpull\u002F12","2021-01-31T12:01:30",{"id":192,"version":193,"summary_zh":194,"released_at":195},135842,"v0.5.1","* 修复了 Kompute-go SWIG 集成中的错误 #94\n* 为 Tensor 添加了 Python 列表操作（__setitem__、__len__ 等）\n* 新增 [Python 博文](https:\u002F\u002Ftowardsdatascience.com\u002Fbeyond-cuda-gpu-accelerated-python-for-machine-learning-in-cross-vendor-graphics-cards-made-simple-6cc828a45cc3)","2020-11-14T08:59:29",{"id":197,"version":198,"summary_zh":199,"released_at":200},135843,"v0.5.0","* 将所有 OpAlgoBase 组件迁移至使用动态布局，而非模板 #26、#57\n* 更新所有示例，默认使用 SPIR-V 字节码 #86\n* 增加对 Vulkan Headers HPP v1.2.154 及以上版本的兼容性 #84\n* 为 Kompute 添加 Python PyPI 包 #87\n* 增加 Python 接口函数，可直接处理 Python 中的 SPIR-V 字节码\n* 实现了 Python 版本的逻辑回归算法\n* 扩展示例，展示如何使用 pyshader 进行更符合 Python 风格的 GPU 开发\n* 在 Python 包中默认启用 spdlog 构建\n* 通过 PyPI 实现多平台 Python 包安装：https:\u002F\u002Fpypi.org\u002Fproject\u002Fkp\u002F\n* 增加 Python 日志级别配置功能\n* 为 Kompute 库添加 Python 绑定\n* 添加 Python 测试，展示使用 Manager 和 Sequences 的核心功能\n* 补充文档，集成 Python 类引用（计划实现自动化）\n* 将 Sequences 的返回类型由 weak_ptr 改为 shader_ptr\n* 通过 init 成员函数实现 Sequence 的内存管理\n* 明确定义 VulkanDestroy 函数，以兼容 VulkanHPP 1.2.155 至 1.2.158 版本\n* 从 OpAlgoBase 函数中移除模板参数（新增 Op*.cpp 文件）\n* 将 Python 构建集成到主 CMake 文件中\n* 添加 pybind11 子模块\n* 增加 Sequence 测试，验证通过 init 成员函数进行的内存管理\n* 更新端到端示例\n* 补充 Python 文档及更多示例","2020-11-08T16:53:07",{"id":202,"version":203,"summary_zh":204,"released_at":205},135844,"v0.4.1","* 支持 Vulkan HPP 1.2.155 及以上版本（已测试至 1.2.158 每个版本）\n* 更新了用于测试多个 Vulkan SDK 版本的 Linux Docker 镜像\n* 为子模块构建增加了 CCLS 支持（除了 vcpkg 构建之外）\n* 引入了核心依赖的子模块，以便在使用特定版本的依赖进行测试时更具灵活性\n* 添加了构建选项，用于配置子模块构建与基于工具链的 vcpkg 构建\n* 移除了范围打印语句，从而消除了对 fmt 的显式依赖\n* 修正了私有\u002F保护成员变量的语法错误\n* 由贡献者 https:\u002F\u002Faur.archlinux.org\u002Fpackages\u002Fvulkan-kompute-git\u002F 通过 #81 提交的 AUR 软件包已添加","2020-11-01T20:22:22",{"id":207,"version":208,"summary_zh":209,"released_at":210},135845,"v0.4.0","* 为管理器和序列添加了 async\u002Fawait 功能\n* 将 fence 资源作为成员对象添加到 Sequence 类中\n* 确保序列的 begin() 函数会清除之前的操作\n* 确保当序列处于运行状态时，不会调用 begin() 方法\n* 确保管理器在调用默认函数时会创建新的序列\n* 在管理器中增加了对多队列的支持，并支持在序列上进行显式分配\n* 修复了 Linux（Ubuntu）上的编译警告\n* 在管理器中添加了 createManagedSequence 方法，支持自动生成默认序列名称\n* 添加了异步和并行处理的测试用例\n* 将 LogisticRegression 着色器以 C++ 头文件形式添加\n* 增加了高级示例的文档\n* 增加了着色器转 C++ 头文件脚本的文档\n* 为 kompute.cc 域名添加了 CNAME 记录","2020-10-18T20:37:29",{"id":212,"version":213,"summary_zh":214,"released_at":215},135846,"v0.3.2","* 启用 Vulkan 库的动态加载，以支持 Vulkan\n* 添加了支持 Vulkan HPP 的 Android NDK Wrapper\n* 将 CMake 的最低标准更新为 C++14\n* 降低 CMake 的最低要求至 3.4.1\n* 在 AggregateHeader 中添加了新的着色器文件 shaderlogisticregression\n* 为单头文件 `Kompte.hpp` 添加了 `#pragma once` 防止重复包含的保护\n* 更新 `createComputePipeline` 函数，使其返回 Result 而不是 ResultValue，以保持向后兼容性\n* 为 Android 添加了新的计算标志，包括：\n    + KOMPUTE_OPT_INSTALL\n    + KOMPUTE_OPT_ANDROID_BUILD\n    + KOMPUTE_OPT_DISABLE_VK_DEBUG_LAYERS\n    + KOMPUTE_VK_API_VERSION\n    + KOMPUTE_VK_API_MINOR_VERSION\n    + KOMPUTE_VK_API_MAJOR_VERSION\n","2020-10-04T17:16:44",{"id":217,"version":218,"summary_zh":219,"released_at":220},135847,"v0.3.1","* #61 Fixed bug in OpAlgoRhsLhsOut\r\n* #60 Add example of how vulkan kompute can be used for ML in Godot Game Engine \r\n* #59 Changed c++ to 14 from 17 for support with older frameworks","2020-09-20T16:37:00",{"id":222,"version":223,"summary_zh":224,"released_at":225},135848,"v0.3.0","* #50 - Added documentation and testing for reusing recorded commands\r\n* #19 - Added Machine Learning example with Kompute \r\n* #40 - Provide further granularity for handling tensor data\r\n* #39 - Create OpTensorSyncLocal and OpTensorSyncDevice operations\r\n* #43 - Renamed OpCreateTensor to OpTensorCreate to align with tensor operations\r\n* #43 - Fixed OpTensorCreate not mapping data for host tensors\r\n* #47 - Add preSubmit function to OpBase to account for multiple eval commands\r\n* #58 - Add standalone examples that show using Kompute from scratch\r\n* #58 - Make Kompute installable locally \r\n* #56 - Remove OpAlgoBase copy tensor functionality to delegate to OpTensorSync","2020-09-13T11:12:38",{"id":227,"version":228,"summary_zh":229,"released_at":230},135849,"v0.2.0","* #18 - Improve access to underlying data for speed and ease of access\r\n* #17 - Enabled for compute shaders to be passed as files or strings\r\n* #13 - Enable OpCreateTensor to receive more than 1 tensor\r\n* #11 - Add default specialisation data to algorithm holding all tensor sizes\r\n* #9 - Added documentation automated with doxygen and sphinx\r\n* #15 - Memory profiling and ensured no memory leaks explicitly\r\n* #30 - Removed spdlog as required dependency and into optional\r\n* #37 - Migrated to GTest","2020-09-05T10:31:02",{"id":232,"version":233,"summary_zh":234,"released_at":235},135850,"v0.1.0","# Vulkan Kompute Release 0.1.0\r\n\r\nThe 0.1.0 release of Vulkan Kompute, the General Purpose Vulkan Compute Framework.\r\n\r\n## Features\r\n\r\n* Automatic detection and selection of phyiscal GPU device\r\n* Single header import with dynamic library available for easy integration\r\n* Uses vcpkg with optional manifest to download \u002F fetch dependencies\r\n* Provides high level kompute interface via Manager and Sequence\r\n* GPU processing data abstracted with Tensors\r\n* Compute shaders and pipelines are abstracted via algorithms\r\n* Base options for operations including create tensor and multiplication as example\r\n* Ability to initialise components with external vulkan resources \r\n* Conversion of glsl shaders into SPIR-V and native HPP files for static building\r\n* DEBUG option for verbose builds that cover execution path in detail with SPDLOG\r\n* Docker image to build the library in linux environments\r\n* CMAKE support with tested functionality in linux and windows\r\n* Documentation containing autodoc with Doxygen using Sphinx \r\n* Unit and integration testing using Catch2","2020-08-29T13:03:03"]