摘要:
1.最简单的方法,创建一个对象,然后添加属性 1 var person = new Object(); 2 person.age = 23; 3 person.name = "David"; 4 person.job = "student"; 5 person.sayName = function () 6 { 7 alert(this.name); 8 }; 9 10 //类似于定义键值对或者json数据格式的定义方法.11 var person =12 {13 age:23,14 name:"David",15 job:" 阅读全文
摘要:
调试工具 cuda-gdb,网上有英文版的说明文档。其中大部分调试命令和gdb的调试命令相同。cuda程序分为主机端程序和设备端程序,主机端程序调试也就是C语言程序的调试主要是设备端程序,关键点也就是如何进入设备端程序。调试时,编译选项 -g -G-g 说明程序是Debug版, -G生成相应的设备端代码进入设备端程序,需要在设备端入口程序设置断点大致的流程如下:break test_kernelthread >> (进入单个线程)接下来就可以按C语言程序的方法进行调试在设备端程序时,有些变量的值不能打印出来这些变量存储在显存中,无法打印基本方法:选择编译选项,设置断点,进入设备端程 阅读全文
摘要:
下面简单介绍一些cuda中的共享存储器和全局存储器 共享存储器,shared memory,可以被同一块中的所有线程访问的可读写存储器,生存期是块的生命期。Tesla的每个SM拥有16KB共享存储器。在编程过程中,有静态的shared memory 动态的shared memory静态的shared memory 在程序中定义 __shared__ type shared[SIZE];动态的shared memory 通过内核函数的每三个参数设置大小 extern __shared__ type shared[];共享存储器被组织为16个bank,每个bank拥有32bit的宽度。无ban.. 阅读全文
摘要:
全局存储器,即普通的显存,整个网格中的任意线程都能读写全局存储器的任意位置。存取延时为400-600 clock cycles 非常容易成为性能瓶颈。访问显存时,读取和存储必须对齐,宽度为4Byte。如果没有正确的对齐,读写将被编译器拆分为多次操作,降低访存性能。多个half-warp的读写操作如果能够满足合并访问,则多次访存操作会被合并成一次完成。合并访问的条件,GT200放宽了合并访问的条件。支持对8 bit、16 bit、32 bit、64 bit数据字的合并访问 相应传输32Byte 64Byte 128Byte,大于128Byte,分两次传输。在一次合并传输的数据中,不要求线程编号和 阅读全文
摘要:
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 阅读全文
摘要:
__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 阅读全文
摘要:
内核函数中要用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 阅读全文
摘要:
目前,存在着各种计时函数,一般的处理都是先调用计时函数,记下当前时间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;... 阅读全文