欢迎来到皮皮网网首页

【spring文件源码】【飞鱼问答源码】【茶杯公式源码】bundler源码分析

来源:linux 源码阅读工具 时间:2024-11-25 07:50:50

1.封装Vue组件库的码分方法
2.AMD 编译概述 & Fatbin 文件生成 & HIP Runtime API(启动 CUDA 核函数)

bundler源码分析

封装Vue组件库的方法

       封装组件库让我们在之后的工作中可以复用现成的代码,同时保持了组件的码分稳定性。

       本文简要概述了封装Vue组件库的码分2种方法:vue-cli、webpack。码分

vue-cli

       vue-cli自带编译为库的码分功能。

命令

       编写好源码后,码分spring文件源码执行命令:

vue-cli-servicebuild--targetlib--nameindex--destdist./src/lib/index.ts

       --name参数设置库的码分名字,--dest参数设置生成文件的码分保存目录,./src/lib/index.ts表示入口文件。码分

       参考资料vue-cli-servicebuild。码分

输出

       这个命令在dist目录中生成了CJS和UMD的码分文件,同时CSS也被处理出称为一个单独的码分文件。

依赖

       vue-cli没有配置好组件库的码分外部依赖,我们需要在vue.config.js中设置。码分

constPackageJson=require('./package.json')module.exports={ configureWebpack:{ externals:Object.keys(PackageJson.dependencies)}}webpack

       Webpack打包组件库的码分方式与打包应用方式类似,除了我们需要设置library属性。示例:

constPackageJson=require('./package.json')constPath=require('path')const{ VueLoaderPlugin}=require('vue-loader')const{ CleanWebpackPlugin}=require('clean-webpack-plugin')module.exports={ mode:'production',飞鱼问答源码entry:Path.resolve(__dirname,'./src/index.ts'),output:{ path:Path.resolve(__dirname,'dist'),filename:'index.js',library:{ type:'commonjs'}},externals:Object.keys(PackageJson.dependencies),resolve:{ extensions:['.js','.json','.vue','.ts','.scss'],alias:{ vue:'vue/dist/vue.esm-bundler.js'}},module:{ rules:[{ test:/\.vue$/,loader:'vue-loader'},{ test:/\.(t|j)s$/,loader:'babel-loader',exclude:/node_modules/},{ test:/\.scss$/,use:['style-loader','css-loader','sass-loader']}]},plugins:[newVueLoaderPlugin(),newCleanWebpackPlugin()],devtool:'source-map'}

       output.library.type属性用于配置生成的目标模块类型。

AMD 编译概述 & Fatbin 文件生成 & HIP Runtime API(启动 CUDA 核函数)

       AMD 平台的术语概览

       AMD GPU 计算生态基于 ROCm(Radeon Open Computing platform),ROCm 包括ROC 和 Radeon 等简称,ROC:Radeon 开放计算平台,Radeon 是 AMD GPU 产品的品牌名。ROCm 类似于 CUDA 于 NVIDIA GPU。ROCx 包含 ROCr - ROC Runtime,ROCk - ROC kernel driver, ROCt - ROC Thunk。

       HIP(Heterogeneous-Computing Interface for Portability)是茶杯公式源码一个旨在简化 CUDA 应用程序到便携式 C++ 代码转换的接口,支持 C 风格的 API 和 C++ 内核语言。

       HIP-Clang 是 AMDGPU 异构编译器,用于在 AMD 平台上编译 HIP 程序。

       HCC(Heterogeneous Compute Compiler)是面向异构设备的开源 C++ 编译器,基于 LLVM + CLANG,实现将并行编程程序转换为 AMD GCN ISA。

       在 ROCM v3.5 版本前,HCC 编译器被使用,雷达动画源码之后引入了 HIP-Clang 编译器,HCC 编译器不再发展新特性,AMD 公司不再维护。

       “HIP化”工具,即 HIPify,能将 CUDA 代码转换为便携式 C++ 代码,自动执行大部分转换工作。

       ROCm 计算平台的麦田捕手源码编译流程包括使用 HIPify 工具转换 CUDA 源码到 HIP 源码,HIP 源码能够在 AMD 或 NVIDIA GPU 上运行。

       在 AMD ROCm 平台上,HIP 提供 HIP 运行时 API,实现与应用程序链接的对象库,包括流、事件和内存管理。在 NVIDIA CUDA 平台上,提供头文件,从 HIP 运行时 API 转换为 CUDA 运行时 API,提供内联函数以实现低开销。

       在 AMD ROCm 平台生成 Fat Binary 文件,使用 clang-offload-bundler 工具,将针对不同架构的多个 ELF 二进制文件合并成单个捆绑文件。

       clang-offload-bundler 工具在编译过程中对翻译单元进行多次编译,生成主机和设备代码对象,然后合并这些代码对象到单个捆绑文件中。

       HIP Runtime API 支持 CUDA <<<>>> 核函数语法,通过 hip-clang 编译选项选择 -fhip-new-launch-api,遇到 <<<>>> 时,调用一系列 API 来存储和处理核运行参数,最终通过 hipLaunchKernel API 运行核函数。

       在编译过程中,使用 hip-clang 时,会调用 API 来存储核运行参数,然后通过桩函数调用,再通过 hipLaunchKernel API 实现核函数的运行。

       API 包括用于初始化和注册函数的 API,如 __hipRegisterFatBinary 和 __hipRegisterFunction,保证 fatbin 文件只加载一次。