-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgpu.html
More file actions
385 lines (314 loc) · 20.1 KB
/
Copy pathgpu.html
File metadata and controls
385 lines (314 loc) · 20.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>GPU 计算 - Ruin 语言文档</title>
<link rel="stylesheet" href="assets/style.css">
</head>
<body>
<div class="container">
<header>
<h1>🚀 Ruin GPU 计算</h1>
<div class="version">34个 GPU 函数 · 高性能计算</div>
</header>
<nav>
<ul>
<li><a href="index.html">首页</a></li>
<li><a href="getting-started.html">快速开始</a></li>
<li><a href="syntax.html">语法</a></li>
<li><a href="types.html">类型系统</a></li>
<li><a href="function.html">函数系统</a></li>
<li><a href="builtin.html">内置模块</a></li>
<li><a href="string.html">String 模块</a></li>
<li><a href="object.html">Object 模块</a></li>
<li><a href="this.html">this 关键字</a></li>
<li><a href="fs.html">文件系统</a></li>
<li><a href="http.html">HTTP 模块</a></li>
<li><a href="json.html">JSON 处理</a></li>
<li><a href="system.html">System 模块</a></li>
<li><a href="gui.html">GUI系统</a></li>
<li><a href="window.html">窗口管理</a></li>
<li><a href="canvas.html">Canvas 绘图</a></li>
<li><a href="input.html">输入系统</a></li>
<li><a href="lifecycle.html">生命周期</a></li>
<li><a href="async.html">异步编程</a></li>
<li><a href="gpu.html" class="active">GPU计算</a></li>
<li><a href="cv.html">计算机视觉</a></li>
<li><a href="examples.html">示例</a></li>
</ul>
</nav>
<main>
<div class="breadcrumb">
<a href="index.html">首页</a> <span>></span> GPU 计算
</div>
<section id="overview">
<h2>📖 概述</h2>
<p>
Ruin 内置了强大的 GPU 计算能力,提供 34 个 GPU 加速函数,
支持矩阵运算、向量运算、神经网络、图像处理等高性能计算任务。
</p>
<div class="success-box">
<h4>✨ 核心特性</h4>
<ul>
<li>✅ 矩阵运算(加、减、乘、转置、求逆)</li>
<li>✅ 向量运算(加、减、点积、归一化)</li>
<li>✅ 卷积和池化操作</li>
<li>✅ 激活函数(ReLU、Sigmoid、Tanh)</li>
<li>✅ 神经网络前向/反向传播</li>
<li>✅ 图像处理(滤波、边缘检测)</li>
</ul>
</div>
<h3>导入</h3>
<pre><code><span class="keyword">import</span> gpu <span class="keyword">from</span> <span class="string">"gpu"</span>;</code></pre>
</section>
<section id="availability">
<h2>🔍 检查 GPU 可用性</h2>
<pre><code><span class="keyword">import</span> gpu <span class="keyword">from</span> <span class="string">"gpu"</span>;
<span class="keyword">import</span> console <span class="keyword">from</span> <span class="string">"console"</span>;
<span class="comment">// 检查 GPU 是否可用</span>
<span class="keyword">if</span> (gpu.isAvailable()) {
console.log(<span class="string">"GPU 可用"</span>);
<span class="comment">// 获取设备数量</span>
<span class="keyword">let</span> number deviceCount = gpu.getDeviceCount();
console.log(<span class="string">"GPU 设备数量: "</span> + deviceCount);
<span class="comment">// 获取设备信息</span>
<span class="keyword">let</span> object deviceInfo = gpu.getDeviceInfo(<span class="number">0</span>);
console.log(<span class="string">"设备名称: "</span> + deviceInfo.name);
} <span class="keyword">else</span> {
console.log(<span class="string">"GPU 不可用,使用 CPU 计算"</span>);
}</code></pre>
</section>
<section id="matrix-operations">
<h2>📊 矩阵运算</h2>
<h3>矩阵乘法</h3>
<pre><code><span class="keyword">import</span> gpu <span class="keyword">from</span> <span class="string">"gpu"</span>;
<span class="comment">// 2x2 矩阵乘法</span>
<span class="keyword">let</span> array<number> matrixA = [<span class="number">1.0</span>, <span class="number">2.0</span>, <span class="number">3.0</span>, <span class="number">4.0</span>];
<span class="keyword">let</span> array<number> matrixB = [<span class="number">5.0</span>, <span class="number">6.0</span>, <span class="number">7.0</span>, <span class="number">8.0</span>];
<span class="keyword">let</span> array<number> result = gpu.matrixMultiply(matrixA, matrixB, <span class="number">2</span>, <span class="number">2</span>, <span class="number">2</span>);
<span class="comment">// result = [19, 22, 43, 50]</span></code></pre>
<h3>矩阵加法</h3>
<pre><code><span class="keyword">let</span> array<number> sum = gpu.matrixAdd(matrixA, matrixB);</code></pre>
<h3>矩阵减法</h3>
<pre><code><span class="keyword">let</span> array<number> diff = gpu.matrixSubtract(matrixA, matrixB);</code></pre>
<h3>矩阵转置</h3>
<pre><code><span class="keyword">let</span> array<number> transposed = gpu.matrixTranspose(matrixA, <span class="number">2</span>, <span class="number">2</span>);</code></pre>
<h3>矩阵求逆</h3>
<pre><code><span class="keyword">let</span> array<number> inverse = gpu.matrixInverse(matrixA, <span class="number">2</span>);</code></pre>
</section>
<section id="vector-operations">
<h2>🎯 向量运算</h2>
<h3>向量加法</h3>
<pre><code><span class="keyword">let</span> array<number> vec1 = [<span class="number">1.0</span>, <span class="number">2.0</span>, <span class="number">3.0</span>];
<span class="keyword">let</span> array<number> vec2 = [<span class="number">4.0</span>, <span class="number">5.0</span>, <span class="number">6.0</span>];
<span class="keyword">let</span> array<number> sum = gpu.vectorAdd(vec1, vec2);
<span class="comment">// sum = [5.0, 7.0, 9.0]</span></code></pre>
<h3>向量减法</h3>
<pre><code><span class="keyword">let</span> array<number> diff = gpu.vectorSubtract(vec1, vec2);</code></pre>
<h3>向量点积</h3>
<pre><code><span class="keyword">let</span> number dotProduct = gpu.vectorDot(vec1, vec2);
<span class="comment">// dotProduct = 32.0</span></code></pre>
<h3>向量归一化</h3>
<pre><code><span class="keyword">let</span> array<number> normalized = gpu.vectorNormalize(vec1);</code></pre>
</section>
<section id="neural-networks">
<h2>🧠 神经网络</h2>
<h3>激活函数</h3>
<pre><code><span class="comment">// ReLU 激活</span>
<span class="keyword">let</span> array<number> data = [<span class="number">-1.0</span>, <span class="number">0.0</span>, <span class="number">1.0</span>, <span class="number">2.0</span>];
<span class="keyword">let</span> array<number> activated = gpu.relu(data);
<span class="comment">// activated = [0.0, 0.0, 1.0, 2.0]</span>
<span class="comment">// Sigmoid 激活</span>
<span class="keyword">let</span> array<number> sigmoid = gpu.sigmoid(data);
<span class="comment">// Tanh 激活</span>
<span class="keyword">let</span> array<number> tanh = gpu.tanh(data);</code></pre>
<h3>卷积操作</h3>
<pre><code><span class="keyword">let</span> array<number> input = [...]; <span class="comment">// 输入图像</span>
<span class="keyword">let</span> array<number> kernel = [<span class="number">1.0</span>, <span class="number">0.0</span>, <span class="number">-1.0</span>, <span class="number">1.0</span>, <span class="number">0.0</span>, <span class="number">-1.0</span>, <span class="number">1.0</span>, <span class="number">0.0</span>, <span class="number">-1.0</span>];
<span class="keyword">let</span> array<number> output = gpu.convolve2D(input, kernel, <span class="number">28</span>, <span class="number">28</span>, <span class="number">3</span>, <span class="number">3</span>);</code></pre>
<h3>池化操作</h3>
<pre><code><span class="comment">// 最大池化</span>
<span class="keyword">let</span> array<number> pooled = gpu.maxPool2D(input, <span class="number">28</span>, <span class="number">28</span>, <span class="number">2</span>, <span class="number">2</span>);
<span class="comment">// 平均池化</span>
<span class="keyword">let</span> array<number> avgPooled = gpu.avgPool2D(input, <span class="number">28</span>, <span class="number">28</span>, <span class="number">2</span>, <span class="number">2</span>);</code></pre>
<h3>前向传播</h3>
<pre><code><span class="keyword">let</span> array<number> input = [<span class="number">1.0</span>, <span class="number">2.0</span>, <span class="number">3.0</span>];
<span class="keyword">let</span> array<number> weights = [...];
<span class="keyword">let</span> array<number> bias = [...];
<span class="keyword">let</span> array<number> output = gpu.forwardPass(input, weights, bias, <span class="number">3</span>, <span class="number">4</span>);</code></pre>
</section>
<section id="image-processing">
<h2>🖼️ 图像处理</h2>
<h3>图像滤波</h3>
<pre><code><span class="comment">// 高斯模糊</span>
<span class="keyword">let</span> array<number> blurred = gpu.gaussianBlur(image, width, height, <span class="number">5</span>);
<span class="comment">// 边缘检测(Sobel)</span>
<span class="keyword">let</span> array<number> edges = gpu.sobelEdgeDetection(image, width, height);</code></pre>
<h3>图像变换</h3>
<pre><code><span class="comment">// 图像缩放</span>
<span class="keyword">let</span> array<number> resized = gpu.resize(image, oldWidth, oldHeight, newWidth, newHeight);
<span class="comment">// 图像旋转</span>
<span class="keyword">let</span> array<number> rotated = gpu.rotate(image, width, height, angle);</code></pre>
</section>
<section id="complete-example">
<h2>📚 完整示例 - 简单神经网络</h2>
<pre><code><span class="keyword">import</span> console <span class="keyword">from</span> <span class="string">"console"</span>;
<span class="keyword">import</span> gpu <span class="keyword">from</span> <span class="string">"gpu"</span>;
<span class="keyword">let</span> function simpleNeuralNetwork = () => void {
<span class="keyword">if</span> (!gpu.isAvailable()) {
console.log(<span class="string">"GPU 不可用"</span>);
<span class="keyword">return</span>;
}
console.log(<span class="string">"开始 GPU 计算..."</span>);
<span class="comment">// 输入层(3 个神经元)</span>
<span class="keyword">let</span> array<number> input = [<span class="number">1.0</span>, <span class="number">2.0</span>, <span class="number">3.0</span>];
<span class="comment">// 权重矩阵(3x4)</span>
<span class="keyword">let</span> array<number> weights = [
<span class="number">0.1</span>, <span class="number">0.2</span>, <span class="number">0.3</span>, <span class="number">0.4</span>,
<span class="number">0.5</span>, <span class="number">0.6</span>, <span class="number">0.7</span>, <span class="number">0.8</span>,
<span class="number">0.9</span>, <span class="number">1.0</span>, <span class="number">1.1</span>, <span class="number">1.2</span>
];
<span class="comment">// 偏置(4 个神经元)</span>
<span class="keyword">let</span> array<number> bias = [<span class="number">0.1</span>, <span class="number">0.2</span>, <span class="number">0.3</span>, <span class="number">0.4</span>];
<span class="comment">// 矩阵乘法:input × weights</span>
<span class="keyword">let</span> array<number> hiddenLayer = gpu.matrixMultiply(
input, weights, <span class="number">1</span>, <span class="number">3</span>, <span class="number">4</span>
);
<span class="comment">// 加偏置</span>
hiddenLayer = gpu.vectorAdd(hiddenLayer, bias);
<span class="comment">// ReLU 激活</span>
<span class="keyword">let</span> array<number> activated = gpu.relu(hiddenLayer);
<span class="comment">// 输出结果</span>
console.log(<span class="string">"隐藏层输出: "</span>);
<span class="keyword">let</span> number i = <span class="number">0</span>;
<span class="keyword">while</span> (i < activated.length) {
console.log(<span class="string">" 神经元 "</span> + i + <span class="string">": "</span> + activated[i]);
i = i + <span class="number">1</span>;
}
}
simpleNeuralNetwork();</code></pre>
</section>
<section id="performance">
<h2>⚡ 性能对比</h2>
<pre><code><span class="keyword">import</span> console <span class="keyword">from</span> <span class="string">"console"</span>;
<span class="keyword">import</span> gpu <span class="keyword">from</span> <span class="string">"gpu"</span>;
<span class="keyword">import</span> date <span class="keyword">from</span> <span class="string">"date"</span>;
<span class="keyword">let</span> function benchmarkGPU = () => void {
<span class="comment">// 准备大矩阵</span>
<span class="keyword">let</span> number size = <span class="number">1000</span>;
<span class="keyword">let</span> array<number> matA = [];
<span class="keyword">let</span> array<number> matB = [];
<span class="keyword">let</span> number i = <span class="number">0</span>;
<span class="keyword">while</span> (i < size * size) {
matA[i] = math.random();
matB[i] = math.random();
i = i + <span class="number">1</span>;
}
<span class="comment">// GPU 计算</span>
<span class="keyword">let</span> number startTime = date.now();
<span class="keyword">let</span> array<number> result = gpu.matrixMultiply(matA, matB, size, size, size);
<span class="keyword">let</span> number gpuTime = date.now() - startTime;
console.log(<span class="string">"GPU 计算时间: "</span> + gpuTime + <span class="string">"ms"</span>);
console.log(<span class="string">"矩阵大小: "</span> + size + <span class="string">"x"</span> + size);
}
benchmarkGPU();</code></pre>
<div class="success-box">
<h4>✨ 性能提升</h4>
<p>对于大规模矩阵运算,GPU 可以比 CPU 快 10-100 倍!</p>
</div>
</section>
<section id="api-reference">
<h2>📖 API 参考</h2>
<h3>设备管理</h3>
<table>
<thead>
<tr><th>函数</th><th>说明</th></tr>
</thead>
<tbody>
<tr><td><code>isAvailable()</code></td><td>检查 GPU 是否可用</td></tr>
<tr><td><code>getDeviceCount()</code></td><td>获取 GPU 设备数量</td></tr>
<tr><td><code>getDeviceInfo(deviceId)</code></td><td>获取设备信息</td></tr>
</tbody>
</table>
<h3>矩阵运算(8个)</h3>
<table>
<thead>
<tr><th>函数</th><th>说明</th></tr>
</thead>
<tbody>
<tr><td><code>matrixMultiply(A, B, m, n, p)</code></td><td>矩阵乘法</td></tr>
<tr><td><code>matrixAdd(A, B)</code></td><td>矩阵加法</td></tr>
<tr><td><code>matrixSubtract(A, B)</code></td><td>矩阵减法</td></tr>
<tr><td><code>matrixTranspose(A, rows, cols)</code></td><td>矩阵转置</td></tr>
<tr><td><code>matrixInverse(A, size)</code></td><td>矩阵求逆</td></tr>
</tbody>
</table>
<h3>向量运算(5个)</h3>
<table>
<thead>
<tr><th>函数</th><th>说明</th></tr>
</thead>
<tbody>
<tr><td><code>vectorAdd(a, b)</code></td><td>向量加法</td></tr>
<tr><td><code>vectorSubtract(a, b)</code></td><td>向量减法</td></tr>
<tr><td><code>vectorDot(a, b)</code></td><td>向量点积</td></tr>
<tr><td><code>vectorNormalize(v)</code></td><td>向量归一化</td></tr>
</tbody>
</table>
<h3>神经网络(12个)</h3>
<table>
<thead>
<tr><th>函数</th><th>说明</th></tr>
</thead>
<tbody>
<tr><td><code>relu(data)</code></td><td>ReLU 激活</td></tr>
<tr><td><code>sigmoid(data)</code></td><td>Sigmoid 激活</td></tr>
<tr><td><code>tanh(data)</code></td><td>Tanh 激活</td></tr>
<tr><td><code>convolve2D(...)</code></td><td>2D 卷积</td></tr>
<tr><td><code>maxPool2D(...)</code></td><td>最大池化</td></tr>
<tr><td><code>avgPool2D(...)</code></td><td>平均池化</td></tr>
<tr><td><code>forwardPass(...)</code></td><td>前向传播</td></tr>
</tbody>
</table>
<div class="info-box">
<p>完整的 GPU API 文档:<a href="../GPU-API.md" target="_blank">docs/GPU-API.md</a></p>
</div>
</section>
<section id="best-practices">
<h2>💡 最佳实践</h2>
<div class="success-box">
<h4>✅ 推荐</h4>
<ul>
<li>优先使用 GPU 处理大规模数据(>1000 元素)</li>
<li>批量处理多个操作以减少数据传输</li>
<li>复用缓冲区,避免频繁创建/销毁</li>
<li>检查 GPU 可用性并提供 CPU 回退方案</li>
</ul>
</div>
<div class="warning-box">
<h4>⚠️ 注意</h4>
<ul>
<li>小规模数据可能不会比 CPU 快(数据传输开销)</li>
<li>GPU 内存有限,处理超大数据需要分批</li>
<li>不同 GPU 性能差异很大,需要实测</li>
</ul>
</div>
</section>
<section id="related">
<h2>🔗 相关文档</h2>
<ul>
<li><a href="types.html">类型系统</a> - array 类型</li>
<li><a href="builtin.html">内置模块</a> - math 模块</li>
<li><a href="examples.html">示例代码</a> - GPU 实战</li>
</ul>
</section>
</main>
<footer>
<p>© 2025 Ruin 语言项目 | <a href="https://github.com/naichabaobao/ruin">GitHub</a></p>
</footer>
</div>
<a href="#" class="back-to-top" id="backToTop">↑ 返回顶部</a>
<script src="assets/nav.js"></script>
</body>
</html>