Posts Tagged ‘ OpenMP

开放了Light For Ruby全部的原始码

假期看的DirectX方面的知识现在都忘记了,于是这几日又重新再看.

刚刚把上个学期做的OpenGL项目Light For Ruby的原始码全部发到了Google Code上面,本意是想做个赛车的游戏的,但是最后答辩很快,所以没有做完,算成了一个烂尾工程了.

本来是做OpenGL的初学练手项目的,里面代码比较简单,完成度也比较少,总共大概就5000行代码左右.

也没指望谁能和我一起做下去,自己也没有继续做下去的打算,就这样放着给OpenGL的新手做个参考,或许还会对大家有帮助内.

Read more

明天去腾冲.

明天去腾冲的奶奶家啦,大概也是几个小时的车程.

这段时间看了下博客的访问来源,大多都是通过Google搜索“OpenMP入门”到我刚刚才写的那篇OpenMP入门指南那里,目前也仅仅只写了一章,第二章这段时间在家,不太方便写,要开学以后去学校写了,对不住了各位.

昨天的时候又把DirectX的入门部分看了一下,并且不断的和OpenGL的入门部分做对比,感觉当从入门来看,DirectX里面的东西确实要比OpenGL更容易让人迷糊一些,不过两者的基本步骤都是差不多的,熟悉起来很快.

数学是人类科技文明的基础.

Read more

一些关于CUDA的简单的思考.

粗浅的文章,还请大家多多指正.

声明:本文受Creative Commons 署名-非商业性使用-禁止演绎 2.5 中国大陆 License协议保护.

程式的优化问题.

在做CUDA开发的时候,感觉难点之一就是如何将GPU的性能发挥到最大。

比如说,在同学的GeForce 8400M GS上面跑的程式,Block数量可能要设置的比较少,也就是说一个thread粒度会比较大,这样才能发挥8400最大的性能,因为8400的SM数量 实在太少,但是相同的程式设置用到GeForce GTX285上面却不好用了,为什么呢?因为GT300有30个SM,Block数目设置的较多一点才会更适合,thread的粒度相对较小。
尽管基本不会影响到程式的正确性,但是程式的优化却是和GPU不同不一样的,因此,Fermi做出了将32SP才集合成一个SM,而不是像以前的8个SP 组成一个SM,可能也是为了缓解该问题。

对比一下其他并行计算模型.

不过我对其他并行模型并没有多少了解,还请诸位高手指正。

在CUDA并行计算模型上面,一个程式每个thread的粒度都比较小,而且thread的总数一般都是10万个以上,同时众多thread组合成多个 block分批执行,因此在一个block内thread的计算量和任务基本都是高度一致的(否则会引起很显著的性能问题),因此也不适合做分支预测很多 的任务。

Read more

OpenMP入门指南(一) —-并行计算导言和OpenMP基本概念.

作者:杨漱玉青.

声明:本文受Creative   Commons 署名-非商业性使用-禁止演绎 2.5 中国大陆 License协议 保护.
前言:终于想有点写点指南的东西了,我也只是菜鸟,因此只能写点入门指南的东西。So,如果有什么错误和照顾不周的地方还请大家多多提出来.
Thanks!
什么是OpenMP?
您可以访问这里获 得OpenMP的介绍.
在我们的OpenMP开始之前,我们先来看一下x86多内核编程所带来新的问题。
一.并行编程带来的问题
1.    共享数据操作问题
假如有一个数据是需要被多个线程都要访问到,那么就会带来共享数据操控的问题,比如说变量i这个数据,thread 0想给i加1,而thread1却想给i减1,那么i被操作之后到底变成什么呢?
再来看,变量i初始值等于0,thread0判断如果i==0则继续下面的操作,而thread1则是去给i加1的,那么thread0和thread1 谁先去执行则变得后果也不同。
解决此问题一般采用两个方法:锁(LOCK)机制和原子 机制.
2.    任务的分解和调度问题
这是我们以后并行编程所要考虑的最大的地方
对于分解好的多个任务,如何将其均与的分配到各内核上面是非常重要的问题,这会直接影响加速比。
Read more

return top