Skip to content

Commit aff81c8

Browse files
chore(content): sync from Feishu
1 parent 337f0c0 commit aff81c8

2 files changed

Lines changed: 42 additions & 7 deletions

File tree

docs/.vitepress/data/generated/feishu.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
"order": 2,
4141
"documentId": "H5x1dK6LzoVFmuxUzDicmuQ1nbb",
4242
"objectType": "docx",
43-
"revisionId": 1335
43+
"revisionId": 1444
4444
}
4545
]
4646
}

docs/wiki/WHFXw13vEiD8Hikfp3ScU33JnXe.md

Lines changed: 41 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -203,9 +203,44 @@ dim3 block(16, 16); // 16x16 共计256个 block
203203
204204
Kernel 中可以直接访问线程和 block 信息:
205205
206-
| 变量 | 含义 | |
207-
|-|-|-|
208-
| threadIdx | | |
209-
| blockIdx | | |
210-
| blockDim | | |
211-
| gridDim | | |
206+
| 变量 | 含义 |
207+
|-|-|
208+
| `threadIdx` | 当前 thread 在 block 内的位置 |
209+
| `blockIdx` | 当前 block 在 grid 内的位置 |
210+
| `blockDim` | 一个 block 的 thread 数量 |
211+
| `gridDim` | grid 中 block 数量 |
212+
213+
```Java
214+
__global__ void MatAdd(float A[N][N], float B[N][N], float C[N][N])
215+
{
216+
int i = threadIdx.x;
217+
int j = threadIdx.y;
218+
C[i][j] = A[i][j] + B[i][j];
219+
}
220+
int main()
221+
{
222+
dim3 threadPerBlock(N, N);
223+
MatAdd<<<1, threadsPerBlock>>>(A, B, C);
224+
}
225+
```
226+
227+
### 使用多个 Block
228+
229+
实际问题中数据规模通常大于一个 block,一个 block 线程数量有限,因此需要多个 block。线程全局编号:$index = blockIdx × blockDim+threadIdx$
230+
231+
```C++
232+
__global__ void MatAdd(float A[N][N], float B[N][N], float C[N][N])
233+
{
234+
int i = blockIdx.x * blockDim.x + threadIdx.x;
235+
int j = blockIdx.y * blockDim.y + threadIdx.y;
236+
if (i < N && j < N)
237+
C[i][j] = A[i][j] + B[i][j];
238+
}
239+
240+
int main()
241+
{
242+
dim3 threadsPerBlock(16, 16);
243+
dim3 numBlocks((N - 1) / threadsPerBlock.x + 1, (N - 1) / threadsPerBlock.y + 1);
244+
MatAdd<<<numBlocks, threadsPerBlock>>>(A, B, C);
245+
}
246+
```

0 commit comments

Comments
 (0)