diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index dfffc48..88ddef5 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -7,56 +7,68 @@ "id": "be09fd8b647f425d", "type": "tabs", "children": [ - { - "id": "7c26718ad1c1bcd1", - "type": "leaf", - "state": { - "type": "markdown", - "state": { - "file": "程序集.md", - "mode": "source", - "source": false - } - } - }, - { - "id": "94da835d929cd68f", - "type": "leaf", - "state": { - "type": "markdown", - "state": { - "file": "网络同步.md", - "mode": "source", - "source": false - } - } - }, - { - "id": "797b353e3b2a4938", - "type": "leaf", - "state": { - "type": "markdown", - "state": { - "file": "Issue/超出ScrollView的特效渲染层级不对.md", - "mode": "source", - "source": false - } - } - }, { "id": "81fe1e09c99e234a", "type": "leaf", "state": { "type": "markdown", "state": { - "file": "程序集.md", + "file": "并行计算/CPU/Brust.md", + "mode": "source", + "source": false + } + } + }, + { + "id": "6aedfe92a5b29e2f", + "type": "leaf", + "state": { + "type": "markdown", + "state": { + "file": "并行计算/GPU/Compute Shader.md", + "mode": "source", + "source": false + } + } + }, + { + "id": "ea082afd946d50f4", + "type": "leaf", + "state": { + "type": "markdown", + "state": { + "file": "GPU/GPU渲染流程.md", + "mode": "source", + "source": false + } + } + }, + { + "id": "f8f8f48dfb17b2a6", + "type": "leaf", + "state": { + "type": "markdown", + "state": { + "file": "网络同步.md", + "mode": "preview", + "source": false + } + } + }, + { + "id": "e87e6d863c89589f", + "type": "leaf", + "state": { + "type": "markdown", + "state": { + "file": "手写渲染器/课程.md", "mode": "source", "source": false } } } ], - "currentTab": 2 + "currentTab": 4 } ], "direction": "vertical" @@ -70,7 +82,7 @@ "type": "tabs", "children": [ { - "id": "b736346aa28b495c", + "id": "f2ac97a7addb8678", "type": "leaf", "state": { "type": "file-explorer", @@ -98,7 +110,7 @@ } ], "direction": "horizontal", - "width": 249 + "width": 338.5 }, "right": { "id": "d809b577c235ae94", @@ -114,7 +126,7 @@ "state": { "type": "backlink", "state": { - "file": "Issue/超出ScrollView的特效渲染层级不对.md", + "file": "手写渲染器/课程.md", "collapseAll": false, "extraContext": false, "sortOrder": "alphabetical", @@ -149,18 +161,36 @@ "markdown-importer:打开 Markdown 格式转换器": false } }, - "active": "797b353e3b2a4938", + "active": "e87e6d863c89589f", "lastOpenFiles": [ "网络同步.md", - "Issue/超出ScrollView的特效渲染层级不对.md", - "Issue", + "手写渲染器/课程.md", + "手写渲染器", "程序集.md", + "GPU/GPU渲染流程.md", + "并行计算/GPU/SIMT.md", + "并行计算/GPU/Compute Shader.md", "操作系统/多级缓存队列.md", + "Pasted image 20230413163234.png", + "GPU", + "并行计算/CPU/SIMD(单指令多数据).md", + "并行计算/CPU/Brust.md", + "并行计算/GPU", + "并行计算/GPU.canvas", + "并行计算/CPU", + "并行计算/CPU.canvas", + "并行计算/未命名看板.md", + "未命名 2.canvas", + "未命名 1.canvas", + "未命名.canvas", + "并行计算/未命名看板 1.md", + "Issue/超出ScrollView的特效渲染层级不对.md", + "并行计算", + "Issue", "待办事项/TODO.md", "FairyGui/工作流.md", "编辑器/图片/Pasted image 20221025121100.png", "编辑器/SerializedObject.md", - "未命名.canvas", "编辑器/SearchFilter UnityEditor筛选器.md", "().md", "Mesh/Mesh Baker.md", diff --git a/GPU/GPU渲染流程.md b/GPU/GPU渲染流程.md new file mode 100644 index 0000000..c976625 --- /dev/null +++ b/GPU/GPU渲染流程.md @@ -0,0 +1,52 @@ + +https://www.cnblogs.com/timlly/p/11471507.html +参考网站 + +# SM 流处理器 + 包括 + 运算核心 + load/store 加载与储存 + 特殊数学运算 sin、cos、log + 寄存器 + L1缓存 + 全局内存缓存 + 纹理读取单元 + 纹理缓存 + PolyMorph Engine:多边形引擎(负责属性装配、顶点拉取、曲面细分、栅格化 ~= 专门处理顶点相关) + 2个Wrap Schedulers:负责wrap调度 1一个warp由32个线程组成,warp调度器的指令通过Dispatch Units送到Core执行。 + 指令缓存 + 内部链接网络(?) + +# GPU渲染管线 + 通过图形api调用drawcall-> + 指令推送到驱动,驱动检查是否合法-> + 驱动把指令缓存到buffer里-> + 下次flush会把指令推送到GPU-> + ----------主机------- + + GPU通过主机接口Host Interface接受命令-> + 通过前端(Front End)处理这些命令(?)-> Front End是哪儿 + 图元分配开始工作(indexbuffer产生三角形形成批次, 分配给GPCs{ ? })-> + SM的多边形引擎(Poly Morph Engine)通过三角形索引获取三角形数据(Vertex Fetch)-> + SM的Wrap调度(SIMT)-> +![[Pasted image 20230413163234.png]] + + 等到wrap完成了vertex-shader的所有指令,三角形会被裁剪然后准备栅格化,GPU会把L1和L2缓存来进行vertex-shader和pixel-shader之间的数据通信 + SM上的Attribute Setup保证了从vertex-shader来的数据经过插值后是pixel-shade是可读的。 + 光栅化引擎开始接受三角形工作(裁剪、背面剔除、Early-Z剔除) + 32个线程分成8个2*2的像素块、如果没有三角形覆盖,线程会被遮掩 + 最后会颜色和深度输出到ROP(渲染输出单元),进行深度测试和framebuffer混合 + +# 深度测试 + +### 深度测试失效情况: + 开启透明测试 + 开启像素摒弃指令 - OpenGL的clip + 关闭深度测试 + 开启Multi-Sampling:多采样 + +### 深度测试会导致深度数据冲突 + +# CPU与GPU异构系统 + 分离 + 耦合 \ No newline at end of file diff --git a/Pasted image 20230413163234.png b/Pasted image 20230413163234.png new file mode 100644 index 0000000..5eb61a5 Binary files /dev/null and b/Pasted image 20230413163234.png differ diff --git a/并行计算/CPU/Brust.md b/并行计算/CPU/Brust.md new file mode 100644 index 0000000..8d4c92b --- /dev/null +++ b/并行计算/CPU/Brust.md @@ -0,0 +1,2 @@ + +todo... \ No newline at end of file diff --git a/并行计算/CPU/SIMD(单指令多数据).md b/并行计算/CPU/SIMD(单指令多数据).md new file mode 100644 index 0000000..2bfb5b2 --- /dev/null +++ b/并行计算/CPU/SIMD(单指令多数据).md @@ -0,0 +1,11 @@ + + +- 一个普通加法指令,一次只能对两个数执行一个加法操作。 +- 一个 SIMD 加法指令,一次可以对两个数组(向量)执行加法操作。 + + 一个寄存器存多个数据同时批量处理 + + +## CSharp中的SIMD + 位于 System.Numerics 下的Vector即可开始进行硬件级别上的处理 + Vector.Count为寄存器能容纳的位数 \ No newline at end of file diff --git a/并行计算/GPU/Compute Shader.md b/并行计算/GPU/Compute Shader.md new file mode 100644 index 0000000..e69de29 diff --git a/并行计算/GPU/SIMT.md b/并行计算/GPU/SIMT.md new file mode 100644 index 0000000..ce5e621 --- /dev/null +++ b/并行计算/GPU/SIMT.md @@ -0,0 +1,8 @@ + + +单指令多线程 +一个指令 会有多条线程运行相同的指令 +英伟达会给出多个修饰符,例如:Bit Mask可以指定哪些线程干活 哪些空转,既可支持分支操作 +每个线程会进入锁步(lock-step) +线程会进入被遮掩(be masked out) +被遮掩的原因,例如:if(false) 或者循环次数不一致 \ No newline at end of file diff --git a/手写渲染器/课程.md b/手写渲染器/课程.md new file mode 100644 index 0000000..416eab1 --- /dev/null +++ b/手写渲染器/课程.md @@ -0,0 +1,2 @@ + +https://github.com/ssloy/tinyrenderer/wiki/Lesson-0:-getting-started \ No newline at end of file