CUDA并行计算框架(二) 实例相关

从这部分开始 结合虫子的demo程序给大家分析下cuda的性能与可行性。

一。先概述下实现流程。

CUDA在执行的时候是让host里面的一个一个的kernel按照线程网格(Grid)的概念在显卡硬件(GPU)上执行。每一个线程网格又可以包含多个线程块(block),每一个线程块中又可以包含多个线程(thread)。

每一个kernel交给每一个Grid来完成。当要执行这些任务的时候,每一个Grid又把任务分成一部分一部分的block,block再分线程来完成。每个Grid中的任务是一定的。二维线程块的索引关系为如下:
unsigned int xIndex = blockDim.x * blockIdx.x + threadIdx.x;

unsigned int yIndex = blockDim.y * blockIdx.y + threadIdx.y;

block中的每个线程都有自己的寄存器和local memory,block中的所有线程共享一个shared memory,一个grid共享一个global memory。

每一个时钟周期内,warp(一个block里面一起运行的thread)包含的thread数量是有限的,现在的规定是32个。一个block中含有16个warp。所以一个block中最多含有512个线程

每次Device(就是显卡)只处理一个grid。

下面说明一下硬件的执行模型。    

   假如出于某种原因,公司的办公室被征用了搞活动。只留下一个小房间来给开发团队。每一个时钟周期内按照wrap(就理解为运行的时候,一个block里面一起运行的thread,例如block里面有512个thread,但是每次只有32个thread在运行,那么这32个thread就是一个运行的warp组 线程束)。每一个warp里面包含的thread数量是有限的,现在的规定是32个。将来不知道会不会有变化,这个只有CUDA开发人员知道了。每次Device(就是显卡)只处理一个grid(在未来支持directX11 的硬件中这一限制可能被解除)。假如我们一个部门有x个人,办公室内有N个桌子,每张桌子可以坐32个人。然后轮流来开发….。这里的桌子可以理解成multiprocessor(多处理器)。每个sm中包含8个标量流处理器(sp)。GPU所谓的多核中核的概念就是sp的数量。Cuda中的kernel函数实质上是以block为单位执行的。同一block中需要共享数据,因此他们必须在同一个SM中发射,而block中的每一个线程则被发射到sp上去执行。      疑点:既然有这样的线程簇限制、为何还要设置高于warp线程数的线程。

二。demo

安装部署方面driver、toolkit、sdk顺序安装好。Cuda的项目支持4种调试方式release、debug、emurelease、emudubug。前2个是需要gpu真正的支持cuda后者是cpu模拟gpu。至于你的电脑能否支持cuda 可以运行下deviceQuery.exe程序

计算框架(二) 实例相关-cuda并行计算举例">
图中我们关注一下几点就可以了,首先 有一个支持cuda的设备。计算能力1,局存储器的大小,核的数量,多处理器的数量,常量存储器的大小、每个block的共享存储器的大小、wrap的线程数等等。
想看cuda在图形领域的应用可以运行这个smokeParticles.exe程序哦。

在我的demo中,cpp文件主要是处理一些cpu端的处理、cu文件通常是与gpu核函数和cuda api的一些内容。其中My_kernel封装了具体的核函数实现方法。Cudatool项目就是cuda的应用程序,CudaProviders是我连接C#与cuda之间的驱动、CudaWeb就是我们平常的web项目。CUDAWinApp这个就是一些小的功能演示。
下面介绍下cuda的函数类型限定符。
__device__ 在设备上执行、只能在设备上调用。
__global__ 用于声明内核函数、在设备上执行只能从主机端调用。
__host__ 在主机端执行,只能从主机端调用,默认。
__device__与__global__不支持递归,函数体内不能声明静态变量、参数数目不可变化,不能对device取指针。__global__与__host__不能连用。__global__只能返回空,调用__global__函数必须声明其执行配置、__global__函数的调用是异步的、__global__参数的值目前是通过共享存储器传递,总的大小不能超过256byte。
变量类型限定符分为__device__(变量存在设备端上)、__constant__(存在常数存储器空间)、__share__(block的共享存储器)、volatile关键字 当线程间数据可能互相影响变换时使用。

时间: 2024-09-20 20:55:27

CUDA并行计算框架(二) 实例相关的相关文章

CUDA并行计算框架(三)应用前景及相比价微软的并行计算框架

关于微软.net4.0推出的并行计算框架 还没深入了解 有兴趣的同学可以参考下http://bitfan.blog.51cto.com/907048/200199系列博文 不过发表下个人的观点 微软.NET 4.0中引入的并行扩展(包括任务并行库TPL和PLINQ)开发技术基于cpu. 从应用领域上来说CPU擅长处理不规则数据结构以及递归算法.分支密集型代码和单线程程序.这类程序任务拥有复杂的指令调度.循环.分支.逻辑判断以及执行等步骤.例如,操作系统.文字处理等,而GPU擅于处理规则数据结构.

CUDA并行计算框架(一) 概念相关、内容比较抽象

一.   概念. 1. 相关关键字. CUDA(Compute Unified Device Architecture). GPU英文全称Graphic Processing Unit,中文翻译为"图形处理器". 2. CUDA是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题.它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎.. 3. 从CUDA体系结构的组成来说,包含了三个部分:开发库.运行期环境和驱动.开发库是基于CUDA技术所提供的

Tiny并行计算框架之实现机理

当然,秉承偶的一向的观点,让新手也能看得懂. 首先看工作的接口: ? 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 public interface Wor

CUDA编程(二) CUDA初始化与核函数

CUDA编程(二) CUDA初始化与核函数 CUDA初始化 在上一次中已经说过了,CUDA安装成功之后,新建一个工程还是十分简单的,直接在新建项目的时候选择NVIDIA CUDA项目就可以了,我们先新建一个MyCudaTest 工程,删掉自带的示例kernel.cu,然后新建项,新建一个CUDA C/C++ File ,我们首先看一下如何初始化CUDA,因此我命名为InitCuda.cu 首先我们要使用CUDA的RunTime API 所以 我们需要include cuda_runtime.h

ssh-初学者SSH框架登录实例遇到的问题,启动tomcat时出错,请指导。

问题描述 初学者SSH框架登录实例遇到的问题,启动tomcat时出错,请指导. 八月 21 2015 10:35:18 上午 org.apache.catalina.core.StandardContext listenerStart严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListeneror

《Android的设计与实现:卷I》——第1章 2.2JNI框架层实例分析

2.2 JNI框架层实例分析 框架层大量使用了JNI技术来完成对系统运行库的调用.深入理解JNI对分析框架层代码十分有用.本节将以框架层的实例详细讲解JNI编程的三个步骤. 在Android应用程序开发中,一般是调用应用框架层的android.util.Log.java提供的Java接口来使用日志系统.比如我们会写如下代码输出日志: Log.d(TAG,"debug log"); 这个Java接口其实是通过JNI调用系统运行库(即本地库)并最终调用内核驱动程序Logger把Log写到内

DWR框架简单实例 (http://my.oschina.net/u/1790925/blog/366346)

文章转自<http://my.oschina.net/u/1790925/blog/366346>,感谢大牛分享! DWR框架简单实例    1.从DWR官网下载最新版本的jar包,地址:http://directwebremoting.org/dwr/downloads/index.html 2.将jar包放入WEB-INF的lib文件夹下.同时,dwr依赖于commons-logging.jar这个包,所以必须将这个jar包也放入到WEB-INF的lib文件夹下. 3.配置dwr的环境:

iOS Foundation 框架 224 篇相关文档分类整理

iOS Foundation 框架 224 篇相关文档分类整理 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 截至 2014-05-02 ,苹果官网 Foundation 框架相关文档共计 2

gpu c语言-cuda gpu 编程 二维线程块

问题描述 cuda gpu 编程 二维线程块 这个程序语言用到二维线程块么 什么时候需要? 解决方案 GPU-cuda编程葵花宝典CUDA下的GPU编程--线程和变量CUDA下的GPU编程--线程和变量