智慧的老鸟

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

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

11 2012 档案

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

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

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

摘要:本文是一个转载,觉得介绍的简单而且精辟,对应要认识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 智慧的老鸟 阅读(5895) 评论(0) 推荐(0) 编辑

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

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

摘要:Parallel Programming Patterns1.根据设计需求,找出可以并行设计程序的空间A.找出并发的内容a) 域分解b) 任务分解B.算法结构设计空间设计出的算法具有:效率,简单,可移植,可测量C.支持结构a) 程序结构SPMD – Same Program Multiple Dataloop parallelismboss/workerfork joinb) 数据结构i. 共享数据ii. 共享队列iii. 分布数组D.落实机器处理空间2.改进设计A.任务,数据,部分程序的顺序B.线程,进程,时间清单C.源代码的组织,共享数据D.消息,同步机制,结果并行任务分析任务分解Exam 阅读全文
posted @ 2012-11-21 14:13 智慧的老鸟 阅读(215) 评论(0) 推荐(0) 编辑

摘要:因为蒙特卡罗算法求圆周率这个问题没有数据相关性,完全可以用并行计算来模拟之。首先回顾下蒙特卡罗算法求圆周率,扔了几颗“豆子”,就是说需要执行多少次的随机数产生。比如我们扔了10000次,那么我们要创新获取10000次随机数;我们容忍不了,完全没有数据相关性的事情,完全可以一起做的事情,何必呢!拉出10000人的队伍,没人同时扔一颗不就完事儿了。对的,我们用gpu吧。开10000个线程,一起来做这件事情!算法如下,这是《并行计算》里面给出的一个任务分配,很好就用了。npoints = 10000circle_count = 0p = number of tasksnum = npoints/pf 阅读全文
posted @ 2012-11-21 14:09 智慧的老鸟 阅读(1051) 评论(0) 推荐(0) 编辑

摘要:蒙特卡罗算法是我在算法学习中最喜欢的算法之一,不知道什么原因,就是很欣赏,那种感觉就像你喜欢在雨中散步一样,没有什么能给你的,但是你享受到雨中的浪漫或者优雅。我一直觉得,像蒙特卡罗和拉斯维加斯这样的算法,在解决一些近视计算问题上,能提供给程序员很快捷和巧妙的方法。下面给出用蒙特卡洛计算圆周率的程序,很简单,但是,要说明的是它的并行算法,看《蒙特卡罗算法并行计算》#include#include#include#includeusing namespace std;#define pear 50000//扔的“黄豆”数目int isInCir(double x,double y){if ((x* 阅读全文
posted @ 2012-11-21 14:03 智慧的老鸟 阅读(659) 评论(0) 推荐(0) 编辑

摘要:看了些资料,对应只需要知道怎么查询和使用mongodb的我来说,这些足够啦。左边是mongodb查询语句,右边是sql语句。对照着用,挺方便。db.users.find() select*fromusersdb.users.find({"age":27}) select*fromuserswhereage=27db.users.find({"username":"joe","age":27}) select*fromuserswhere"username"="joe"anda 阅读全文
posted @ 2012-11-21 13:27 智慧的老鸟 阅读(54529) 评论(0) 推荐(4) 编辑

摘要:在linux下开发自己的服务器客户端程序,我们追求一切程序从最小模型开始,就是最简单最容易扩展的一种应用框架。习惯,我喜欢将自己需要g++的文件编写在sh文件中,每次,我只需要 sh g++.sh就ok了,在一切的可能情况下提高自己的工作效率。linux客户端模型#include <iostream>#include <sys/socket.h>#include <netinet/in.h>#include <netdb.h>#include <arpa/inet.h>#define MAXLINE 100#define SA str 阅读全文
posted @ 2012-11-21 13:17 智慧的老鸟 阅读(655) 评论(0) 推荐(0) 编辑

摘要:并行程序的开发有其不同于单核程序的特殊性,算法是重中之重。根据不同业务设计出不同的并行算法,直接影响到程序的效率。因此,如何设计并行程序的算法,似乎成为并行编程的最大难点。观其算法,包括cuda sdk的例子和网上的牛人,给出的一些例子,以矩阵和矢量处理为主,深入点的包括fft和julia等数学公式,再高级一点的算是图形处理方面的例子。学习这些算法的思想,免不了有自己的一点点总结。之前学习过omp编程,结合现在的cuda,我觉得要理解并行编程,首先理解划分和规约这两个概念。也许你的算法学的更加扎实。划分是《算法》里面的一个重要思想,将一个大的问题或任务,分解成小问题小任务,各个击破,最后归并结 阅读全文
posted @ 2012-11-21 10:36 智慧的老鸟 阅读(5472) 评论(0) 推荐(0) 编辑

摘要:一,生成动态链接库//DynamicLib.h#ifndef_DYNAMIC_LIB_INCLUDE_H_#define_DYNAMIC_LIB_INCLUDE_H_#ifdef__cplusplusextern"C"{#endif_declspec(dllexport)intadd(inta,intb);_declspec(dllexport)intsub(inta,intb);#ifdef__cplusplus};#endif#endif------------------------------------------------------//DynamicLib. 阅读全文
posted @ 2012-11-17 19:11 智慧的老鸟 阅读(717) 评论(0) 推荐(0) 编辑

摘要:一.生成静态lib#ifdef_STATIC_LIB_H_#define_STATIC_LIB_H_#ifdef __cplusplusextern"C"{#endifintadd(inta,intb);intsubtract(inta,intb);#ifdef __cplusplus{#endif#endif--------------------------------------#include"StaticLib.h"intadd(inta,intb){returna+b;}intsubtract(inta,intb){returna-b;}二. 阅读全文
posted @ 2012-11-17 19:11 智慧的老鸟 阅读(407) 评论(0) 推荐(0) 编辑

摘要:1关键字inline:调用Inline函数直接嵌入代码,避免因为调用而造成的开销。注意,内联函数应该放入头文件中。extern:使用时候,也必须声明,应用应在cpp文件中。const:A.h中定义的全局变量inta;能被别的cpp文件访问,只要externinta;如果不想被访问,则定义成constinta;&引用:引用是一种复合类型,必须用对象初始化,是对象的别名。int&i=10;errorint&i=j;rightconst&是指向const对象的引用。constinti=10;constint&j=i;rightint&k=i;error 阅读全文
posted @ 2012-11-17 19:10 智慧的老鸟 阅读(266) 评论(0) 推荐(0) 编辑

摘要:原文地址:CUDA统计时间作者:handsomefriend转载:http://blog.csdn.net/jdhanhua/article/details/4843653<1>使用cutil.h中的函数unsigned int timer=0;//创建计时器cutCreateTimer(&timer);//开始计时cutStartTimer(timer);{ //统计的代码段 …………}//停止计时cutStopTimer(timer);//获得从开始计时到停止之间的时间cutGetTimerValue( timer);//删除timer值cutDeleteTimer( 阅读全文
posted @ 2012-11-16 10:46 智慧的老鸟 阅读(759) 评论(0) 推荐(0) 编辑

摘要:一直在找cuda的文件组织结构帖子,但是,适合自己业务开发的感觉描述不清晰,下面是对自己的cuda工程的一个小结。语言组织框架是工程的一个良好结构,一个适合本业务开发的语言组织框架,对开发人员理解和阅读程序有着良好的帮助。了解到cuda是c的一个子集,用的是nvcc编译环境,针对某领域对cuda的应用,规范自己的程序框架。开发环境:vs2008+cuda5.0工程流程如下:1 新建cuda项目2 新建main.cpp作为程序入口,用的是c++编译器。3 新建业务级别.h和.cpp,业务封装在.h文件的class中。比如:class A{public:fun();}4 新建计算级别的.h或.c. 阅读全文
posted @ 2012-11-15 09:34 智慧的老鸟 阅读(1962) 评论(0) 推荐(0) 编辑

摘要:原文地址:【CUDA学习-原创】包含C和.cu的工程实现!作者:又束起黑色领带现有一纯C的工程,想在里面调用.cu文件的函数。Project里面有一个cppIntegeration的例子,不过这个是在CPP里面调用.cu里面的函数,而且,这个工程在sdk里面,很多头文件,库之类的直接引用,因此,可移植性很差。摸索了几天,终于解决了C工程调用CU文件的问题。一起分享一下~~~新建两个文件,A.cu和A_kernel.cu,其中,A.cu作为调用的接口,A_kernel.cu里面实现的功能函数。然后,在A.cu-》右键-》属性-》自定义生成步骤-》常规-》命令行,添加如下命令:"$(CU 阅读全文
posted @ 2012-11-12 14:44 智慧的老鸟 阅读(908) 评论(0) 推荐(0) 编辑

摘要:计算机中,硬件和软件其实是相辅相成的,软件可以降低硬件成本,硬件可以提高速度;这个道理是硬件加速器的存在价值。而在我们的模拟环境中,完全可以用软件模拟一些可以模拟的硬件条件,比如38译码器。//////////////////////////////////////////////////////////////////////////#includeusing namespace std;int main(){char yes = 'Y';do{int a=0,b=0,c = 0;printf("input a,b,c\n");while (1){scan 阅读全文
posted @ 2012-11-07 17:26 智慧的老鸟 阅读(458) 评论(0) 推荐(0) 编辑

摘要:#include#define len 3#define max 1000using namespace std;int isSXH(int d){//d>0int temp = d;int i = 0;int darr[len] = {0};do{darr[i] = d;i++;//darr[i] =d;d /=10;}while(d != 0);int add = 0;for (i = 0;i{add += darr[i]*darr[i]*darr[i];}if (temp == add){return 1;}return 0;//不是水仙花数返回0;}int main(){//co 阅读全文
posted @ 2012-11-07 17:24 智慧的老鸟 阅读(209) 评论(0) 推荐(0) 编辑

摘要:cuda文件组织形式原文地址:CUDA学习笔记2作者:叶以撒CUDA的文件组织形式:1. CUDA工程中可以有.cu和.cpp。2. 在.cu文件中,可以用#include "cuda_x.cuh"来相互调用.cu里的函数,也可以调用 #include "cpp_x.h". 比如在test1.h 中声明class A; 在test1.cpp中定义class A的相关成员函数。那么在cuda_xx.cu中,先 #include "test1.h",然后在定义 extern"C" void foo(...){ A aa 阅读全文
posted @ 2012-11-06 15:02 智慧的老鸟 阅读(3284) 评论(0) 推荐(0) 编辑

摘要:vs2008上创建cuda项目,新建test.cu文件,将如下代码拷贝进去,编译执行,能很清楚地看到GPU跑矩阵乘法和CPU的效率区别。在我的pc机上执行得到如下结果,可见矩阵乘法的GPU效率大概提高了一个数量级(相对应CPU而言),开发环境VS2008+cuda5.x开发包+GT520M显卡。程序代码(参考程序员下载程序,进行修改:http://download2.pudn.com/downloads245/sourcecode/windows/csharp/05872102CUDAMatrixMul.rar):///////////////////////#include#include# 阅读全文
posted @ 2012-11-06 11:59 智慧的老鸟 阅读(3225) 评论(0) 推荐(0) 编辑

摘要:我的显卡配置��显卡类型:独立显��显卡芯片:NVIDIA GeForce GT 520M显存容量��1GB显存类型:DDR3 纠错显存位宽��64bit流处理器数量��48DirectX��11如果显卡槽可以插多个显卡,那么为了提高效率,可以多插几个显卡。在�€个新的环境中编程�€发,必须先了解这个环境的配置,包括处理器、存储等信息,这样编写出来的程序才能具备�€优秀的效率�€�所以本文开篇给出了我的显卡信息��1 cuda编程�€述:�€ CUDA是以C语言扩展的方式提供给程序员的,这样程序员也可以定义C语言的函数,称之为kernel。当调用kernel的时候,会由N个CUDA线程并行地执 阅读全文
posted @ 2012-11-06 11:56 智慧的老鸟 阅读(2268) 评论(0) 推荐(0) 编辑

摘要:接着上一篇配置,未看到成果的开发环境,继续配置,回家拿GT520显卡笔记本进行试验,终于成功:1 首先在官方网站上下载cuda安装包,官网只会保留最新的开发包,目前是出道5.x系列的cuda。5.x系列不同于之前的系列两大区别——第一,集成了sdk和tool于一体,下载msi文件后直接安装,环境配置将自动完成。安装好后,你要看显卡驱动是否安装好了,如果没有安装好,你打开NVIDIA CUDA Samples Browser v5.0里面的任何程序实例,都将无法执行,因为你电脑里没有支持的显卡驱动程序。这个解决方法很简单,在你的程序目录下,打开一个让你安装的显卡驱动,点击安装即可,我是尝试了好几 阅读全文
posted @ 2012-11-05 09:57 智慧的老鸟 阅读(3280) 评论(3) 推荐(1) 编辑

摘要:GPU是显示卡的“心脏”,GPU是显示卡的“大脑”,它决定了该显卡的档次和大部分性能,同时也是2D显示卡和3D显示卡的区别依据。2D显示芯片在处理3D图像和特效时主要依赖CPU的处理能力,称为“软加速”。3D显示芯片是将三维图像和特效处理功能集中在显示芯片内,也即所谓的“硬件加速”功能。 GPU通用计算方面的标准目前有 OPEN CL、CUDA、ATI STREAM。其中,OpenCL(全称Open Computing Language,开放运算语言)是第一个面向异构系统通用目的并行编程的开放式、免费标准,也是一个统一的编程环境 提高计算机性能一般有两种思想,一种是提高GUP的时钟频率,虽然. 阅读全文
posted @ 2012-11-02 13:51 智慧的老鸟 阅读(5442) 评论(0) 推荐(0) 编辑

摘要:mysql是最基本的数据库,对于非数据库的开发人员来说,如何使用和查询等基本操作是了解和应用masql的基础,就mysql的操作作了一些实用的笔记:SELECT VERSION(), CURRENT_DATE; #查版本SELECT SIN(PI()/4), (4+1)*5;#简易计算器SHOW DATABASES;SELECT DATABASE();SELECT USER()CREATE DATABASE hfxtest;#创建数据库USE hfxtest;SHOW TABLES;DROP TABLES test1#删除表#创建表CREATE TABLE if not exists test 阅读全文
posted @ 2012-11-02 13:36 智慧的老鸟 阅读(275) 评论(0) 推荐(0) 编辑