要点
- GPU对比CPU计算正弦和:使用单CPU、使用OpenMP库和CUDA
- CUDA并行计算:3D网格运行内核:线程块,线程线性处理3D数组,并行归约,共享内存,矩阵乘法/平铺矩阵乘法,基本线性代数子程序
- 平铺分区,矢量加载,warp级内在函数和子 warp,线程发散和同步,联合组
- 使用 2D 和 3D 模板,迭代求解偏微分方程和图像处理
- 使用 GPU 纹理硬件执行快速插值,图像配准
- 蒙特卡洛模拟3D伊辛模型
- CUDA 流
- CUDA正电子发射断层扫描仪校准和图像重建
- GPU扩展
矩阵乘法示例
假设我们有两个矩阵,A 和 B。假设A是一个$n \times m$矩阵,这意味着它有n行和m列。还假设 B 是 $m \times w$ 矩阵。乘法A * B(与B * A不同)的结果是一个$n \times w$矩阵,我们称之为M。也就是说,结果矩阵的行数等于第一个矩阵 A 的行数和第二个矩阵 B 的列数。
为什么会发生这种情况以及它是如何运作的?这里两个问题的答案是相同的。我们以 M 的单元格 1,1(第一行,第一列)为例。运算 M=A * B 后其中的数字是 A 第 1 行中的数字与 B 第 1 列中的数字的所有逐元素乘法之和。也就是说,在 M 的单元格 i, j 中,我们得到了 A 中第 i 行和 B 中第 j 列中所有数字的逐元素乘法之和。
下图直观地解释了这个想法:
data:image/png;base64,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UwQ0ToAAAQIECBAgQIBAjoCCk7MLSQgQIECAAAECBAgQKAooOEVA4wQIECBAgAABAgQI5AgoODm7kIQAAQIECBAgQIAAgaKAglMENE6AAAECBAgQIECAQI6AgpOzC0kIECBAgAABAgQIECgKKDhFQOMECBAgQIAAAQIECOQIKDg5u5CEAAECBAgQIECAAIGigIJTBDROgAABAgQIECBAgECOgIKTswtJCBAgQIAAAQIECBAoCig4RUDjBAgQIECAAAECBAjkCCg4ObuQhAABAgQIECBAgACBooCCUwQ0ToAAAQIECBAgQIBAjoCCk7MLSQgQIECAAAECBAgQKAooOEVA4wQIECBAgAABAgQI5AgoODm7kIQAAQIECBAgQIAAgaKAglMENE6AAAECBAgQIECAQI6AgpOzC0kIECBAgAABAgQIECgKKDhFQOMECBAgQIAAAQIECOQIKDg5u5CEAAECBAgQIECAAIGigIJTBDROgAABAgQIECBAgECOgIKTswtJCBAgQIAAAQIECBAoCig4RUDjBAgQIECAAAECBAjkCCg4ObuQhAABAgQIECBAgACBooCCUwQ0ToAAAQIECBAgQIBAjoCCk7MLSQgQIECAAAECBAgQKAooOEVA4wQIECBAgAABAgQI5AgoODm7kIQAAQIECBAgQIAAgaKAglMENE6AAAECBAgQIECAQI6AgpOzC0kIECBAgAABAgQIECgKKDhFQOMECBAgQIAAAQIECOQIKDg5u5CEAAECBAgQIECAAIGigIJTBDROgAABAgQIECBAgECOgIKTswtJCBAgQIAAAQIECBAoCig4RUDjBAgQIECAAAECBAjkCCg4ObuQhAABAgQIECBAgACBooCCUwQ0ToAAAQIECBAgQIBAjoCCk7MLSQgQIECAAAECBAgQKAooOEVA4wQIECBAgAABAgQI5AgoODm7kIQAAQIECBAgQIAAgaKAglMENE6AAAECBAgQIECAQI6AgpOzC0kIECBAgAABAgQIECgKKDhFQOMECBAgQIAAAQIECOQIKDg5u5CEAAECBAgQIECAAIGigIJTBDROgAABAgQIECBAgECOgIKTswtJCBAgQIAAAQIECBAoCig4RUDjBAgQIECAAAECBAjkCCg4ObuQhAABAgQIECBAgACBooCCUwQ0ToAAAQIECBAgQIBAjoCCk7MLSQgQIECAAAECBAgQKAooOEVA4wQIECBAgAABAgQI5AgoODm7kIQAAQIECBAgQIAAgaKAglMENE6AAAECBAgQIECAQI6AgpOzC0kIECBAgAABAgQIECgKKDhFQOMECBAgQIAAAQIECOQIKDg5u5CEAAECBAgQIECAAIGigIJTBDROgAABAgQIECBAgECOgIKTswtJCBAgQIAAAQIECBAoCig4RUDjBAgQIECAAAECBAjkCCg4ObuQhAABAgQIECBAgACBooCCUwQ0ToAAAQIECBAgQIBAjoCCk7MLSQgQIECAAAECBAgQKAooOEVA4wQIECBAgAABAgQI5AgoODm7kIQAAQIECBAgQIAAgaKAglMENE6AAAECBAgQIECAQI6AgpOzC0kIECBAgAABAgQIECgKKDhFQOMECBAgQIAAAQIECOQIKDg5u5CEAAECBAgQIECAAIGigIJTBDROgAABAgQIECBAgECOgIKTswtJCBAgQIAAAQIECBAoCig4RUDjBAgQIECAAAECBAjkCCg4ObuQhAABAgQIECBAgACBooCCUwQ0ToAAAQIECBAgQIBAjoCCk7MLSQgQIECAAAECBAgQKAooOEVA4wQIECBAgAABAgQI5AgoODm7kIQAAQIECBAgQIAAgaKAglMENE6AAAECBAgQIECAQI6AgpOzC0kIECBAgAABAgQIECgKKDhFQOMECBAgQIAAAQIECOQIKDg5u5CEAAECBAgQIECAAIGigIJTBDROgAABAgQIECBAgECOgIKTswtJCBAgQIAAAQIECBAoCig4RUDjBAgQIECAAAECBAjkCCg4ObuQhAABAgQIECBAgACBooCCUwQ0ToAAAQIECBAgQIBAjoCCk7MLSQgQIECAAAECBAgQKAooOEVA4wQIECBAgAABAgQI5AgoODm7kIQAAQIECBAgQIAAgaKAglMENE6AAAECBAgQIECAQI6AgpOzC0kIECBAgAABAgQIECgKKDhFQOMECBAgQIAAAQIECOQIKDg5u5CEAAECBAgQIECAAIGigIJTBDROgAABAgQIECBAgECOgIKTswtJCBAgQIAAAQIECBAoCig4RUDjBAgQIECAAAECBAjkCCg4ObuQhAABAgQIECBAgACBooCCUwQ0ToAAAQIECBAgQIBAjoCCk7MLSQgQIECAAAECBAgQKAooOEVA4wQIECBAgAABAgQI5AgoODm7kIQAAQIECBAgQIAAgaKAglMENE6AAAECBAgQIECAQI6AgpOzC0kIECBAgAABAgQIECgKKDhFQOMECBAgQIAAAQIECOQIKDg5u5CEAAECBAgQIECAAIGigIJTBDROgAABAgQIECBAgECOgIKTswtJCBAgQIAAAQIECBAoCig4RUDjBAgQIECAAAECBAjkCCg4ObuQhAABAgQIECBAgACBooCCUwQ0ToAAAQIECBAgQIBAjoCCk7MLSQgQIECAAAECBAgQKAooOEVA4wQIECBAgAABAgQI5AgoODm7kIQAAQIECBAgQIAAgaKAglMENE6AAAECBAgQIECAQI6AgpOzC0kIECBAgAABAgQIECgKKDhFQOMECBAgQIAAAQIECOQIKDg5u5CEAAECBAgQIECAAIGigIJTBDROgAABAgQIECBAgECOgIKTswtJCBAgQIAAAQIECBAoCig4RUDjBAgQIECAAAECBAjkCCg4ObuQhAABAgQIECBAgACBooCCUwQ0ToAAAQIECBAgQIBAjoCCk7MLSQgQIECAAAECBAgQKAooOEVA4wQIECBAgAABAgQI5AgoODm7kIQAAQIECBAgQIAAgaKAglMENE6AAAECBAgQIECAQI6AgpOzC0kIECBAgAABAgQIECgKKDhFQOMECBAgQIAAAQIECOQIKDg5u5CEAAECBAgQIECAAIGigIJTBDROgAABAgQIECBAgECOgIKTswtJCBAgQIAAAQIECBAoCig4RUDjBAgQIECAAAECBAjkCCg4ObuQhAABAgQIECBAgACBooCCUwQ0ToAAAQIECBAgQIBAjoCCk7MLSQgQIECAAAECBAgQKAooOEVA4wQIECBAgAABAgQI5AgoODm7kIQAAQIECBAgQIAAgaKAglMENE6AAAECBAgQIECAQI6AgpOzC0kIECBAgAABAgQIECgKKDhFQOMECBAgQIAAAQIECOQIKDg5u5CEAAECBAgQIECAAIGigIJTBDROgAABAgQIECBAgECOgIKTswtJCBAgQIAAAQIECBAoCig4RUDjBAgQIECAAAECBAjkCOzc3t7+2FacV6/0p23Zul0CBAg8lcDv/w4svinX+cV0BgkQIPBsApXr/LOFfMI70kCeENNNESBAgAABAgQIECDwcwV2t3n3nz59ms7Pz6ebm5tt3o3bJrBVgfn5e3V1NZ2enk5nZ2fTwcHBtLu71b86W308bpzARmB+Hp+cnGz+uOh31/lFbIbCBNY36+nb1bf/XecPDw6n1e4qLKU4BB4v8BTX+cff68+f2OpXaW/evLl7hOv1+uc/UgkILBSYX9a9uLi4mz4+Pp7evn07eVvOQkxjUQKr1WraXKeXBtvMu84vFTSXIOA6n7AFGbYh8BTX+W3k2vZtbvVncLYd3u0TeA6B6+vr6fLy8u5VnPnVm6Ojo2lvb+857tp9ECBAgMAzCLjOPwOyuyDwjAJbfQXnGR+HuyKwNYGdnZ27QjN/h28uNvOffRAgQIDAyxFwnX85u/RICMwCCo7nAYGBwPx2tP39/Wl+mXd+L6u3pw3AHCZAgEAzAdf5ZgsTl8BAwFvUBkAOEyBAgAABAgQIECDQR8B/E91nV5ISIECAAAECBAgQIDAQUHAGQA4TIECAAAECBAgQINBHQMHpsytJCRAgQIAAAQIECBAYCCg4AyCHCRAgQIAAAQIECBDoI6Dg9NmVpAQIECBAgAABAgQIDAQUnAGQwwQIECBAgAABAgQI9BFQcPrsSlICBAgQIECAAAECBAYCCs4AyGECBAgQIECAAAECBPoIKDh9diUpAQIECBAgQIAAAQIDAQVnAOQwAQIECBAgQIAAAQJ9BBScPruSlAABAgQIECBAgACBgYCCMwBymAABAgQIECBAgACBPgIKTp9dSUqAAAECBAgQIECAwEBAwRkAOUyAAAECBAgQIECAQB8BBafPriQlQIAAAQIECBAgQGAgoOAMgBwmQIAAAQIECBAgQKCPgILTZ1eSEiBAgAABAgQIECAwEFBwBkAOEyBAgAABAgQIECDQR0DB6bMrSQkQIECAAAECBAgQGAgoOAMghwkQIECAAAECBAgQ6COg4PTZlaQECBAgQIAAAQIECAwEFJwBkMMECBAgQIAAAQIECPQRUHD67EpSAgQIECBAgAABAgQGAgrOAMhhAgQIECBAgAABAgT6CCg4fXYlKQECBAgQIECAAAECAwEFZwDkMAECBAgQIECAAAECfQQUnD67kpQAAQIECBAgQIAAgYGAgjMAcpgAAQIECBAgQIAAgT4CCk6fXUlKgAABAgQIECBAgMBAQMEZADlMgAABAgQIECBAgEAfAQWnz64kJUCAAAECBAgQIEBgIKDgDIAcJkCAAAECBAgQIECgj4CC02dXkhIgQIAAAQIECBAgMBBQcAZADhMgQIAAAQIECBAg0EdAwemzK0kJECBAgAABAgQIEBgIKDgDIIcJECBAgAABAgQIEOgjoOD02ZWkBAgQIECAAAECBAgMBBScAZDDBAgQIECAAAECBAj0EVBw+uxKUgIECBAgQIAAAQIEBgIKzgDIYQIECBAgQIAAAQIE+ggoOH12JSkBAgQIECBAgAABAgMBBWcA5DABAgQIECBAgAABAn0E/gMTyd8ST7SBZQAAAABJRU5ErkJggg==
现在应该很清楚为什么矩阵-矩阵乘法是并行计算的一个很好的例子了。我们必须计算 C 中的每个元素,并且每个元素彼此独立,因此我们可以有效地并行化。
我们将看到实现这一目标的不同方法。我们的目标是在本文中添加新概念,最终形成一个 2D 内核,它使用共享内存来有效地优化操作。
网格和块
当我们使用指令 <<< >>> 调用内核时,我们自动定义一个 dim3 类型变量,定义每个网格的块数和每个块的线程数。