并行程序的几点Tips:
来源:互联网 发布:汽车电脑板维修编程 编辑:程序博客网 时间:2024/05/16 12:41
这两天在搞多线程并行, 有以下几点体会:
1 shared resource 是毒药, 尤其是在频繁需要加锁的时候。当计算的core增多时,其性能扩展不明显
2 要尽量用现成的并行framework. .NET的TPL, c++的opencl和amp。这些framework能够形成一个thread pool, 能够根据系统当前的状况自动来schedule最佳的线程数和调度策略,任务分配等。能够使cpu一直处于满负荷的状态工作
3 并行要用coarse-grained。fine-grained会使系统创建和调度线程的cost大于真正所执行的任务的时间。在recursive 的程序尤其要注意,比如quiksort, 如果划分不合理会使并行的时间大于顺序执行的时间。
4 I/O是最耗时的部分。在多线程下同时读写多个文件,性能不会明显提高,反而会有可能降低。这个我还得仔细研究下,没怎么弄清楚。
5 如何开发non-blocking 的程序需要再去研究
6 spinlock与lock mutex的区别: spinwait不会让thread从内核中跳出,而mutex等不到的时候会使thread调出。
7 find the bottleneck and tackle it.
8 Amdahl‘s law. The most efficient time in theory.:不可并行计算的存在是很重要的,因为它将限制并行化的潜在好处。阿姆达尔定律指明如果一个计算的1/S本质上是顺序的,那么最大的性能改进将受限于因数S。其论证如下,一个并行计算的执行时间TP将是顺序部分计算时间和可并行化部分计算时间两者的和。如果该计算顺序地执行需要花费的时间是TS,则当有P个处理器时,TP可表示为S=n/[1+(n-1)f]
Task[] tasks = new Task[subcount];
for i = 0; i < subcount; i++)
{
task[i] = Task.Factory.StartNew(convert(sub));
}
Task[] allTasks = tasks;
// Print completion notices one by one as tasks finish.
while (tasks.Length > 0)
{
taskIndex = Task.WaitAny(tasks);
//progress bar updated.
tasks = tasks.Where((t) => t != tasks[taskIndex]).ToArray();
}
// Observe any exceptions that might have occurred.
try
{
Task.WaitAll(allTasks);
}
catch (AggregateException ae)
{
...
}
- 并行程序的几点Tips:
- DNN的几点tips
- 技术人员应该明白的几点tips
- 关于环境建模与并行计算的几点想法
- Iometer做性能测试几点tips
- 最近做了个并行的计算各项异性地震波的有限元程序(cuda+mpi),可以计算超大规模问题,网格点个数可以几百亿都没有问题.
- 讨论优化php程序的几点
- 测试web程序的几大要点
- 程序开发注意的几点延伸
- 几年程序人生的几点感悟
- Android程序效率的几点建议
- 关于微信小程序的几点思考
- redis官网给出的几点关于节省内存的tips
- 编程修改对象参数值的几点Tips and Tricks
- storm的利用并行度提高处理速度的几点感想
- storm的利用并行度提高处理速度的几点感想
- 关于构造函数与析构函数几点Tips
- 浅谈测试web程序的几大要点
- Android金蛇剑之Gallery之沙场秋点兵
- 思维导图——电学
- 最佳的75个安全工具工具
- 用Instant Client,不安装oracle客户端使用sqlplus连接远程数据库
- 春意盎然 酷我音乐无损音质抢先来袭
- 并行程序的几点Tips:
- Excel 使用技巧集锦——163种技巧
- hdu 1003
- UVAlive 6040 Stop Growing! 解题报告
- 如何在项目中正确添加汇编代码
- 黑马程序员--网络编程(一)
- iOS cocos2d-X之游戏开发环境搭建(一)
- 王家林“云计算分布式大数据Hadoop实战高手之路---从零开始”的第一讲Hadoop图文训练课程:10分钟理解云计算分布式大数据处理框架Hadoop
- 50.windbg-.foreach循环输入(windbg script)