CUDA 学习(十六)、优化策略1:并行/串行在GPU/ CPU 上的问题分解
来源:互联网 发布:知乎笑笑 编辑:程序博客网 时间:2024/06/10 05:47
一、问题分解
这里的基本议题是:这个问题可以被分解成并行运行的组块吗?也就是,是否有机会发掘出问题中的并发性?假设能够把问题分为多个并发快,那接下来的问题是有多少个并发块?CPU并行化的一个主要限制因素经常是没有足够大粒度(或粗粒度)的并行工作要做。GPU运行成千上万的程序,所有问题需要被分解成上千个块,而不是像CPU那样只执行少数并发任务。问题的分解应该总是从数据开始,考虑执行的任务。
二、数据集大小
数量集的大小使选取问题的解决方案差别巨大。GPU的主要问题不是缓存,而是你能在一张GPU卡上保存多少数据。将数据从主机系统传入或传出会耗费大量的计算时间。为了隐藏这一时间,你应该把计算与数据传输重叠起来执行。在更先进的显卡上,你可以做到同时传入数据。然而,为了实现这一点,你需要使用主机上的锁页内存。由于锁页内存不会被虚拟内存管理系统换出,所以它必须是存在于主机上的真正的DRAM内存。
三、识别瓶颈
1、 Amdahl 定律
Amdah1 定律常常被并行架构引用。它是很重要的,因为它告诉我们,当数据流中仍然存在串行执行的元素时,将限制速度的提示。
举个例子,我们程序中50% 的执行时间花费在可以并行化的代码上,另外50% 必须串行执行。当把程序中并行部分的执行时间减少到0,但仍然会留50%的串行代码要执行。在这种情况下,可能的最大加速比是2X,即程序的执行时间是之前的一半。
即使我们将90%的程序并行化,但仍然存在10%的串行代码。因此,最大的加速比是9X,也就是比原来完全串行的程序快9倍。
仔细分析代码中存在这样瓶颈的地方,并考虑如何将它们尽量消灭掉。这种瓶颈往往会限制应用程序的最大扩展程度。
2、分析
分析是确定你当前在哪里以及应该在什么地方多花点时费的最有用的任务之一。英伟达提供了两个很好的工具,分别是CUDA Profiler 和 Parallel Nsight,以提供分析信息。
- CUDA 学习(十六)、优化策略1:并行/串行在GPU/ CPU 上的问题分解
- GPU(CUDA)学习日记(十二)------ CUDA并行编程较有用的总结
- GPU(CUDA)学习日记(十二)------ CUDA并行编程较有用的总结
- CUDA: GPU的并行计算
- CUDA 学习(二)、使用GPU理解并行计算
- CUDA学习九:多GPU系统上的CUDA C
- CUDA学习笔记之GPU和CPU的区别
- 【CUDA并行程序设计系列(1)】GPU技术简介
- 深度学习网络卷积在GPU上的优化
- 串行&并行程序在效率上的简单比较
- 串行&并行程序在效率上的简单比较
- 串行&并行程序在效率上的简单比较
- CPU与GPU的内存带宽对比(CPU vs CUDA GPU memory bandwidth)
- OpenCL 学习笔记6 在CPU/GPU平台上的实现
- CUDA系列学习(六) 从并行排序方法理解并行化思维——冒泡、归并、双调排序的GPU实现
- bitonic_sort 串行(递归和for循环)和并行(cuda)两个版本的代码实现
- (gpu并行编程)cuda环境搭建中的问题
- Cuda 学习教程一:GPU并行计算介绍
- 仿墨迹天气的折线图控件,效果杠杠滴
- 八大排序学习之二直接插入排序
- 最小生成树MST - Prim算法 和 Kriskal算法
- 增量更新
- 冒泡排序
- CUDA 学习(十六)、优化策略1:并行/串行在GPU/ CPU 上的问题分解
- 简单模拟网络蜘蛛爬出邮箱地址
- 409. Longest Palindrome (计算可由一个字符串中数字字符构成的最长回文数的长度)
- pdf 转 高清图片
- 关于开发中遇到的实际问题的思考
- git的使用
- iOS WebView获取H5界面代码
- 编程实践4—php unexpected T_CLASS in ...
- 利用JavaFx开发RIA桌面应用-改变stage的标题栏的图标