2020-2021第二学期GPU程序设计期末考试
整理:lzh
- (20分)填空选择,小题记不住,但主要是考GPU计算的基本概念和CUDA网格模型
- (10分)简述共享内存的模型,共享内存冲突的解决办法和共享内存的两种使用方法
- (10分)列出GPU中所有的内存种类及其特性
- (15分)叙述统一内存(Unified Memory)的概念及其优缺点
- (10分)结构体数组和数组结构体分别是什么,它们在CUDA的内存访问中有什么不同
- (15分)讨论不同情况下的同步及其实现方法
- (20分)阅读一段GPU规约的代码,回答如下问题
(1) (5分)for循环内为什么要__syncthreads()
(2) (5分)13行-21行if语句的作用
(3) (5分)13行-21行if语句中为什么不需要__syncthreads()
(4) (5分)代码中有哪些优化
```C++{.line-numbers}
global void reduceInterleaved (volatile int g_idata, int g_odata, unsigned int n) { unsigned int tid = threadIdx.x; unsigned int idx = blockIdx.x * blockDim.x + threadIdx.x; int *idata = g_idata + blockIdx.x * blockDim.x;
for (int stride = blockDim.x / 2; stride > 0; stride >>= 1) {
if (tid < stride) {
idata[tid] += idata[tid + stride];
}
__syncthreads();
}
if (tid < 32)
{
idata[tid] += idata[tid + 32];
idata[tid] += idata[tid + 16];
idata[tid] += idata[tid + 8];
idata[tid] += idata[tid + 4];
idata[tid] += idata[tid + 2];
idata[tid] += idata[tid + 1];
}
if (tid == 0) g_odata[blockIdx.x] = idata[0];
} // 记得大概长这样,细节有出入但是影响不大
```
注:数院好不容易第一年开了GPU编程的课,欢迎对高性能计算感兴趣的同学们选修
Last update: November 2, 2023