03 2014 档案

GPGPU OpenCL/CUDA 高性能编程的10大注意事项
摘要:1.展开循环 如果提前知道了循环的次数,可以进行循环展开,这样省去了循环条件的比较次数。但是同时也不能使得kernel代码太大。 循环展开代码例子: 1 #include 2 using namespace std; 3 4 int main(){ 5 int sum=0; 6 for(int i=1;i2 int main()3 {4 int a=SIZE;5 printf("a=%d, SIZE=%d\n",a,SIZE);6 return 0;7 }View Code 编译: g++ -DSIZE=128 -o A Dmacro.cpp4... 阅读全文

posted @ 2014-03-30 21:24 旭东的博客 阅读(9918) 评论(1) 推荐(1) 编辑

GPGPU OpenCL 精确字符串查找
摘要:字符串查找是信息安全、信息过滤领域的重要操作,尤其是对大文本的实时处理。这篇作为实例,使用GPU OpenCL进行精确模式串查找。1.加速方法 (1)将少量常量数据,如模式串长度、文本长度等,保存在线程的private memory中。 (2)将模式串保存在GPU的local memory中,加速线程对模式串的访问。 (3)将待查找的文本保存在global memory中,使用尽可能多线程访问global memory,减小线程平均访存时间。 (4)每个work-group中的线程操作文本中一段,多个work-group并行处理大文本。2.同步 (1)work-group内,使用CL... 阅读全文

posted @ 2014-03-28 14:57 旭东的博客 阅读(2413) 评论(0) 推荐(0) 编辑

OpenMP 中的线程任务调度
摘要:OpenMP中任务调度主要针对并行的for循环,当循环中每次迭代的计算量不相等时,如果简单地给各个线程分配相同次数的迭代,则可能会造成各个线程计算负载的不平衡,影响程序的整体性能。如下面的代码中,如果每个线程执行的任务数量平均分配,有的线程会结束早,有的线程结束晚: 1 #include 2 #include 3 4 int main(){ 5 int a[100][100] = {0}; 6 #pragma omp parallel for 7 for (int i =0; i 2 #include 3 int main(){ 4 int a[100][100] ... 阅读全文

posted @ 2014-03-26 16:16 旭东的博客 阅读(12563) 评论(1) 推荐(1) 编辑

设计模式之责任链模式
摘要:设计模式是前人、大牛等在实际编程中对遇到的问题解决方案的抽象,也就是每一个设计模式都在编程实例中有体现。1.责任链模式在编程中的小体现,看下面的情况:(1)if else if .... 1 if(aB->D。(责任链末尾必须是默认处理类,也即switch中的default部分) 1 #include 2 using namespace std; 3 class Handler{ ///处理类抽象 4 public: 5 Handler(int _value):value(_value){} ///设置自身能够处理的编号 6 virtual ~Handler(){} 7 ... 阅读全文

posted @ 2014-03-22 21:07 旭东的博客 阅读(12485) 评论(1) 推荐(1) 编辑

OpenMP 线程同步之临界区
摘要:多核/多线程编程中肯定会用到同步互斥操作。除了互斥变量以为,就是临界区。临界区是指在用一时刻只允许一个线程执行的一段用{...},包围的代码段。在OpenMP中临界区声明方法如下:#pragma omp critical [(name)] //[]表示名字可选{ //需要同一时刻只能有一个线程访问的代码}如下面的代码: 1 #include 2 #include 3 4 int main() 5 { 6 int sum = 0; 7 #pragma omp parallel 8 printf("Hello World!!!\n"); 9 10 #pragma omp pa. 阅读全文

posted @ 2014-03-21 17:52 旭东的博客 阅读(3850) 评论(0) 推荐(0) 编辑

设计模式之原型模式
摘要:设计模式中的原型模型主要是针对构造复杂对象提出来的,当构造函数需要大量的操作时构造一个类的对象会耗费大量的资源。本文:http://www.cnblogs.com/xudong-bupt/p/3506450.html1.C++中的解决方案 在C++中默认提供了copy构造函数、copy assignment操作符,可以实现对象的内存拷贝,节省了新构造对象的开销,其中的实现机制就是操作符重载。C++代码如下: 1 #include 2 #include 3 using namespace std; 4 5 class Point{ 6 public: 7 Point(const ... 阅读全文

posted @ 2014-03-20 22:07 旭东的博客 阅读(1679) 评论(0) 推荐(0) 编辑

GPGPU OpenCL使用结构体数据
摘要:OpenCL编程中可以使用结构体,只需要在核函数kernel中提供同样的结构体申明就可以啦。如果在主函数中定义了结构体:1 typedef struct studentNode{2 int age;3 float height;4 }student;主函数中定义数据,并传输给OpenCL kernel: 1 student *stu_input=(student*)malloc(sizeof(studentNode)); 2 stu_input->age=25; 3 stu_input->height=1.8l; 4 student *stu_o... 阅读全文

posted @ 2014-03-19 15:44 旭东的博客 阅读(3672) 评论(0) 推荐(0) 编辑

GPGPU OpenCL Reduction操作与group同步
摘要:Reduction操作:规约操作就是由多个数生成一个数,如求最大值、最小值、向量点积、求和等操作,都属于这一类操作。有大量数据的情况下,使用GPU进行任务并行与数据并行,可以收到可好的效果。group同步:OpenCL只提供了工作组内的各线程之间的同步机制,并没有提供所有线程的同步。提供组内item-work同步的方法: void barrier (cl_mem_fence_flags flags) 参数说明:cl_mem_fence_flags 可以取CLK_LOCAL_MEM_FENCE、CLK_GLOBAL_MEM_FENCE 函数说明:(1)一个work-group中所有work... 阅读全文

posted @ 2014-03-17 17:14 旭东的博客 阅读(5494) 评论(1) 推荐(0) 编辑

VS2010 OpenCL运行环境配置
摘要:1.安装AMD GPU显卡驱动(安装后重启) 13-12_win7_win8_64_dd_ccc_whql.exe2.安装AMD OpenCL SDK(安装后重启) AMD-APP-SDK-v2.9-Windows-641.exe3.配置VS2010 OpenCL环境 (1)添加外部头文件 在项目->properties ->Configuration Proprtties->C/C++->General中设置。 (2)添加外部依赖OpenCL.lib 添加OpenCL.lib所在路径 在项目->properties ->Configuration Prop 阅读全文

posted @ 2014-03-14 18:15 旭东的博客 阅读(3970) 评论(1) 推荐(0) 编辑

C++ 操作符重载
摘要:1.什么是操作符重载 可以使用分词将操作符重载理解为:操作符+重载。 C++中的操作符很多,如+,-,*,\等等。 C++中的重载也是C++中面向对象多态的体现。 简单说操作符重载: C++中有:int a=2+3; 那么a=5 操作符重载可以实现对自定义类型的操作: 1 #include 2 using namespace std; 3 4 class Point{ 5 public: 6 int x; 7 int y; 8 Point(int _x,int _y):x(_x),y(_y){ 9 }10 11 Point op... 阅读全文

posted @ 2014-03-13 22:36 旭东的博客 阅读(4427) 评论(0) 推荐(1) 编辑

C++构造函数、析构函数、虚析构函数
摘要:1.构造函数 C++中的构造函数是用于初始化类的各种变量以及分配资源等。主要的注意事项是: (1)在继承关系中先初始化父类对象后初始化子类对象。 (2)在一个类中按照变量的声明顺序,对类中的变量进行初始化。 (3)初始化过程中,可以使用已经被初始化的对象去初始化其他的对象。2.析构函数 析构函数与构造函数作用相反,当对象脱离其作用域时(例如对象所在的函数已调用完毕),系统自动执行析构函数。 析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。 调用顺序与构造函数正好相反,先析构子类(释放子类资源),在析构... 阅读全文

posted @ 2014-03-12 21:21 旭东的博客 阅读(3199) 评论(1) 推荐(0) 编辑

正则表达式贪婪与非贪婪模式
摘要:之前做程序的时候看到过正则表达式的贪婪与非贪婪模式,今天用的时候就想不起来了,现在这里总结一下,以备自己以后用到注意。 1.什么是正则表达式的贪婪与非贪婪匹配 如:String str="abcaxc"; Patter p="ab.*c"; 贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪 阅读全文

posted @ 2014-03-08 11:28 旭东的博客 阅读(160315) 评论(7) 推荐(4) 编辑

GPGPU OpenCL 获取设备信息
摘要:在使用OpenCL编程中,需要对GPU设备的底层理解,这样才能更好的进行代码优化。比如计算单元CU数量,每个CU的执行单元PE数量,每个CU中的共享内存大小等等。只有了解了这些才能更好的使用共享内存,设计核函数的运行参数等。本文:http://www.cnblogs.com/xudong-bupt/p/3586050.html1.clGetDeviceInfo OpenCL使用clGetDeviceInfo函数获取设备具体,函数原型如下: cl_int clGetDeviceInfo ( cl_device_id device, //设备id号 cl_device_info... 阅读全文

posted @ 2014-03-07 12:11 旭东的博客 阅读(9224) 评论(2) 推荐(1) 编辑

GPGPU OpenCL编程步骤与简单实例
摘要:http://www.cnblogs.com/xudong-bupt/p/3582780.html1.OpenCL概念 OpenCL是一个为异构平台编写程序的框架,此异构平台可由CPU、GPU或其他类型的处理器组成。OpenCL由一门用于编写kernels (在OpenCL设备上运行的函数)的语言(基于C99)和一组用于定义并控制平台的API组成。 OpenCL提供了两种层面的并行机制:任务并行与数据并行。2.OpenCL与CUDA的区别 不同点:OpenCL是通用的异构平台编程语言,为了兼顾不同设备,使用繁琐。 CUDA是nvidia公司发明的专门在其GPGPU上的编程的框架... 阅读全文

posted @ 2014-03-06 17:37 旭东的博客 阅读(26333) 评论(0) 推荐(1) 编辑

去掉linux 系统vi中出现^M字符的方法
摘要:^M符号是windows系统下的換行符,在windows下的文本通过bin模式ftp上传到了unxi空间出现的。在test.txt文件中有如下内容: eeesdgtdfg dfgdfgfdgfd ^M ineesert into pusfdgdfgfd)ff;^M adwwfdfed adfdsdfsfdsf.^M在命令模式下运行命令 :%s/^M//g 回车注意:里面的^M 必须是同时按 Ctrl+V+M ,表示回车。不是直接输入 ^M,也不是粘帖复制。命令完成后,用:x 保存退出后,再次用vi打开就全部被替换掉了。 阅读全文

posted @ 2014-03-06 15:23 旭东的博客 阅读(16597) 评论(0) 推荐(1) 编辑

OpenMP 线程互斥锁
摘要:OpenMP是跨平台的多核多线程编程的一套指导性的编译处理方案(Compiler Directive),指导编译器将代码编译为多线程程序。多线程编程中肯定会涉及到线程之间的资源共享问题,就可以使用互斥锁,就是只有获得互斥锁的线程可以执行,其他线程阻塞。1.OpenMP中的互斥锁函数 void om... 阅读全文

posted @ 2014-03-01 11:30 旭东的博客 阅读(9360) 评论(0) 推荐(0) 编辑

CUDA使用Event进行程序计时
摘要:GPGPU是众核设备,包含大量的计算单元,实现超高速的并行。使用CUDA在nvidia显卡上面编程时,可以使用CUDA提供的Event进行程序计时。当然,每种编程语言基本都提供了获取系统时间的函数,如C/C++/Java 程序计时功能函数Event可以统计GPU上面某一个任务或者代码段的精确运行时间。如下面的程序实例(CalTime.cu): 1 #include 2 #include 3 4 //__global__声明的函数,告诉编译器这段代码交由CPU调用,由GPU执行 5 __global__ void mul(int *dev_a,const int NUM) 6 { 7 ... 阅读全文

posted @ 2014-03-01 09:27 旭东的博客 阅读(15357) 评论(3) 推荐(0) 编辑

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示