摘要: GPU的硬件结构,也不是具体的硬件结构,就是与CUDA相关的几个概念:thread,block,grid,warp,sp,sm。sp: 最基本的处理单元,streaming processor 最后具体的指令和任务都是在sp上处理的。GPU进行并行计算,也就是很多个sp同时做处理sm:多个sp加上其他的一些资源组成一个sm, streaming multiprocessor. 其他资源也就是存储资源,共享内存,寄储器等。warp:GPU执行程序时的调度单位,目前cuda的warp的大小为32,同在一个warp的线程,以不同数据资源执行相同的指令。grid、block、thread:在利用cud 阅读全文
posted @ 2013-07-25 19:24 一点心青 阅读(15743) 评论(0) 推荐(0) 编辑
摘要: __syncthreads()是cuda的内建函数,用于块内线程通信.__syncthreads() is you garden variety thread barrier. Any thread reaching the barrier waits until all of the other threads in that block also reach it. It is designed for avoiding race conditions when loading shared memory, and the compiler will not move memory rea 阅读全文
posted @ 2013-07-25 19:17 一点心青 阅读(26554) 评论(0) 推荐(2) 编辑
摘要: 内核函数中要用data结构作用参数1 typedef struct2 {3 int* value;4 int* num;5 } data; 1 //host端 2 3 data* h_input; 4 h_input=(data*)malloc(sizeof(data)); 5 h_input->value=(int*)malloc(sizeof(int)*N); 6 h_input->num=(int*)malloc(sizeof(int)*N); 7 8 data tmp; //用于过渡 9 cudaMalloc((void**)& tmp->value,size 阅读全文
posted @ 2013-07-25 19:05 一点心青 阅读(4902) 评论(1) 推荐(0) 编辑
摘要: 目前,存在着各种计时函数,一般的处理都是先调用计时函数,记下当前时间tstart,然后处理一段程序,再调用计时函数,记下处理后的时间tend,再tend和tstart做差,就可以得到程序的执行时间,但是各种计时函数的精度不一样.下面对各种计时函数,做些简单记录. 方法1,time()获取当前的系统时间,返回的结果是一个time_t类型,其实就是一个大整数,其值表示从CUT(Coordinated Universal Time)时间1970年1月1日00:00:00(称为UNIX系统的Epoch时间)到当前时刻的秒数. void test1(){ time_t start,stop;... 阅读全文
posted @ 2013-07-25 18:03 一点心青 阅读(86612) 评论(1) 推荐(5) 编辑
摘要: 最近几天,看了与topk相关的几个问题,在这里做一些记录。问题一:已知一个数组,求取数组的最小值和最大值。方法一:将求取最小值和最大值看成单独的问题,每个问题单独解决,具体实现如下: 1 void MinMaxValue(int* data,int n,int& min_v,int max_v) 2 { 3 //求取最小值 4 min_v = data[0]; 5 for(int i = 1;i max_v)15 max_v = data[i];16 }17 }方法二:维持两个变量min和max,每次取两个数,比较1次,较小的和min比... 阅读全文
posted @ 2013-05-05 17:51 一点心青 阅读(621) 评论(0) 推荐(0) 编辑
摘要: 问题来源:假设正在编写一个小游戏,游戏的背景是发生在太空,有宇宙飞船、太空船和小行星,它们可能会互相碰撞,而且其碰撞的规则不同,如何用C++代码处理物体间的碰撞。代码的框架如下: 1 class GameObject{...}; 2 class SpaceShip:public GameObject{...}; 3 class SpaceStation:public GameObject{...}; 4 class Asteroid:public GameObject{...}; 5 6 void checkForCollision(GameObject& obj1,GameObjec 阅读全文
posted @ 2012-08-23 17:41 一点心青 阅读(654) 评论(0) 推荐(0) 编辑
摘要: C++,当有一个指针或引用,但是不知道其指向对象的真实类型是什么时,可以调用虚函数完成特定类型对象的行为。但是有时候,我们需要根据不同的数据构造不同的对象类型,相当于虚拟的构造函数。1.虚拟构造函数 虚拟构造函数是指能够根据输入给穹的数据的不同而建立不同类型的对象。虚拟构造函数可应用于从磁盘(或者通网络连,或者从磁带机上)读取对象信息构造不同类型对象。例如需要编写一个程序,用业进行新闻报道的工作,每一条新闻报道都由文字或图片组成。其具体实现代码如下: 1 class NLComponet 2 { 3 public: 4 ... 5 }; 6 7 class TextBlock:... 阅读全文
posted @ 2012-08-23 16:14 一点心青 阅读(1951) 评论(0) 推荐(0) 编辑
摘要: 问题来源:假设系统中只有一台打印机,如何把打印机对象数止限定为一个。或者系统只提供16个可分发出去的文件描述符,如何确保文件描述符对象存在的数目不能超过16个。在具体的应用过程中,我们可能需要限制某个类所产生的对象数量。下面我们先从简单的问题的开始。1.如何允许建立零个对象? 实例化一个对象时,将调用一个构造函数,因而阻止建立某个类的对象,最容易的方法就是把该类的构造函数声明在类的private域。代码示例如下:1 class CantBeInstantiated 2 {3 private:4 CantBeInstantiated();5 CantBeInstantiated... 阅读全文
posted @ 2012-08-23 14:37 一点心青 阅读(2198) 评论(0) 推荐(1) 编辑
摘要: C++中存在着三种类型的与内存管理相关的接口,new 操作符(new operator),new 操作(operator new)和placement new.下面简单介绍这三种接口区别和联系.new操作符是语言内置的操作符,像sizeof一样,我们不能改变它的含义和功能.我们用new操作完成动态对象的创建.它主要完成两部分工作:1.分配足够的内存以便容纳所需类型的对象.2.调用构造函数初始化内存中的对象.new操作符分配内存时,需要调用一个内存分配函数完成内存分配的工作.这个函数就是new操作(operator new).函数operator new的声明方式如下:1 void* opera 阅读全文
posted @ 2012-07-29 10:55 一点心青 阅读(637) 评论(0) 推荐(0) 编辑
摘要: 在概率及博弈论上,秘书问题的描述如下: 要聘请一名秘书,有n个应聘者.每次面试一人,面试后就要及时决定是否聘化,如果当时决定不聘他,他便举回来.面试后总能清楚了解应聘者的合适程度,并能和之前的每个人做比较.问什么样的策略,才使最佳人选被选中的概率最大. 这个问题最优解是一个停止规则.在这个规则里... 阅读全文
posted @ 2012-07-28 19:40 一点心青 阅读(4043) 评论(0) 推荐(0) 编辑