提交 d4516027 编写于 作者: F feilong

初始化

上级 bcc7fdb8
.vscode
.idea
.DS_Store
__pycache__
*.pyc
*.zip
*.out
bin/
debug/
release/
\ No newline at end of file
# skill_tree_cuda # skill_tree_cuda
CUDA 技能树 `CUAD入门技能树`[技能森林](https://gitcode.net/csdn/skill_tree)的一部分。
\ No newline at end of file
## 编辑环境初始化
```
pip install -r requirements.txt
```
## 目录结构说明
技能树编辑仓库的 data 目录是主要的编辑目录,目录的结构是固定的
* 技能树`骨架文件`
* 位置:`data/tree.json`
* 说明:该文件是执行 `python main.py` 生成的,请勿人工编辑
* 技能树`根节点`配置文件:
* 位置:`data/config.json`
* 说明:可编辑配置关键词等字段,其中 `node_id` 字段是生成的,请勿编辑
* 技能树`难度节点`
* 位置:`data/xxx`,例如: `data/1.CUAD入门初阶`
* 说明:
* 每个技能树有 3 个等级,目录前的序号是必要的,用来保持文件夹目录的顺序
* 每个目录下有一个 `config.json` 可配置关键词信息,其中 `node_id` 字段是生成的,请勿编辑
* 技能树`章节点`
* 位置:`data/xxx/xxx`,例如:`data/1.CUAD入门初阶/1.1.GPU架构及异构计算`
* 说明:
* 每个技能树的每个难度等级有 n 个章节,目录前的序号是必要的,用来保持文件夹目录的顺序
* 每个目录下有一个 `config.json` 可配置关键词信息,其中 `node_id` 字段是生成的,请勿编辑
* 技能树`知识节点`
* 位置:`data/xxx/xxx`,例如:`data/1.CUAD入门初阶/1.1.GPU架构及异构计算`
* 说明:
* 每个技能树的每章有 n 个知识节点,目录前的序号是必要的,用来保持文件夹目录的顺序
* 每个目录下有一个 `config.json`
* 其中 `node_id` 字段是生成的,请勿编辑
* 其中 `keywords` 可配置关键字字段
* 其中 `children` 可配置该`知识节点`下的子树结构信息,参考后面描述
* 其中 `export` 可配置该`知识节点`下的导出习题信息,参考后面描述
## `知识节点` 子树信息结构
例如 `data/1.CUAD入门初阶/1.1.GPU架构及异构计算/介绍GPU架构以及异构计算的基本原理/config.json` 里配置对该知识节点子树信息结构,这个配置是可选的:
```json
{
// ...
"children": [
{
"XX开发入门": {
"keywords": [
"XX开发",
],
"children": [],
"keywords_must": [
"XX"
],
"keywords_forbid": []
}
}
],
}
```
## `知识节点` 的导出习题编辑
例如 `data/1.CUAD入门初阶/1.1.GPU架构及异构计算/介绍GPU架构以及异构计算的基本原理/config.json` 里配置对该知识节点导出的习题
```json
{
// ...
"export": [
"helloworld.json"
]
}
```
helloworld.json 的格式如下:
```bash
{
"type": "code_options",
"author": "xxx",
"source": "helloworld.md",
"notebook_enable": false,
"exercise_id": "xxx"
}
```
其中
* "type": "code_options" 表示是一个选择题
* "author" 可以放作者的 CSDN id,
* "source" 指向了习题 MarkDown文件
* "notebook_enable" 目前都是false
* "exercise_id" 是工具生成的,不填
习题格式模版如下:
````mardown
# {标题}
{习题描述}
以下关于上述游戏代码说法[正确/错误]的是?
## 答案
{目标选项}
## 选项
### A
{混淆选项1}
### B
{混淆选项2}
### C
{混淆选项3}
````
## 技能树合成
在根目录下执行 `python main.py` 会合成技能树文件,合成的技能树文件: `data/tree.json`
* 合成过程中,会自动检查每个目录下 `config.json` 里的 `node_id` 是否存在,不存在则生成
* 合成过程中,会自动检查每个知识点目录下 `config.json` 里的 `export` 里导出的习题配置,检查是否存在`exercise_id` 字段,如果不存在则生成
* 在 节 目录下根据需要,可以添加一些子目录用来测试代码。
* 开始游戏入门技能树构建之旅,GoodLuck!
## FAQ
**难度目录是固定的么?**
1. data/xxx 目录下的子目录是固定的初/中/高三个难度等级目录
**如何增加章目录?**
1. 在VSCode里打开项目仓库
2. 在对应的难度等级目录新建章目录,例如在 data/1.xxx初阶/ 下新建章文件夹,data/1.xxx初阶/1.yyy
3. 在项目根目录下执行 python main.py 脚本,会自动生成章的配置文件 data/1.xxx初阶/1.yyy/config.json
**如何增加节目录?**:
1. 直接在VSCode里创建文件夹,例如 "data/1.xxx初阶/1.yyy/2.zzz"
2. 项目根目录下执行 python main.py 会自动为新增节创建配置文件 data/1.xxx初阶/1.yyy/2.zzz/config.json
**如何在节下新增一个习题**:
3. 在"data/1.xxx初阶/1.yyy/2.zzz" 目录下添加一个 markdown 文件编辑,例如 yyy.md,按照习题markdown格式编辑习题。
4. md编辑完后,可以再次执行 python main.py 会自动生成同名的 yyy.json,并将 yyy.json 添加到config.json 的export数组里。
5. yyy.json里的author信息放作者 CSDN ID。
\ No newline at end of file
{
"node_id": "cuda-bdd8df6c59d0460bbf30d3a4a6203b06",
"keywords": [],
"children": [],
"export": [
"helloworld.json"
],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"type": "code_options",
"author": null,
"source": "helloworld.md",
"notebook_enable": false,
"exercise_id": "02176393bfff4c7ea60d9f85fd095224"
}
\ No newline at end of file
# {标题}
{习题描述}
以下关于上述游戏代码说法[正确/错误]的是?
## 答案
{目标选项}
## 选项
### A
{混淆选项1}
### B
{混淆选项2}
### C
{混淆选项3}
\ No newline at end of file
{
"node_id": "cuda-8acef8aa3f7b479d90b7eaf77ff752eb",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-f15df586747c4e648b6c6824c6b9b3e1",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-8cc14ba50dbb4b00ba62a8070d2b599c",
"keywords": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-25c9eacb75e64d00bff3d14ffdec7ea7",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-4756f243773643fd8064aa5b4ffdb789",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-bf38379916ce44978c6bfa3ef3487c71",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-8c79c6a5e3ca441a9cee430f312407bf",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-b7fb5b2b91234dd89968918460ae506f",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-ec664e92f8e2410b88226408d9bb9a9f",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-70b301e021ef435f92c0f07b22adaa09",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-8b007eb550f842058b4bc0b2bc457c7e",
"keywords": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-5f99fc5469cf4907ba3ebe615287a6e9",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-f336472c4c244a68b4a2ee80dac8fdd0",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-3443edc2ea5140b0a39f690382bf91e2",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-2244dd4b61cc478094ba7013770f1f29",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-3fa4ca2a53d74b9d92a11ba6a7f23306",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-d7adf776b61b4829aea19181b8bd188b",
"keywords": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-73f87372510e4546a282aea26e371e53",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-3347d61cb34745a4adbe216f6eca305c",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-73179a76ecd34f5dbf8e53b3a1e84228",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-95a89e2e13dc4c5c94c41eeb648107a5",
"keywords": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-8965afc1396c4aad8fa3eaa203b6e3ac",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-3c183e532dcd44d88311a778f6958916",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-6560fcc5a5c9465b84aa0f15b9576b79",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-288bccf96d9645e294723329219375eb",
"keywords": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-e2ec9573577d42fdbed66392ffc835d3",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-545f2bfb1f8b4102ad4b50dd376ebc23",
"keywords": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-0f5c808b1251449fb296063ff1d324d1",
"keywords": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-634b3d9492044bafb7a089431c878879",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-5a542af3254b49a8ab5266364d421e47",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-346e5f64d0904f63baccd001ef8b676b",
"keywords": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-10a7cead25f14eeaaf0730ff2468cb90",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-9e74b1fb163e46bb8cc2e72b3c9990a9",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-6f61fc7ce2ef413886354ac2dfab2b27",
"keywords": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-a95b22ce131e42979daabc1f2ec82886",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-93c84af94c154430b93094befb70f5c8",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-24b5313252644192b40894d9d677a40f",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-5d11b746f9f34965a77bb8e6777c3ba9",
"keywords": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-c77a77ca93f546dda09ec621380b04f1",
"keywords": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-1698eb54bf894cf48d27b11baaf03916",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-e1ca07a17c9443b5af7c0d22b4bff705",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-60427e3bc2ea4308a250e2716efe4ed8",
"keywords": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-5f1d7d26ebff499abb0ee0aeb66da328",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-8e9c726f99b84fa685d6e5cce061fd9d",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-d1a8d39fbc4247f394c9979f1cf2cac7",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-18f6a05677194f78bf61c456dddf0905",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-fb7d53daa17e4db09234d87558508e81",
"keywords": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-19170998ef3c4b9a9ab808a989ed29f3",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-9c80239f362c4b28aa40bf55a5f2de81",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-e1f4431b5a10485985345315c55762bc",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-88eb3bc83d4c425583fea7bf547483a6",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-083766b88b3647679d2067ec60ccfcdd",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-923b4ee7f3134962933344a5d7b8ff4c",
"keywords": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cuda-ade73748ee304a6997e6a24cbc0d69ac",
"keywords": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"tree_name": "cuda",
"keywords": [],
"node_id": "cuda-a39f9a57edfe4dd48fce8d68e950db24",
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"cuda": {
"node_id": "cuda-a39f9a57edfe4dd48fce8d68e950db24",
"keywords": [],
"children": [
{
"CUDA入门初阶": {
"node_id": "cuda-0f5c808b1251449fb296063ff1d324d1",
"keywords": [],
"children": [
{
"GPU架构及异构计算": {
"node_id": "cuda-8cc14ba50dbb4b00ba62a8070d2b599c",
"keywords": [],
"children": [
{
"介绍GPU架构以及异构计算的基本原理": {
"node_id": "cuda-bdd8df6c59d0460bbf30d3a4a6203b06",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"介绍GPU硬件平台": {
"node_id": "cuda-8acef8aa3f7b479d90b7eaf77ff752eb",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"环境安装配置": {
"node_id": "cuda-f15df586747c4e648b6c6824c6b9b3e1",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
}
],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"初识CUDA": {
"node_id": "cuda-8b007eb550f842058b4bc0b2bc457c7e",
"keywords": [],
"children": [
{
"CUDA程序的编译": {
"node_id": "cuda-25c9eacb75e64d00bff3d14ffdec7ea7",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"GPU线程的调用": {
"node_id": "cuda-4756f243773643fd8064aa5b4ffdb789",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"GPU和CPU的通讯": {
"node_id": "cuda-bf38379916ce44978c6bfa3ef3487c71",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"使用多个线程的核函数": {
"node_id": "cuda-8c79c6a5e3ca441a9cee430f312407bf",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"使用线程索引": {
"node_id": "cuda-b7fb5b2b91234dd89968918460ae506f",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"多维网络": {
"node_id": "cuda-ec664e92f8e2410b88226408d9bb9a9f",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"网格与线程块": {
"node_id": "cuda-70b301e021ef435f92c0f07b22adaa09",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
}
],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"CUDA存储单元的使用": {
"node_id": "cuda-d7adf776b61b4829aea19181b8bd188b",
"keywords": [],
"children": [
{
"设备初始化": {
"node_id": "cuda-5f99fc5469cf4907ba3ebe615287a6e9",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"GPU的存储单元": {
"node_id": "cuda-f336472c4c244a68b4a2ee80dac8fdd0",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"GPU存储单元的分配与释放": {
"node_id": "cuda-3443edc2ea5140b0a39f690382bf91e2",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"数据的传输": {
"node_id": "cuda-2244dd4b61cc478094ba7013770f1f29",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"数据与线程之间的对应关系": {
"node_id": "cuda-3fa4ca2a53d74b9d92a11ba6a7f23306",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
}
],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"多种CUDA存储单元详解": {
"node_id": "cuda-95a89e2e13dc4c5c94c41eeb648107a5",
"keywords": [],
"children": [
{
"CUDA中的存储单元种类": {
"node_id": "cuda-73f87372510e4546a282aea26e371e53",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"CUDA中的各种存储单元的使用方法": {
"node_id": "cuda-3347d61cb34745a4adbe216f6eca305c",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"CUDA中的各种存储单元的适用条件": {
"node_id": "cuda-73179a76ecd34f5dbf8e53b3a1e84228",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
}
],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"利用共享存储单元优化应用": {
"node_id": "cuda-288bccf96d9645e294723329219375eb",
"keywords": [],
"children": [
{
"共享存储单元详解": {
"node_id": "cuda-8965afc1396c4aad8fa3eaa203b6e3ac",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"共享内存的Bank conflict": {
"node_id": "cuda-3c183e532dcd44d88311a778f6958916",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"利用共享存储单元进行矩阵转置和矩阵乘积": {
"node_id": "cuda-6560fcc5a5c9465b84aa0f15b9576b79",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
}
],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"统一内存": {
"node_id": "cuda-545f2bfb1f8b4102ad4b50dd376ebc23",
"keywords": [],
"children": [
{
"统一内存的基本概念和使用": {
"node_id": "cuda-e2ec9573577d42fdbed66392ffc835d3",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
}
],
"keywords_must": [],
"keywords_forbid": []
}
}
],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"CUDA入门中阶": {
"node_id": "cuda-c77a77ca93f546dda09ec621380b04f1",
"keywords": [],
"children": [
{
"CUA错误检测与事件": {
"node_id": "cuda-346e5f64d0904f63baccd001ef8b676b",
"keywords": [],
"children": [
{
"CUDA应用程序运行时的错误检测": {
"node_id": "cuda-634b3d9492044bafb7a089431c878879",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"CUDA中的事件": {
"node_id": "cuda-5a542af3254b49a8ab5266364d421e47",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
}
],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"原子操作": {
"node_id": "cuda-6f61fc7ce2ef413886354ac2dfab2b27",
"keywords": [],
"children": [
{
"CUDA中的原子操作": {
"node_id": "cuda-10a7cead25f14eeaaf0730ff2468cb90",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"原子操作的适用场景": {
"node_id": "cuda-9e74b1fb163e46bb8cc2e72b3c9990a9",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
}
],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"CUDA stream": {
"node_id": "cuda-5d11b746f9f34965a77bb8e6777c3ba9",
"keywords": [],
"children": [
{
"CUDA流的基本概念": {
"node_id": "cuda-a95b22ce131e42979daabc1f2ec82886",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"默认流与非默认流": {
"node_id": "cuda-93c84af94c154430b93094befb70f5c8",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"利用CUDA流重叠计算和数据传输": {
"node_id": "cuda-24b5313252644192b40894d9d677a40f",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
}
],
"keywords_must": [],
"keywords_forbid": []
}
}
],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"CUDA入门高阶": {
"node_id": "cuda-ade73748ee304a6997e6a24cbc0d69ac",
"keywords": [],
"children": [
{
"CUDA 调试分析": {
"node_id": "cuda-60427e3bc2ea4308a250e2716efe4ed8",
"keywords": [],
"children": [
{
"利用Nsight等分析工具对程序性能进行分析": {
"node_id": "cuda-1698eb54bf894cf48d27b11baaf03916",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"根据实际硬件调整程序": {
"node_id": "cuda-e1ca07a17c9443b5af7c0d22b4bff705",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
}
],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"CUDA 优化": {
"node_id": "cuda-fb7d53daa17e4db09234d87558508e81",
"keywords": [],
"children": [
{
"存储优化": {
"node_id": "cuda-5f1d7d26ebff499abb0ee0aeb66da328",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"执行设置优化": {
"node_id": "cuda-8e9c726f99b84fa685d6e5cce061fd9d",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"指令级优化": {
"node_id": "cuda-d1a8d39fbc4247f394c9979f1cf2cac7",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"控制流优化": {
"node_id": "cuda-18f6a05677194f78bf61c456dddf0905",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
}
],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"CUDA 加速库": {
"node_id": "cuda-923b4ee7f3134962933344a5d7b8ff4c",
"keywords": [],
"children": [
{
"cuBLAS": {
"node_id": "cuda-19170998ef3c4b9a9ab808a989ed29f3",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"cuFFT": {
"node_id": "cuda-9c80239f362c4b28aa40bf55a5f2de81",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"cuRAND": {
"node_id": "cuda-e1f4431b5a10485985345315c55762bc",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"cuSPARSE": {
"node_id": "cuda-88eb3bc83d4c425583fea7bf547483a6",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"cuDNN": {
"node_id": "cuda-083766b88b3647679d2067ec60ccfcdd",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
}
],
"keywords_must": [],
"keywords_forbid": []
}
}
],
"keywords_must": [],
"keywords_forbid": []
}
}
],
"keywords_must": [],
"keywords_forbid": []
}
}
\ No newline at end of file
{
"level":{
"level_0": [
"GPU架构及异构计算",
"初识CUDA",
"CUDA存储单元的使用",
"多种CUDA存储单元详解",
"利用共享存储单元优化应用",
"统一内存"
],
"level_1":[
"CUA错误检测与事件",
"原子操作",
"CUDA stream"
],
"level_2": [
"CUDA 调试分析",
"CUDA 优化",
"CUDA 加速库"
]
},
"tree": {
"GPU架构及异构计算":[
"介绍GPU架构以及异构计算的基本原理",
"介绍GPU硬件平台",
"环境安装配置"
],
"初识CUDA": [
"CUDA程序的编译",
"GPU线程的调用",
"GPU和CPU的通讯",
"使用多个线程的核函数",
"使用线程索引",
"多维网络",
"网格与线程块"
],
"CUDA存储单元的使用": [
"设备初始化",
"GPU的存储单元",
"GPU存储单元的分配与释放",
"数据的传输",
"数据与线程之间的对应关系"
],
"多种CUDA存储单元详解": [
"CUDA中的存储单元种类",
"CUDA中的各种存储单元的使用方法",
"CUDA中的各种存储单元的适用条件"
],
"利用共享存储单元优化应用": [
"共享存储单元详解",
"共享内存的Bank conflict",
"利用共享存储单元进行矩阵转置和矩阵乘积"
],
"统一内存": [
"统一内存的基本概念和使用"
],
"CUA错误检测与事件": [
"CUDA应用程序运行时的错误检测",
"CUDA中的事件"
],
"原子操作": [
"CUDA中的原子操作",
"原子操作的适用场景"
],
"CUDA stream": [
"CUDA流的基本概念",
"默认流与非默认流",
"利用CUDA流重叠计算和数据传输"
],
"CUDA 调试分析": [
"利用Nsight等分析工具对程序性能进行分析",
"根据实际硬件调整程序"
],
"CUDA 优化": [
"存储优化",
"执行设置优化",
"指令级优化",
"控制流优化"
],
"CUDA 加速库": [
"cuBLAS",
"cuFFT",
"cuRAND",
"cuSPARSE",
"cuDNN"
]
}
}
\ No newline at end of file
from skill_tree.tree import TreeWalker, load_json, dump_json
if __name__ == '__main__':
walker = TreeWalker("data", "cuda", "CUDA入门", ignore_keywords=True)
walker.walk()
.pre_commit
skill-tree-parser
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册