智慧的老鸟

一个程序员需要有一棵Gank的心,Dota能培养我。

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

2013年1月5日

摘要: linux的时间函数有其特别需要注意的使用方法,在工程项目中,这点很容易忽视,本文就时间函数在多线程中的使用作一个小结。首先看一个函数,取下一天的功能函数,该函数使用了时间函数localtime或者localtime_r来获取系统时间。int GetNextTime(int curtm){struct tm t;t.tm_year = curtm/10000 - 1900;t.tm_mon = ((curtm/100)%100 - 1); t.tm_mday = (curtm)%100;t.tm_hour = 1;t.tm_min = 0;t.tm_sec = 0;time_t nt; //s 阅读全文
posted @ 2013-01-05 09:18 智慧的老鸟 阅读(9963) 评论(0) 推荐(0) 编辑

2012年12月24日

摘要: 就像大一学C++,大二学汇编一样,我也写弄了些个月的CUDA,然后,想想,应该开始刨根问底地,去学点在CUDA之下层的东西,可能会对异构这个编程了解的多。1 简介OpenCL全称:开发计算语言,是并行程序的开发标准,使用与任何异构平台——包括多CPU、GPU、CPU与GPU结合等。OpenCL由Khronos Group维护。OpenCL是一个用于异构平台上编程的开放性行业标准。这个平台可以包括 CPU GPU和其他各类计算设备,例如 DSP和Cell/B.E.等等。OpenCL和CUDA的关系很和谐,前者是异构编程规范标准,后者是英伟达基于OpenCL之上开发的一个更面向程序员的GPUAPI 阅读全文
posted @ 2012-12-24 10:31 智慧的老鸟 阅读(3446) 评论(1) 推荐(1) 编辑

2012年12月19日

摘要: 现在的集成开发环境很好的支持了市面上的多数多核CPU,比如在intel双核CPU的系统上安装好vs2008后,第一,在项目属性-c++-语言中选择支持openmp第二,在环境变量中加入OMP_NUM_THREADS变量赋值2可以了,打开vs2008敲入下面的例子,相信我们都能看懂的:/************************************************************************//* 利用Monte Carlo算法求圆周率pi ... 阅读全文
posted @ 2012-12-19 17:25 智慧的老鸟 阅读(778) 评论(0) 推荐(0) 编辑

2012年11月28日

摘要: CUDA是一个线程网络,我特别想弄清楚的一件事情是,主机如果是个二维的数组,传到设备中,是否还是可以用二维数组来表示呢?很多例子都是将二维的数组映射到一个一维指针变量中去。但是我就是还想在设备中也用arr[][]的形式来找到我想要的那个元素,可以吗?肯定是可以的。方案一:栈定义arr[2][10],直接用地址传进去。但是栈的空间很小,在CPU中能声明的数组就不大。所以,这里不讨论这个方案。方案二:堆上new出个二维指针结合CPU来说:首先,在CPU中,二维指针和二维数组的一个映射关系可以用一个拷贝实现,代码入下:…… 21 // b[2][10] 22 int **b= (in... 阅读全文
posted @ 2012-11-28 16:00 智慧的老鸟 阅读(6240) 评论(0) 推荐(0) 编辑

摘要: 6规约思想和同步概念扩大点说,并行计算是有一种基本思想的,这个算法能解决很多很常规的问题,而且很实用,比如说累加和累积等——规约思想。对于基础的、重要的,我想有必要系统的学习。我觉得有必要重新复制下之前写的这篇介绍:http://www.cnblogs.com/viviman/archive/2012/11/21/2780286.html并行程序的开发有其不同于单核程序的特殊性,算法是重中之重。根据不同业务设计出不同的并行算法,直接影响到程序的效率。因此,如何设计并行程序的算法,似乎成为并编程的最大难点。观其算法,包括cudasdk的例子和网上的牛人,给出的一些例子,以矩阵和矢量处理为主,深入 阅读全文
posted @ 2012-11-28 14:09 智慧的老鸟 阅读(4321) 评论(0) 推荐(2) 编辑

摘要: 5GPU也不允许偏心并行的事情多了,我们作为GPU的指令分配者,不能偏心了——给甲做的事情多,而乙没事做,个么甲肯定不爽的来。所以,在GPU中,叫做线程网络的分配。首先还是来看下GPU的线程网络吧,图2:图2线程网络我们将具体点的,在主机函数中如果我们分配的是这样的一个东西:dim3blocks(32,32);dim3threads(16,16);dim3是神马?dim3是一个内置的结构体,和linux下定义的线程结构体是个类似的意义的东西,dim3结构变量有x,y,z,表示3维的维度。不理解没关系,慢慢看。kernelfun<<<blocks,threads>> 阅读全文
posted @ 2012-11-28 14:08 智慧的老鸟 阅读(11358) 评论(2) 推荐(3) 编辑

摘要: 0序言学习CUDA已经有个把月了,感觉自己学习一门新技术的第一个阶段已经接近尾声,对于一些基本的东西,学习的收获应该作一个总结,我是一个喜欢总结的人。CUDA是异构编程的一个大头,洋洋洒洒的看了写资料,但是,感觉这个技术没有像C++或者Java那样有自己的权威的《编程思想》来指导系统学习,总是感觉心里不踏实,是不是自己还没掌握深入、或者说心里没底气说自己已经入门了、已经熟悉了、已经精通了。站在一个初学者的角度,作为一个笔记式的记录,讲解自己学习和理解CUDA过程中的一些列想到的、碰到的问题。享受一个东西不一定是结果,可以是从无知到了解到精通的这个整个过程。1给自己提几个问题对的,我想要做什么事 阅读全文
posted @ 2012-11-28 14:06 智慧的老鸟 阅读(8699) 评论(2) 推荐(1) 编辑

2012年11月26日

摘要: 本文是一个转载,觉得介绍的简单而且精辟,对应要认识cpu和gpu的我来说,很好,原文地址:http://hc.csdn.net/article.html?arcid=2810268异构计算的英文名称是Heterogeneous computing,主要是指使用不同类型指令集和体系架构的计算单元组成系统的计算方式。常见的计算单元类别包括CPU、GPU等协处理器、DSP、ASIC、FPGA等。我们常说的并行计算正是异构计算中的重要组成部分异构计算近年来得到更多关注,主要是因为通过提升CPU时钟频率和内核数量而提高计算能力的传统方式遇到了散热和能耗瓶颈。而与此同时,GPU等专用计算单元虽然工作频率较 阅读全文
posted @ 2012-11-26 15:11 智慧的老鸟 阅读(5885) 评论(0) 推荐(0) 编辑

2012年11月23日

摘要: 异构程序开发的特点决定了开发与传统开发手段还是有一些列不同的,通俗的说有一定的讲究。针对本项目,本章列出几条重要的值得注意的地方,从开发过程上指导整个流程,以保证程序的质量+和优化。对异构程序的开发,针对自己的开发业务,简单的叙述整个开发流程如图:这个过程文字叙述为:过程1:数据准备准备需要处理的业务的原始数据,比如你的数据来源为mysql或者app或者mongodb或者其他的,通常为了测试,我都会写一个生产随即浮点数的函数来模拟自己的项目。过程2:业务逻辑设计更加业务需求的功能,设计业务层的类,投资组合类大体上有4个功能,每个功能直接又是有依赖关系的,这个过程产生的软件产品是——类图。过程3 阅读全文
posted @ 2012-11-23 14:31 智慧的老鸟 阅读(1173) 评论(0) 推荐(0) 编辑

2012年11月22日

摘要: 没有毛主席思想,如何指导中国革命!没有GPU开发思想,如何开发异构程序!什么是GPU开发思想呢?你可以有一套,我也有一套,下面是我推荐的思想:天马行空的想,一开始就想3000个计算单元怎么并行,里面的标准差是否可以并行,太急躁。不必这么着急地考虑如何写我们的内核程序,这样的结果往往让自己的思维禁锢了,什么意思——很简单的理解就是GPU开发要先看大局,再看局部;之前我看了一个图像处理的博客,在整个图像上理解并行的意义远远大于在一个排序或者取中位数等局部算法上并行来的大,优先花大量心思考虑细节往往得不偿失,做什么事情都是这样,也许这点对于异构开发一个大型应用程序而言显得格外突出。给出我们开发异构程 阅读全文
posted @ 2012-11-22 17:30 智慧的老鸟 阅读(426) 评论(0) 推荐(0) 编辑