zoukankan      html  css  js  c++  java
  • 第一个CUDA程序

    CUDA是NVIDIA公司开发的一个用于GPU编程的开源框架,用于将GPU用于更广泛的数学计算,充当cpu的功能,所以只能在nvidia的GPU下实现,如果你的GPU不是nvidia的,赶紧去换一个吧,ATI也有一个类似的框架,叫做streaming,不过要用汇编写。CUDA只需拥有C语音功底就够了。

    CUDA C只是C语言的扩展,多了一些包,只要安装好CUDA工具箱(编译GPU代码的编译器)就可以在VS等IDE下就能编译和运行。

    下载GPU驱动程序 www.nvidia.com/cuda(可能你的机器已经装好)

    下载CUDA工具箱 http://developer.nvidia.com/object/gpucomputing.html

    还可以下载GPU Computing SDK代码集,也是一个很好的学习资源。

    CUDA程序可以分为两部分:GPU执行的代码和CPU执行的代码,两者可以互不干扰,可以通过cudaMemcpy()函数把GPU的相应内存块复制到主存的相应位置,或者相反过程,实现GPU和CPU的数据交互。CPU的内存叫做主存,GPU的里面也有内存,可以叫他设备内存。

    由于GPU是为图形设计的,具有强大的3维渲染等技术,所以对于多维数组的计算是有强大的能力的。

    GPU可以像CPU一样进行计算工作,同样具备多线程,并且线程还是多维线程,计算能力超强,而且可以与CPU的计算一起相互协作,从而实现多核CPU计算的效果。

    一个简单的传递参数给GPU计算的代码:

    [cpp] view plaincopy
     
    1. #include <stdio.h>  
    2. #include "../common/book.h"  
    3.   
    4. __global__ void add(int a,int b,int *c)//__global__声明的函数,告诉编译器这段代码交由GPU执行  
    5. {  
    6.     *c=a+b;  
    7. }  
    8.   
    9. int main(void)  
    10. {  
    11.     int c;  
    12.     int *dev_c;  
    13.     HANDLE_ERROR(cudaMalloc( (void**)&dev_c,sizeof(int) ) );//cudaMalloc()函数让GPU分配内存给某个指针  
    14.       
    15.     add<<<1,1>>>(2, 7, dev_c);//让GPU启动一个线程来运行add()函数,函数的变量必须是保持在GPU上的  
    16.   
    17.     HANDLE_ERROR(cudaMemcpy(&c,dev_c,sizeof(int),cudaMemcpyDeviceToHost) );//将GPU的某块内存复制回CPU  
    18.     printf("2 + 7 = %d ",c);  
    19.     cudaFree(dev_c);//释放GPU内存  
    20.   
    21.     return 0 ;  
    22. };  



    [cpp] view plaincopy
     
      1. <pre name="code" class="cpp"><pre></pre>  
      2. <pre></pre>  
      3. <p> HANDLE_ERROR()是我们定义的宏。判断是否返回了一个错误值。</p>  
      4. <p>一定不能在主机代码中对设备指针进行解引用,主机代码可以将这个指针作为参数传递,对其执行算术运算,甚至可以将其转换为另外一种不同的类型,但是绝对不能使用这个指针来读取或者写入内存。</p>  
      5. <p>设备指针的使用限制:</p>  
      6. <p>1,可以将cudaMalloc()分配的指针传递给在设备上执行的函数。</p>  
      7. <p>2,可以将设备代码中使用cudaMalloc()分配的指针进行内存读、写操作。</p>  
      8. <p>3,可以将cudaMalloc()分配的指针传递给在主机上执行的函数。</p>  
      9. <p>4,不能在主机代码中使用cudaMalloc()分配的指针进行内存读、写操作。</p>  
      10. <pre></pre>  
      11. <pre></pre>  
      12. <pre></pre>  
      13.       
      14.         <div style="padding-top:20px">           
      15.             <p style="font-size:12px;">版权声明:本文为博主原创文章,未经博主允许不得转载。</p>  
      16.         </div>  
      17. </pre>  
  • 相关阅读:
    我爱java系列之---【微服务间的认证—Feign拦截器】
    我爱java系列之---【设置权限的三种解决方案】
    581. Shortest Unsorted Continuous Subarray
    129. Sum Root to Leaf Numbers
    513. Find Bottom Left Tree Value
    515. Find Largest Value in Each Tree Row
    155. Min Stack max stack Maxpop O(1) 操作
    painting house
    Minimum Adjustment Cost
    k Sum
  • 原文地址:https://www.cnblogs.com/honeybusybee/p/4926033.html
Copyright © 2011-2022 走看看