﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-C++ Coder-随笔分类-CUDA</title><link>http://www.cppblog.com/jackdongy/category/20102.html</link><description>HCP高性能计算架构，实现，编译器指令优化，算法优化，
  LLVM   CLANG   OpenCL   CUDA   OpenACC    C++AMP   OpenMP   MPI</description><language>zh-cn</language><lastBuildDate>Sun, 30 Dec 2012 11:34:24 GMT</lastBuildDate><pubDate>Sun, 30 Dec 2012 11:34:24 GMT</pubDate><ttl>60</ttl><item><title>Ubuntu 12.10 下安装 nvidia 显卡驱动的问题  </title><link>http://www.cppblog.com/jackdongy/archive/2012/12/26/196673.html</link><dc:creator>jackdong</dc:creator><author>jackdong</author><pubDate>Wed, 26 Dec 2012 04:45:00 GMT</pubDate><guid>http://www.cppblog.com/jackdongy/archive/2012/12/26/196673.html</guid><wfw:comment>http://www.cppblog.com/jackdongy/comments/196673.html</wfw:comment><comments>http://www.cppblog.com/jackdongy/archive/2012/12/26/196673.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jackdongy/comments/commentRss/196673.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jackdongy/services/trackbacks/196673.html</trackback:ping><description><![CDATA[<a href="http://blog.163.com/hotman_x.vip/blog/static/48950133201211483326248/">http://blog.163.com/hotman_x.vip/blog/static/48950133201211483326248/</a><br /><br />和所有 Linux 发行版一样，Ubuntu 默认使用 nouveau 开源驱动。话说这个驱动还不错的，甚至能够支持一些三维游戏。不过，既然有更好的 nvidia 官方驱动，弃之不用也说不过去。虽然官方驱动是闭源的，但既然买了 nvidia 的显卡，当然就有使用这个软件的权利。<br />简要的说，从 Ubuntu 11.10 开始，直到 Ubuntu 12.04，运用官方驱动是很简单的事，无论从&#8220;软件中心&#8221;用鼠标点击安装，还是用一条命令 sudo apt-get install nvidia-current 来安装，都是简单惬意的事。<br /><br />然而，在 Ubuntu 12.10 下，出问题了&#8230;&#8230;安装完毕之后，重启，登录，得到了一个没有任何菜单、工具条的纯桌面。好在可以用 Ctrl-Alt T 来启动一个终端&#8212;&#8212;我知道 Ctrl-Alt F1 之类的快捷键，但是，由于中文 locale 设置，在 tty 终端那里，你会得到大量的菱形，它们原本应该是汉字&#8212;&#8212;既然有指挥电脑的地方，那么还有救，呵呵。当年在 Fedora 下一直是手工安装 n 卡驱动的，那个安装过程&#8230;&#8230;很明显就是一个编译的过程！谷歌了一下，果然，需要 kernel 的源代码和头文件！<br /><br />如果你已经走到了这一步，如下操作（以 curent 版为例，如果你安装的其它版本，比如 current-updates 之类，请自行更改命令）。＃ 开头的行是注释，请注意 Ubuntu 不允许 root 登录，不会有 root 提示符的（刚写完就想起来，回来修正一下，想得到 root 提示符也很简单的：sudo bash）。<br /><br /># 首先卸载驱动<br />$ sudo apt-get remove --purge nvidia-current<br /><br /># 安装 kernel 源代码、头文件<br />$ sudo apt-get install linux-source linux-headers-generic<br /><br /># 重新安装驱动<br />$ sudo apt-get install nvidia-current<br /><br /># 通常你会用到的，建议把这个也装上<br />$ sudo apt-get install nvidia-settings<br /><br />#重启<br />$ sudo reboot<img src ="http://www.cppblog.com/jackdongy/aggbug/196673.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jackdongy/" target="_blank">jackdong</a> 2012-12-26 12:45 <a href="http://www.cppblog.com/jackdongy/archive/2012/12/26/196673.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ubuntu11.04下CUDA4.0的安装与配置 </title><link>http://www.cppblog.com/jackdongy/archive/2012/10/31/194111.html</link><dc:creator>jackdong</dc:creator><author>jackdong</author><pubDate>Wed, 31 Oct 2012 01:03:00 GMT</pubDate><guid>http://www.cppblog.com/jackdongy/archive/2012/10/31/194111.html</guid><wfw:comment>http://www.cppblog.com/jackdongy/comments/194111.html</wfw:comment><comments>http://www.cppblog.com/jackdongy/archive/2012/10/31/194111.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jackdongy/comments/commentRss/194111.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jackdongy/services/trackbacks/194111.html</trackback:ping><description><![CDATA[<a href="http://www.cnblogs.com/giraffe/archive/2011/10/21/CUDA-Ubuntu-Install.html">http://www.cnblogs.com/giraffe/archive/2011/10/21/CUDA-Ubuntu-Install.html</a><br /><br />
<div id="cnblogs_post_body">
<h5>1：下载CUDA 4.0</h5>
<p>安装官网最新的显卡驱动：</p>
<p>安装方法可以参考：</p>
<p><a href="http://www.cnblogs.com/giraffe/archive/2011/10/21/Ubuntu11-nvidiaDriver.html" target="_blank">《Ubuntu11.04下安装Nvidia显卡驱动的方法》</a></p>
<p>然后从NVIDIA网站（http://developer.nvidia.com/cuda-downloads）下载</p>
<p>CUDA Toolkit for Ubuntu Linux 10.10；</p>
<p>GPU Computing SDK；</p>
<p>CUDA Tools SDK。</p>
<p>&nbsp;</p>
<h6>2：安装CUDA Toolkit for Ubuntu Linux 10.10</h6>
<p>由于在ubuntu11.04下无法正常的用sh命令进行安装，所以需要用以下命令进行安装：</p>
<div class="cnblogs_code"><pre>chmod +x cudatoolkit_4.0.17_linux_32_ubuntu10.10.run  <br />sudo ./cudatoolkit_4.0.17_linux_32_ubuntu10.10.run</pre></div>
<p>注意上面工具包的名称要跟你下载的工具包名称一致，不同系统版本的文件名略有差别。</p>
<p>预设是安装在/usr/local/cuda 目录下，建议就依照他的预设路径安装。</p>
<p>安装完成后要设定Library 的Path，有两个方式:</p>
<p>(1)一种是更改LD_LIBRARY_PATH 环境变数：</p>
<p>在用户名的目录下开.bashrc文件，可以通过vi命令或者gedit命令进行编辑，我更喜欢后者，在末尾处加入两行命令：</p>
<div class="cnblogs_code"><pre>gedit ~/.bashrc<br />export PATH=/usr/local/cuda/bin:$PATH  <br />export LD_LIBRARY_PATH=/usr/local/cuda/lib:$LD_LIBRARY_PATH  </pre></div>
<p>如果是64位系统的话需要将上一行的lib改为lib64,然后保存。</p>
<p>&nbsp;</p>
<p>(2)另一种方法是直接加在/etc/ld.so.conf.d/ 里面：</p>
<div class="cnblogs_code"><pre>sudo echo "/usr/local/cuda/lib" &gt;&gt; /etc/ld.so.conf.d/cuda-40.conf<br />sudo ldconfig</pre></div>
<p>如果是64位系统同样将lib改为lib64</p>
<p>再设定PATH： &nbsp;</p>
<div class="cnblogs_code"><pre>echo 'export PATH=$PATH:/usr/local/cuda/bin' &gt;&gt; ~/.bashrc</pre></div>
<p>&nbsp;</p>
<h6>3：安装CUDA Tools SDK：</h6>
<div class="cnblogs_code"><pre>chmod +x cudatools_4.0.17_linux_32.run  <br />sudo ./cudatools_4.0.17_linux_32.run</pre></div>
<p>预设是安装在/usr/local/cuda/CUDAToolsSDK 目录下。</p>
<p>&nbsp;</p>
<h6>4：安装GPU Computing SDK：</h6>
<div class="cnblogs_code"><pre>chmod +x gpucomputingsdk_4.0.17_linux.run  <br />./gpucomputingsdk_4.0.17_linux.run</pre></div>
<p>预设是安装在自己帐号的~/NVIDIA_GPU_Computing_SDK 目录下，安装时要设置CUDA 安装的路径： Enter CUDA install path (default /usr/local/cuda):</p>
<p>若CUDA 都是依照预设路径安装，则这里就不需要更动。</p>
<p>&nbsp;</p>
<h6>5：设定GCC编译器 &nbsp;</h6>
<p>CUDA 4.0 目前只支援到gcc 4.4，若是只有装gcc 4.5 的话，还要再装一下gcc 4.4 才能编译：&nbsp;</p>
<div class="cnblogs_code"><pre>sudo apt-get install gcc-4.4 g++-4.4 </pre></div>
<p>接着要让编译时能够使用gcc 4.4，一种方式是将系统的/usr/bin/gcc 改连到/usr/bin/gcc-4.4，/usr/bin/g++ 也一样改连到/usr/bin/ g++-4.4，或是使用update-alternative： &nbsp;</p>
<div class="cnblogs_code"><pre>sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.5 150  <br />sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 100  <br />sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.5 150  <br />sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.4 100  </pre></div>
<p>接着使用update-alternatives 选择4.4 版的gcc： &nbsp;</p>
<div class="cnblogs_code"><pre>sudo update-alternatives --config gcc  </pre></div>
<p>执行后选择gcc-4.4，再接着选择4.4 版的g++： &nbsp;</p>
<div class="cnblogs_code"><pre>sudo update-alternatives --config g++  </pre></div>
<p>执行后选择g++-4.4 &nbsp;</p>
<p>若不想修改整个系统的设定，有另一个办法可以处理，自己建一个~/bin 目录，然后建立gcc-4.4 与g++-4.4 的连结，再将这个路径加入自己的PATH 中，这样就不会影响其他的程式：</p>
<div class="cnblogs_code"><pre>mkdir ~/bin  <br />ln -s /usr/bin/gcc-4.4 ~/bin/gcc  <br />ln -s /usr/bin/g++-4.4 ~/bin/g++  </pre></div>
<p>然后在每次要编译CUDA 程式前执行：&nbsp;</p>
<div class="cnblogs_code"><pre>export PATH=~/bin:$PATH  </pre></div>
<p>这样就不需要更动到系统其他程式的设定了。 &nbsp;</p>
<p>&nbsp;</p>
<h6>6：编译GPU Computing SDK code samples &nbsp;</h6>
<div class="cnblogs_code"><pre>cd ~/NVIDIA_GPU_Computing_SDK <br />make</pre></div>
<p>若是幸运的话，这样就大公告成了，但通常都会有些问题，像编译时若是出现类似这样的问题： &nbsp;</p>
<div class="cnblogs_code"><pre>/usr/bin/ld: cannot find -lXi  <br />/usr/bin/ld: cannot find -lXmu  <br />/usr/bin/ld: cannot find -lglut  <br />collect2: ld returned 1 exit status  </pre></div>
<p>是表示有一些必要的Library 没装，用apt-cache 找一下再用apt-get 装起来就可以了： &nbsp;</p>
<div class="cnblogs_code"><pre>apt-get install libxi-dev libxmu-dev libglut3-dev  </pre></div>
<p>我安装的时候就出现了</p>
<div class="cnblogs_code"><pre>/usr/bin/ld: cannot find -lGL  <br />collect2: ld returned 1 exit status  </pre></div>
<p>这其实是因为没有链接到正确的libGL的库，这时候执行以下命令</p>
<div class="cnblogs_code"><pre>sudo -i<br />cd /usr/lib/<br />ls -al |grep libGL.so.*</pre></div>
<p>执行完上述命令后，会看见有一个与你按装的驱动程序相类似的编号呃so，如我的驱动程序版本是280.13就会有一个</p>
<p>libGL.so.280.13的文件，然后执行以下命令。当然，这个需要root权限</p>
<div class="cnblogs_code"><pre>rm libGL.so<br />ln -s libGL.so.280.13 libGL.so</pre></div>
<p>&nbsp;</p>
<p>安装完成之后就要检验一下CUDA安装是否成功</p>
<p>进入~/NVIDIA_GPU_Computing_SDK/C/bin/linux/release目录下看看是不是有很多可执行文件</p>
<p>注意deviceQuery这个可执行文件，我们就是要执行它来判断自己的CUDA是否安装成功，输入./deviceQuery命令来执行它，如果出现你的显卡信息则说明CUDA已经安装成功。</p></div><img src ="http://www.cppblog.com/jackdongy/aggbug/194111.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jackdongy/" target="_blank">jackdong</a> 2012-10-31 09:03 <a href="http://www.cppblog.com/jackdongy/archive/2012/10/31/194111.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ubuntu11.04安装Nvidia驱动的方法</title><link>http://www.cppblog.com/jackdongy/archive/2012/10/31/194110.html</link><dc:creator>jackdong</dc:creator><author>jackdong</author><pubDate>Wed, 31 Oct 2012 01:03:00 GMT</pubDate><guid>http://www.cppblog.com/jackdongy/archive/2012/10/31/194110.html</guid><wfw:comment>http://www.cppblog.com/jackdongy/comments/194110.html</wfw:comment><comments>http://www.cppblog.com/jackdongy/archive/2012/10/31/194110.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jackdongy/comments/commentRss/194110.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jackdongy/services/trackbacks/194110.html</trackback:ping><description><![CDATA[<a href="http://www.cnblogs.com/giraffe/archive/2011/10/21/Ubuntu11-nvidiaDriver.html">http://www.cnblogs.com/giraffe/archive/2011/10/21/Ubuntu11-nvidiaDriver.html</a><br /><br />
<p>lz的显卡是GeForce GTX&nbsp;460SE。而本人是一个灰常灰常的新手，结合网上的教程和自已屡试屡败的经验终于把显卡驱动安装成功了<br />我安装总是出现下列错误：<br />ERROR: The Nouveau kernel driver is currently in use by your system. This<br />driver is incompatible with the NVIDIA driver, and must be disabled<br />before proceeding. Please&nbsp;consult the NVIDIA driver README&nbsp;and your<br />Linux distribution's documentation for details on how to correctly<br />disable the Nouveau kernel driver.</p>
<p>看到好多教程都是修改已有的blacklist.conf,来解决此问题，但我修改以后出现了Ctrl + Alt +F1进入不了第一控制台，然后找nvidia的官方说明，写的是建立一个新的disable-nouveau.conf然后配置, 贴出来好方便大家参考：</p>
<p>具体步聚：<br />1.去官方下载最新版的nVidia驱动，现最新版本是Nvidia-Linux-x86-280.13.run</p>
<p><a href="http://www.nvidia.cn/Download/index.aspx?lang=cn">http://www.nvidia.cn/Download/index.aspx?lang=cn</a></p>
<p><a href="http://www.nvidia.cn/Download/index.aspx?lang=cn"></a><br />2.删除之前所安装的nVidia驱动(没安的略去这一步)</p>
<div class="cnblogs_code"><pre>sudo apt-get --purge remove nvidia-*</pre></div>
<p>3.建立并修改disable-nouveau.conf</p>
<div class="cnblogs_code"><pre>sudo gedit /etc/modprobe.d/disable-nouveau.conf</pre></div>
<p>在里面填入两行内容：</p>
<div class="cnblogs_code"><pre> blacklist nouveau<br /> options nouveau modeset=0</pre></div>
<p>然后重启电脑，重启之后你会发现画面质量明显降低，证明代码生效了。</p>
<p><br />4.按Ctrl + Alt +F1到第一控制台，输入用户名，密码登陆后执行：</p>
<div class="cnblogs_code"><pre>sudo /etc/init.d/gdm stop</pre></div>
<p>&nbsp;这是因为Nvidia官方驱动不能运行在X-server下，所以要关闭GUI。</p>
<p><br />5.进入驱动所在文件夹，安装驱动</p>
<div class="cnblogs_code"><pre>sudo sh NVIDIA-Linux-x86-280.13.run</pre></div>
<p>注意区分大小写，安装过程中出现更新，选择NO，安装完毕，然后配置Xconfig：</p>
<div class="cnblogs_code"><pre>sudo nvidia-xconfig</pre></div>
<p>&nbsp;&nbsp;</p>
<p>6.配置好之后，重启图形界面，Ok~</p>
<div class="cnblogs_code"><pre>sudo /etc/init.d/gdm restart</pre></div><img src ="http://www.cppblog.com/jackdongy/aggbug/194110.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jackdongy/" target="_blank">jackdong</a> 2012-10-31 09:03 <a href="http://www.cppblog.com/jackdongy/archive/2012/10/31/194110.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>图文解释Visual Studio 2008 建立CUDA 项目 </title><link>http://www.cppblog.com/jackdongy/archive/2012/10/21/193605.html</link><dc:creator>jackdong</dc:creator><author>jackdong</author><pubDate>Sun, 21 Oct 2012 04:57:00 GMT</pubDate><guid>http://www.cppblog.com/jackdongy/archive/2012/10/21/193605.html</guid><wfw:comment>http://www.cppblog.com/jackdongy/comments/193605.html</wfw:comment><comments>http://www.cppblog.com/jackdongy/archive/2012/10/21/193605.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jackdongy/comments/commentRss/193605.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jackdongy/services/trackbacks/193605.html</trackback:ping><description><![CDATA[<p>本文向大家介绍如何利用VS2008建立一个CUDA工程。</p>
<p>第一步： 下载相应的deriver和toolkit，最好把sdk也下载来安装好。</p>
<p>依次安装这三个软件。这里就不讨论这一部分了。这部分实在是没得说。</p>
<p><br /></p>
<p>第二步：建立新空工程</p>
<p><img alt="" src="http://img.my.csdn.net/uploads/201210/03/1349199432_8876.png" /><br />图1</p>
<p><img alt="" src="http://img.my.csdn.net/uploads/201210/03/1349199521_4183.png" /><br />图2</p>
<p><img alt="" src="http://img.my.csdn.net/uploads/201210/03/1349199521_3966.png" /><br />图3</p>
<p><img alt="" src="http://img.my.csdn.net/uploads/201210/03/1349199432_4527.png" /><br />图4</p>
<p>第三步：选择编译生成规则</p>
<p><img alt="" src="http://img.my.csdn.net/uploads/201210/03/1349199432_1494.png" /><br />图5</p>
<p><img alt="" src="http://img.my.csdn.net/uploads/201210/03/1349199432_6836.png" /><br />图6</p>
<p>第四步：添加CUDA文件右击你的项目，选择添加-》新建项，然后参照图示</p>
<p><img alt="" src="http://img.my.csdn.net/uploads/201210/03/1349199432_2848.png" /><br />图7</p>
<p><img alt="" src="http://img.my.csdn.net/uploads/201210/03/1349199485_1831.png" /><br />图8</p>
<p><img alt="" src="http://img.my.csdn.net/uploads/201210/03/1349199485_3162.png" /><br />图9</p>
<p>第五步：添加链接库，右击项目-》属性</p>
<p><img alt="" src="http://img.my.csdn.net/uploads/201210/03/1349199485_2950.png" /><br />图10</p>
<p><img alt="" src="http://img.my.csdn.net/uploads/201210/03/1349199485_3151.png" /><br />图11</p>
<p>最后一步：生成</p>
<p><img alt="" src="http://img.my.csdn.net/uploads/201210/03/1349199485_4267.png" /><br />图12</p>
<p><img alt="" src="http://img.my.csdn.net/uploads/201210/03/1349199521_7138.png" /><br />图13</p><br /><a href="http://blog.csdn.net/bendanban/article/details/8037538">http://blog.csdn.net/bendanban/article/details/8037538</a><img src ="http://www.cppblog.com/jackdongy/aggbug/193605.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jackdongy/" target="_blank">jackdong</a> 2012-10-21 12:57 <a href="http://www.cppblog.com/jackdongy/archive/2012/10/21/193605.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CUDA设备选择数据类型的问题 </title><link>http://www.cppblog.com/jackdongy/archive/2012/10/21/193604.html</link><dc:creator>jackdong</dc:creator><author>jackdong</author><pubDate>Sun, 21 Oct 2012 04:56:00 GMT</pubDate><guid>http://www.cppblog.com/jackdongy/archive/2012/10/21/193604.html</guid><wfw:comment>http://www.cppblog.com/jackdongy/comments/193604.html</wfw:comment><comments>http://www.cppblog.com/jackdongy/archive/2012/10/21/193604.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jackdongy/comments/commentRss/193604.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jackdongy/services/trackbacks/193604.html</trackback:ping><description><![CDATA[<p>最近在实现一个向量相称的CUDA程序的时候，碰见一个让我很头疼的问题。基本症状是：计算结果在小数据量的时候是完全正确的，如果向量的维数增大到一定数值后，计算结果就不对了。我查了好久，终于找到了问题的源头。竟然是数据类型的问题，写下来提醒后来人！</p>
<p>我在内核函数中使用以下语句：</p>
<div style="font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; border-bottom: #cccccc 1px solid; word-break: break-all; padding-bottom: 4px; padding-top: 4px; padding-left: 4px; border-left: #cccccc 1px solid; padding-right: 5px; width: 98%; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">01</span><span style="color: #000000">.unsigned&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;tx&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;threadIdx.x;&nbsp;&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">02</span><span style="color: #000000">.unsigned&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;bx&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;blockIdx.x;&nbsp;&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">03</span><span style="color: #000000">.unsigned&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;id&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;tx&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;bx</span><span style="color: #000000">*</span><span style="color: #000000">blockDim.x;&nbsp;&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span></div>
<p>&nbsp;</p>id竟然不对了。我需要ls个线程，如果ls的数目足够大，使得bx的值溢出了。<br />
<p><br />解决方法是：&nbsp;</p>
<p>&nbsp;</p>
<div style="font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; border-bottom: #cccccc 1px solid; word-break: break-all; padding-bottom: 4px; padding-top: 4px; padding-left: 4px; border-left: #cccccc 1px solid; padding-right: 5px; width: 98%; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">unsigned&nbsp;</span><span style="color: #0000ff">short</span><span style="color: #000000">&nbsp;bx&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;blockIdx.x;</span></div>
<p>头疼的解决总会是好的。欢迎大家的驻足，我继续。。 </p><br /><a href="http://blog.csdn.net/bendanban/article/details/7971447">http://blog.csdn.net/bendanban/article/details/7971447</a><br /><img src ="http://www.cppblog.com/jackdongy/aggbug/193604.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jackdongy/" target="_blank">jackdong</a> 2012-10-21 12:56 <a href="http://www.cppblog.com/jackdongy/archive/2012/10/21/193604.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC项目中使用CUDA的原则性说明 </title><link>http://www.cppblog.com/jackdongy/archive/2012/10/21/193603.html</link><dc:creator>jackdong</dc:creator><author>jackdong</author><pubDate>Sun, 21 Oct 2012 04:54:00 GMT</pubDate><guid>http://www.cppblog.com/jackdongy/archive/2012/10/21/193603.html</guid><wfw:comment>http://www.cppblog.com/jackdongy/comments/193603.html</wfw:comment><comments>http://www.cppblog.com/jackdongy/archive/2012/10/21/193603.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jackdongy/comments/commentRss/193603.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jackdongy/services/trackbacks/193603.html</trackback:ping><description><![CDATA[<p>问题描述：有很多朋友希望自己的MFC程序中能使用CUDA。就一直搜索MFC项目配置CUDA的资料。在这里以个人的经验和理解向还在迷茫的朋友们说几点，看完这几点说明，相信大家不会再迷茫。</p>
<p>1、首先微软提供过的各种项目模版只是简化了我们的开发时间，它的实质还是C或者C++语言。所以我们只要把神马MFC项目理解为普通的C\C++项目就可以了。</p>
<p>2、基于第一点，我们应该做些什么那？只要在我们的MFC项目下按照一般C\C++程序添加CUDA代码就可以了。这一点我们应该思考，添加了代码就可以了吗？当然不可以！应该思考一下文件的编译过程，在没有指定编译器的情况下你的CUDA程序怎么可能被正确编译那？你必须选择.cu文件的编译规则！如果你使用runtime，你要添加自定义编译规则，然后修改你的cu文件的属性，告诉VS你的cu问价是谁来编译的。</p>
<p>3、根据nvcc的编译规则，cu文件首先会被编译，然后生成一大堆的obj文件，然后是微软的编译器开始工作，他编译了剩下的程序。然后是连接器，它连接了所有obj，lib。然后你如果想执行，执行就是了。</p>
<p>4、如果大家觉得这种方法不可靠，完全可以把cuda的程序写成DLL的，然后在大家想使用CUDA的程序中添加lib、dll。</p>
<p>&nbsp;</p>
<p>以上是我个人理解，如有可以探讨的问题，可以评论，我会及时做出回答。<img alt="微笑" src="http://static.blog.csdn.net/xheditor/xheditor_emot/default/smile.gif" /></p><br /><a href="http://blog.csdn.net/bendanban/article/details/7606116">http://blog.csdn.net/bendanban/article/details/7606116</a><img src ="http://www.cppblog.com/jackdongy/aggbug/193603.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jackdongy/" target="_blank">jackdong</a> 2012-10-21 12:54 <a href="http://www.cppblog.com/jackdongy/archive/2012/10/21/193603.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何在Ubuntu12.04上安装CUDA </title><link>http://www.cppblog.com/jackdongy/archive/2012/10/21/193602.html</link><dc:creator>jackdong</dc:creator><author>jackdong</author><pubDate>Sun, 21 Oct 2012 04:51:00 GMT</pubDate><guid>http://www.cppblog.com/jackdongy/archive/2012/10/21/193602.html</guid><wfw:comment>http://www.cppblog.com/jackdongy/comments/193602.html</wfw:comment><comments>http://www.cppblog.com/jackdongy/archive/2012/10/21/193602.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jackdongy/comments/commentRss/193602.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jackdongy/services/trackbacks/193602.html</trackback:ping><description><![CDATA[<a href="http://blog.csdn.net/bendanban/article/details/7918391">http://blog.csdn.net/bendanban/article/details/7918391</a><br />
<p>本文以CUDA4.2为例讲解如何在Ubuntu12.04上安装CUDA</p>
<p>注意一点，在安装之前，必须确保自己的GPU是NVIDIA的GPU，并且支持CUDA。如果不确定自己的显卡是否支持CUDA，可以在<a href="http://developer.nvidia.com/cuda-gpus" target="_blank">http://developer.nvidia.com/cuda-gpus</a>中找到支持CUDA的GPU列表。如果你的显卡是ATI的，可以使用OpenCL来获得GPU的计算资源（<a href="http://www.khronos.org/opencl">http://www.khronos.org/opencl</a>）.</p>
<p>&nbsp;</p>
<p>如果你的GPU满足上面的要求，下面我们就开始安装了。</p>
<p>第一步：下载安装文件，安装文件driver，toolkit，SDK。可以在<a href="http://developer.nvidia.com/cuda/cuda-toolkit-archive">http://developer.nvidia.com/cuda/cuda-toolkit-archive</a>下载到自己想安装的版本。特别注意一下自己的系统是多少位的，在终端执行下面的命令可以知道你的系统的位数。</p>
<div style="font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; border-bottom: #cccccc 1px solid; word-break: break-all; padding-bottom: 4px; padding-top: 4px; padding-left: 4px; border-left: #cccccc 1px solid; padding-right: 5px; width: 98%; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">[]$uname&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">m</span></div>
<p>&nbsp;</p>i686是32位系统，x86_64是64位系统。至于选择那个toolkit选择Ubuntu11.04是可行的，至少我使用了几个月了没遇到问题。 
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>第二步：安装驱动。</p>
<p>确保所有需要的东西都已经安装好了。</p>
<p>&nbsp;</p>
<div style="font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; border-bottom: #cccccc 1px solid; word-break: break-all; padding-bottom: 4px; padding-top: 4px; padding-left: 4px; border-left: #cccccc 1px solid; padding-right: 5px; width: 98%; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">$sudo&nbsp;apt</span><span style="color: #000000">-</span><span style="color: #0000ff">get</span><span style="color: #000000">&nbsp;install&nbsp;freeglut3</span><span style="color: #000000">-</span><span style="color: #000000">dev&nbsp;build</span><span style="color: #000000">-</span><span style="color: #000000">essential&nbsp;libx11</span><span style="color: #000000">-</span><span style="color: #000000">dev&nbsp;libxmu</span><span style="color: #000000">-</span><span style="color: #000000">dev&nbsp;libxi</span><span style="color: #000000">-</span><span style="color: #000000">dev&nbsp;libgl1</span><span style="color: #000000">-</span><span style="color: #000000">mesa</span><span style="color: #000000">-</span><span style="color: #000000">glx&nbsp;libglu1</span><span style="color: #000000">-</span><span style="color: #000000">mesa&nbsp;libglu1</span><span style="color: #000000">-</span><span style="color: #000000">mesa</span><span style="color: #000000">-</span><span style="color: #000000">dev&nbsp;binutils</span><span style="color: #000000">-</span><span style="color: #000000">gold</span></div>
<p>为了不让系统打扰我们安装驱动，把一些需要的模块列入黑名单：</p>
<div style="font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; border-bottom: #cccccc 1px solid; word-break: break-all; padding-bottom: 4px; padding-top: 4px; padding-left: 4px; border-left: #cccccc 1px solid; padding-right: 5px; width: 98%; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">[]$gksu&nbsp;gedit&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">etc</span><span style="color: #000000">/</span><span style="color: #000000">modprobe.d</span><span style="color: #000000">/</span><span style="color: #000000">blacklist.conf</span></div>
<p>在打开的文件里添加一下几行</p>
<div style="font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; border-bottom: #cccccc 1px solid; word-break: break-all; padding-bottom: 4px; padding-top: 4px; padding-left: 4px; border-left: #cccccc 1px solid; padding-right: 5px; width: 98%; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">blacklist&nbsp;amd76x_edac<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />blacklist&nbsp;vga16fb<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />blacklist&nbsp;nouveau<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />blacklist&nbsp;rivafb<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />blacklist&nbsp;nvidiafb<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />blacklist&nbsp;rivatv</span></div>
<p>将文件保存后退出。 </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>为了能去除所有NVIDIA的残余物，在终端中执行下面的命令：</p>
<div style="font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; border-bottom: #cccccc 1px solid; word-break: break-all; padding-bottom: 4px; padding-top: 4px; padding-left: 4px; border-left: #cccccc 1px solid; padding-right: 5px; width: 98%; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">sudo&nbsp;apt</span><span style="color: #000000">-</span><span style="color: #0000ff">get</span><span style="color: #000000">&nbsp;remove&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">purge&nbsp;nvidia</span><span style="color: #000000">*</span></div>
<p>这个命令可能需要执行一段时间，所以要耐心的等等。等它完成了，重新启动你的机器。在登录界面出现后，先不要登录，在键盘上按下Ctrl+Alt+F1组合键，以文本的方式登录，找到你的驱动安装文件，执行下面的命令：</p>
<div style="font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; border-bottom: #cccccc 1px solid; word-break: break-all; padding-bottom: 4px; padding-top: 4px; padding-left: 4px; border-left: #cccccc 1px solid; padding-right: 5px; width: 98%; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">sudo&nbsp;service&nbsp;lightdm&nbsp;stop<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />chmod&nbsp;a</span><span style="color: #000000">+</span><span style="color: #000000">x&nbsp;devdriver</span><span style="color: #000000">*</span><span style="color: #000000">.run</span></div>
<p>这里devdriver*.run指的是你的驱动的名字。下面是安装。</p>
<div style="font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; border-bottom: #cccccc 1px solid; word-break: break-all; padding-bottom: 4px; padding-top: 4px; padding-left: 4px; border-left: #cccccc 1px solid; padding-right: 5px; width: 98%; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">sudo&nbsp;.</span><span style="color: #000000">/</span><span style="color: #000000">devdriver</span><span style="color: #000000">*</span><span style="color: #000000">.run</span></div>
<p>安装结束后，重新启动系统。 </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>第三步：登录后，打开终端，安装toolkit</p>
<p>在终端下进入toolkit的目录，执行下面的命令：</p>
<div style="font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; border-bottom: #cccccc 1px solid; word-break: break-all; padding-bottom: 4px; padding-top: 4px; padding-left: 4px; border-left: #cccccc 1px solid; padding-right: 5px; width: 98%; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">chmod&nbsp;a</span><span style="color: #000000">+</span><span style="color: #000000">x&nbsp;cudatoolkit</span><span style="color: #000000">*</span><span style="color: #000000">.run<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />sudo&nbsp;.</span><span style="color: #000000">/</span><span style="color: #000000">cudatoolkit</span><span style="color: #000000">*</span><span style="color: #000000">.run</span></div>
<p>&nbsp;</p>
<p>cudatoolkit*.run代表你的toolkit的安装文件。</p>
<p>这样安装之后还要确保你安装的动态链接库可以被自己的程序找到。最好在使用CUDA之前执行下面的命令。</p>
<p>对于32位系统：</p>
<p>&nbsp;</p>
<div style="font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; border-bottom: #cccccc 1px solid; word-break: break-all; padding-bottom: 4px; padding-top: 4px; padding-left: 4px; border-left: #cccccc 1px solid; padding-right: 5px; width: 98%; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">export&nbsp;LD_LIBRARY_PATH</span><span style="color: #000000">=/</span><span style="color: #000000">usr</span><span style="color: #000000">/</span><span style="color: #000000">local</span><span style="color: #000000">/</span><span style="color: #000000">cuda</span><span style="color: #000000">/</span><span style="color: #000000">lib:$LD_LIBRARY_PATH<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span></div>
<p>对于64位系统：</p>
<div style="font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; border-bottom: #cccccc 1px solid; word-break: break-all; padding-bottom: 4px; padding-top: 4px; padding-left: 4px; border-left: #cccccc 1px solid; padding-right: 5px; width: 98%; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">export&nbsp;LD_LIVRARY_PATH</span><span style="color: #000000">=/</span><span style="color: #000000">usr</span><span style="color: #000000">/</span><span style="color: #000000">local</span><span style="color: #000000">/</span><span style="color: #000000">cuda</span><span style="color: #000000">/</span><span style="color: #000000">lib:$LD_LIBRARY_PATH<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />export&nbsp;LD_LIVRARY_PATH</span><span style="color: #000000">=/</span><span style="color: #000000">usr</span><span style="color: #000000">/</span><span style="color: #000000">local</span><span style="color: #000000">/</span><span style="color: #000000">cuda</span><span style="color: #000000">/</span><span style="color: #000000">lib64:$LD_LIBRARY_PATH</span></div>
<p>第四步：安装sdk。实际上，这一步并不是使用GPU计算的必要部分，这里面只是包含了一些有用的例子。不过还是推荐大家安装这个SDK。</p>
<p>在终端下进入包含SDK的目录，执行下面的命令</p>
<div style="font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; border-bottom: #cccccc 1px solid; word-break: break-all; padding-bottom: 4px; padding-top: 4px; padding-left: 4px; border-left: #cccccc 1px solid; padding-right: 5px; width: 98%; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">chmod&nbsp;a</span><span style="color: #000000">+</span><span style="color: #000000">x&nbsp;cudasdk.run<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />.</span><span style="color: #000000">/</span><span style="color: #000000">cudasdk.run</span></div>
<p>&nbsp;</p>
<p>cudasdk.run代表了你的SDK的安装文件。</p>
<p>&nbsp;</p>
<p>OK了，如果有问题，一定要留言奥。。。</p>
<p>&nbsp;</p>
<p>PS：本文参考了一篇英文的文章，不过我没有找到那篇文章，要是有网友找到了，可以给我留言。我加上对它的引用。</p>
<p><br /></p>
<p><br /><br /><br /><br /><br />&nbsp;</p><br /><br /><img src ="http://www.cppblog.com/jackdongy/aggbug/193602.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jackdongy/" target="_blank">jackdong</a> 2012-10-21 12:51 <a href="http://www.cppblog.com/jackdongy/archive/2012/10/21/193602.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在CUDA如何使用二维数组（**[M][N]） </title><link>http://www.cppblog.com/jackdongy/archive/2012/10/21/193600.html</link><dc:creator>jackdong</dc:creator><author>jackdong</author><pubDate>Sun, 21 Oct 2012 04:43:00 GMT</pubDate><guid>http://www.cppblog.com/jackdongy/archive/2012/10/21/193600.html</guid><wfw:comment>http://www.cppblog.com/jackdongy/comments/193600.html</wfw:comment><comments>http://www.cppblog.com/jackdongy/archive/2012/10/21/193600.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jackdongy/comments/commentRss/193600.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jackdongy/services/trackbacks/193600.html</trackback:ping><description><![CDATA[<a href="http://blog.csdn.net/bendanban/article/details/7669624">http://blog.csdn.net/bendanban/article/details/7669624</a><br />
<p>总有些童鞋想知道怎么在CUDA中使用二维数组（[M][N]这种类型），其实这个很简单，不过你要完全弄明白，必须对指针，地址等概念非常清楚才行。写这篇博客解决下大家这个问题：</p>
<p>1、首先讲述一下在一般C语言中如何使用二维数组。</p>
<div style="font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; border-bottom: #cccccc 1px solid; word-break: break-all; padding-bottom: 4px; padding-top: 4px; padding-left: 4px; border-left: #cccccc 1px solid; padding-right: 5px; width: 98%; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;r,&nbsp;c;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">**</span><span style="color: #000000">arr&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">**</span><span style="color: #000000">)malloc(ROWS</span><span style="color: #000000">*</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">*</span><span style="color: #000000">));<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">data&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">*</span><span style="color: #000000">)malloc(COLS</span><span style="color: #000000">*</span><span style="color: #000000">ROWS</span><span style="color: #000000">*</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">));<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(r&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;r&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;ROWS;&nbsp;r</span><span style="color: #000000">++</span><span style="color: #000000">)<br /><img onclick="this.style.display='none'; Codehighlighter1_132_159_Open_Text.style.display='none'; Codehighlighter1_132_159_Closed_Image.style.display='inline'; Codehighlighter1_132_159_Closed_Text.style.display='inline';" id="Codehighlighter1_132_159_Open_Image" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img onclick="this.style.display='none'; Codehighlighter1_132_159_Closed_Text.style.display='none'; Codehighlighter1_132_159_Open_Image.style.display='inline'; Codehighlighter1_132_159_Open_Text.style.display='inline';" id="Codehighlighter1_132_159_Closed_Image" style="display: none" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span id="Codehighlighter1_132_159_Closed_Text" style="border-top: #808080 1px solid; border-right: #808080 1px solid; border-bottom: #808080 1px solid; border-left: #808080 1px solid; display: none; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_132_159_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;arr[r]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;data&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;r</span><span style="color: #000000">*</span><span style="color: #000000">COLS;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />free(arr);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />free(data);</span></div>
<p>&nbsp;</p><br />&nbsp;代码中的arr实个二维数组变量了，你可以在for循环之后arr[i][j]的方式使用它。 
<p>&nbsp;</p>
<p>2、告诉你如何在CUDA中使用二维数组可以类比1中的方法，不过你要清楚几点，这几点在代码之后说明。</p>
<div style="font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; border-bottom: #cccccc 1px solid; word-break: break-all; padding-bottom: 4px; padding-top: 4px; padding-left: 4px; border-left: #cccccc 1px solid; padding-right: 5px; width: 98%; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">#include&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">stdio.h</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />#include&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">stdlib.h</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />#include&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">cuda_runtime.h</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">#define</span><span style="color: #000000">&nbsp;ROWS&nbsp;32</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">#define</span><span style="color: #000000">&nbsp;COLS&nbsp;16</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">#define</span><span style="color: #000000">&nbsp;CHECK(res)&nbsp;if(res!=cudaSuccess){exit(-1);}</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />__global__&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Kerneltest(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">**</span><span style="color: #000000">da,&nbsp;unsigned&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;rows,&nbsp;unsigned&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;cols)<br /><img onclick="this.style.display='none'; Codehighlighter1_224_410_Open_Text.style.display='none'; Codehighlighter1_224_410_Closed_Image.style.display='inline'; Codehighlighter1_224_410_Closed_Text.style.display='inline';" id="Codehighlighter1_224_410_Open_Image" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img onclick="this.style.display='none'; Codehighlighter1_224_410_Closed_Text.style.display='none'; Codehighlighter1_224_410_Open_Image.style.display='inline'; Codehighlighter1_224_410_Open_Text.style.display='inline';" id="Codehighlighter1_224_410_Closed_Image" style="display: none" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span id="Codehighlighter1_224_410_Closed_Text" style="border-top: #808080 1px solid; border-right: #808080 1px solid; border-bottom: #808080 1px solid; border-left: #808080 1px solid; display: none; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_224_410_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;row&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;blockDim.y</span><span style="color: #000000">*</span><span style="color: #000000">blockIdx.y&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;threadIdx.y;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;col&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;blockDim.x</span><span style="color: #000000">*</span><span style="color: #000000">blockIdx.x&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;threadIdx.x;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(row&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;rows&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;col&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;cols)<br /><img onclick="this.style.display='none'; Codehighlighter1_372_408_Open_Text.style.display='none'; Codehighlighter1_372_408_Closed_Image.style.display='inline'; Codehighlighter1_372_408_Closed_Text.style.display='inline';" id="Codehighlighter1_372_408_Open_Image" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img onclick="this.style.display='none'; Codehighlighter1_372_408_Closed_Text.style.display='none'; Codehighlighter1_372_408_Open_Image.style.display='inline'; Codehighlighter1_372_408_Open_Text.style.display='inline';" id="Codehighlighter1_372_408_Closed_Image" style="display: none" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_372_408_Closed_Text" style="border-top: #808080 1px solid; border-right: #808080 1px solid; border-bottom: #808080 1px solid; border-left: #808080 1px solid; display: none; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_372_408_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;da[row][col]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;row</span><span style="color: #000000">*</span><span style="color: #000000">cols&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;col;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;main(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;argc,&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">**</span><span style="color: #000000">argv)<br /><img onclick="this.style.display='none'; Codehighlighter1_445_1535_Open_Text.style.display='none'; Codehighlighter1_445_1535_Closed_Image.style.display='inline'; Codehighlighter1_445_1535_Closed_Text.style.display='inline';" id="Codehighlighter1_445_1535_Open_Image" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img onclick="this.style.display='none'; Codehighlighter1_445_1535_Closed_Text.style.display='none'; Codehighlighter1_445_1535_Open_Image.style.display='inline'; Codehighlighter1_445_1535_Open_Text.style.display='inline';" id="Codehighlighter1_445_1535_Closed_Image" style="display: none" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span id="Codehighlighter1_445_1535_Closed_Text" style="border-top: #808080 1px solid; border-right: #808080 1px solid; border-bottom: #808080 1px solid; border-left: #808080 1px solid; display: none; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_445_1535_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">**</span><span style="color: #000000">da&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;NULL;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">**</span><span style="color: #000000">ha&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;NULL;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">dc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;NULL;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">hc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;NULL;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;cudaError_t&nbsp;res;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;r,&nbsp;c;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;is_right</span><span style="color: #000000">=</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;res&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;cudaMalloc((</span><span style="color: #0000ff">void</span><span style="color: #000000">**</span><span style="color: #000000">)(</span><span style="color: #000000">&amp;</span><span style="color: #000000">da),&nbsp;ROWS</span><span style="color: #000000">*</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">*</span><span style="color: #000000">));CHECK(res)<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;res&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;cudaMalloc((</span><span style="color: #0000ff">void</span><span style="color: #000000">**</span><span style="color: #000000">)(</span><span style="color: #000000">&amp;</span><span style="color: #000000">dc),&nbsp;ROWS</span><span style="color: #000000">*</span><span style="color: #000000">COLS</span><span style="color: #000000">*</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">));CHECK(res)<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;ha&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">**</span><span style="color: #000000">)malloc(ROWS</span><span style="color: #000000">*</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">*</span><span style="color: #000000">));<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;hc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">*</span><span style="color: #000000">)malloc(ROWS</span><span style="color: #000000">*</span><span style="color: #000000">COLS</span><span style="color: #000000">*</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">));<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(r&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;r&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;ROWS;&nbsp;r</span><span style="color: #000000">++</span><span style="color: #000000">)<br /><img onclick="this.style.display='none'; Codehighlighter1_811_837_Open_Text.style.display='none'; Codehighlighter1_811_837_Closed_Image.style.display='inline'; Codehighlighter1_811_837_Closed_Text.style.display='inline';" id="Codehighlighter1_811_837_Open_Image" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img onclick="this.style.display='none'; Codehighlighter1_811_837_Closed_Text.style.display='none'; Codehighlighter1_811_837_Open_Image.style.display='inline'; Codehighlighter1_811_837_Open_Text.style.display='inline';" id="Codehighlighter1_811_837_Closed_Image" style="display: none" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_811_837_Closed_Text" style="border-top: #808080 1px solid; border-right: #808080 1px solid; border-bottom: #808080 1px solid; border-left: #808080 1px solid; display: none; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_811_837_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ha[r]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;dc&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;r</span><span style="color: #000000">*</span><span style="color: #000000">COLS;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;res&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;cudaMemcpy((</span><span style="color: #0000ff">void</span><span style="color: #000000">*</span><span style="color: #000000">)(da),&nbsp;(</span><span style="color: #0000ff">void</span><span style="color: #000000">*</span><span style="color: #000000">)(ha),&nbsp;ROWS</span><span style="color: #000000">*</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">*</span><span style="color: #000000">),&nbsp;cudaMemcpyHostToDevice);CHECK(res)<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;dim3&nbsp;dimBlock(</span><span style="color: #000000">16</span><span style="color: #000000">,</span><span style="color: #000000">16</span><span style="color: #000000">);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;dim3&nbsp;dimGrid((COLS</span><span style="color: #000000">+</span><span style="color: #000000">dimBlock.x</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">)</span><span style="color: #000000">/</span><span style="color: #000000">(dimBlock.x),&nbsp;(ROWS</span><span style="color: #000000">+</span><span style="color: #000000">dimBlock.y</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">)</span><span style="color: #000000">/</span><span style="color: #000000">(dimBlock.y));<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;Kerneltest</span><span style="color: #000000">&lt;&lt;&lt;</span><span style="color: #000000">dimGrid,&nbsp;dimBlock</span><span style="color: #000000">&gt;&gt;&gt;</span><span style="color: #000000">(da,&nbsp;ROWS,&nbsp;COLS);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;res&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;cudaMemcpy((</span><span style="color: #0000ff">void</span><span style="color: #000000">*</span><span style="color: #000000">)(hc),&nbsp;(</span><span style="color: #0000ff">void</span><span style="color: #000000">*</span><span style="color: #000000">)(dc),&nbsp;ROWS</span><span style="color: #000000">*</span><span style="color: #000000">COLS</span><span style="color: #000000">*</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">),&nbsp;cudaMemcpyDeviceToHost);CHECK(res)<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(r&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;r&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;ROWS;&nbsp;r</span><span style="color: #000000">++</span><span style="color: #000000">)<br /><img onclick="this.style.display='none'; Codehighlighter1_1227_1384_Open_Text.style.display='none'; Codehighlighter1_1227_1384_Closed_Image.style.display='inline'; Codehighlighter1_1227_1384_Closed_Text.style.display='inline';" id="Codehighlighter1_1227_1384_Open_Image" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img onclick="this.style.display='none'; Codehighlighter1_1227_1384_Closed_Text.style.display='none'; Codehighlighter1_1227_1384_Open_Image.style.display='inline'; Codehighlighter1_1227_1384_Open_Text.style.display='inline';" id="Codehighlighter1_1227_1384_Closed_Image" style="display: none" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1227_1384_Closed_Text" style="border-top: #808080 1px solid; border-right: #808080 1px solid; border-bottom: #808080 1px solid; border-left: #808080 1px solid; display: none; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1227_1384_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(c&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;c&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;COLS;&nbsp;c</span><span style="color: #000000">++</span><span style="color: #000000">)<br /><img onclick="this.style.display='none'; Codehighlighter1_1260_1364_Open_Text.style.display='none'; Codehighlighter1_1260_1364_Closed_Image.style.display='inline'; Codehighlighter1_1260_1364_Closed_Text.style.display='inline';" id="Codehighlighter1_1260_1364_Open_Image" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img onclick="this.style.display='none'; Codehighlighter1_1260_1364_Closed_Text.style.display='none'; Codehighlighter1_1260_1364_Open_Image.style.display='inline'; Codehighlighter1_1260_1364_Open_Text.style.display='inline';" id="Codehighlighter1_1260_1364_Closed_Image" style="display: none" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1260_1364_Closed_Text" style="border-top: #808080 1px solid; border-right: #808080 1px solid; border-bottom: #808080 1px solid; border-left: #808080 1px solid; display: none; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1260_1364_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">%4d&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;hc[r</span><span style="color: #000000">*</span><span style="color: #000000">COLS</span><span style="color: #000000">+</span><span style="color: #000000">c]);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(hc[r</span><span style="color: #000000">*</span><span style="color: #000000">COLS</span><span style="color: #000000">+</span><span style="color: #000000">c]&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;(r</span><span style="color: #000000">*</span><span style="color: #000000">COLS</span><span style="color: #000000">+</span><span style="color: #000000">c))<br /><img onclick="this.style.display='none'; Codehighlighter1_1333_1360_Open_Text.style.display='none'; Codehighlighter1_1333_1360_Closed_Image.style.display='inline'; Codehighlighter1_1333_1360_Closed_Text.style.display='inline';" id="Codehighlighter1_1333_1360_Open_Image" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img onclick="this.style.display='none'; Codehighlighter1_1333_1360_Closed_Text.style.display='none'; Codehighlighter1_1333_1360_Open_Image.style.display='inline'; Codehighlighter1_1333_1360_Open_Text.style.display='inline';" id="Codehighlighter1_1333_1360_Closed_Image" style="display: none" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1333_1360_Closed_Text" style="border-top: #808080 1px solid; border-right: #808080 1px solid; border-bottom: #808080 1px solid; border-left: #808080 1px solid; display: none; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1333_1360_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is_right&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">\n</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">the&nbsp;result&nbsp;is&nbsp;%s!\n</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;is_right</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">right</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">"</span><span style="color: #000000">false</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;cudaFree((</span><span style="color: #0000ff">void</span><span style="color: #000000">*</span><span style="color: #000000">)da);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;cudaFree((</span><span style="color: #0000ff">void</span><span style="color: #000000">*</span><span style="color: #000000">)dc);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;free(ha);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;free(hc);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;getchar();<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span></div>
<p>&nbsp;</p><br />
<p>在CUDA中使用二维数组的几点说明：</p>
<p>1）da是一个二维变量，一定更不可以在33行的时候把ha改成da！一定要记住显存和内存是相互独立的，主机端的程序不可以直接操作显存！必须通过CUDA 提供的API函数来操作！</p>
<p>2）注意在内存申请时强制类型转换(void**)（&amp;），怎么把***的变量转成**了！！这主要是API借口决定的，最好自己显式转换格式，避免不必要的麻烦。</p>
<p>3）看见数据拷贝的函数了吗，类型、类型、还是类型。</p>
<p>4）别忘了释放内存和显存！看见没，还是类型。</p>
<p>5）很希望这篇博客能帮到大家，可是我真的不推荐大家在GPU上使用二维数组！真的！！为什么呢？终归是效率惹的祸！显存的访问总是慢的。二维访存，可是连续访问了两次啊。要是老这样做，不但执行效率低，而且写代码也慢。如果对内存的概念不熟悉，千万别趟这趟浑水。看懂这段代码，就当是学习一下或者理解下内存、显存与内存独立的概念和规则吧。</p>
<p>附上执行结果：</p>
<p><br /><img alt="" align="middle" src="http://img.my.csdn.net/uploads/201206/16/1339854544_1177.png" />&nbsp;</p><br /><img src ="http://www.cppblog.com/jackdongy/aggbug/193600.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jackdongy/" target="_blank">jackdong</a> 2012-10-21 12:43 <a href="http://www.cppblog.com/jackdongy/archive/2012/10/21/193600.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Visual Studio2010配置CUDA 4.0 </title><link>http://www.cppblog.com/jackdongy/archive/2012/10/21/193588.html</link><dc:creator>jackdong</dc:creator><author>jackdong</author><pubDate>Sun, 21 Oct 2012 03:28:00 GMT</pubDate><guid>http://www.cppblog.com/jackdongy/archive/2012/10/21/193588.html</guid><wfw:comment>http://www.cppblog.com/jackdongy/comments/193588.html</wfw:comment><comments>http://www.cppblog.com/jackdongy/archive/2012/10/21/193588.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jackdongy/comments/commentRss/193588.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jackdongy/services/trackbacks/193588.html</trackback:ping><description><![CDATA[<a href="http://blog.csdn.net/bendanban/article/details/6435314">http://blog.csdn.net/bendanban/article/details/6435314</a><br />
<p>VisualStudio2010据说完美支持CUDA4.0，我研究了一下，下面将我的配置过程呈献给大家，希望对大家有所帮助。</p>
<p>第一步：下载CUDA4.0 Driver，toolkit，SDK，这些不在提了，只要各位去Nvidia的官网下载并且一次安装就是了，不过各位在安装前必须将以前的版本卸载掉。当然VisualStudio2010是必须的，各位必须要安装它，要不我的文章题目就没意义了。一切安装就绪后，下面开始配置。</p>
<p>第二步：打开VS2010，新建一个Win32控制台应用程序（英文是Win32ConsoleApplication）。</p>
<p><a href="http://hi.csdn.net/attachment/201105/20/0_1305887872GD7m.gif"><img title="clip_image002" style="border-left-width: 0px; border-right-width: 0px;background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="clip_image002" src="http://hi.csdn.net/attachment/201105/20/0_13058878724FGG.gif" width="244" height="150" /></a></p>
<p align="center">图1 新建Win32控制台程序</p>
<p>确定后，在向导中选择空项目：</p>
<p><a href="http://hi.csdn.net/attachment/201105/20/0_1305887872MuTC.gif"><img title="clip_image004" style="border-left-width: 0px; border-right-width: 0px;background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="clip_image004" src="http://hi.csdn.net/attachment/201105/20/0_1305887873OY96.gif" width="244" height="207" /></a></p>
<p align="center">图2 空项目</p>
<p>第三步：添加CU文件，右击项目-》&#8220;添加&#8221;-》&#8220;新建项&#8221;</p>
<p><a href="http://hi.csdn.net/attachment/201105/20/0_1305887894ClkH.gif"><img title="clip_image006" style="border-left-width: 0px; border-right-width: 0px;background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="clip_image006" src="http://hi.csdn.net/attachment/201105/20/0_1305887894Zs1k.gif" width="244" height="128" /></a></p>
<p align="center">图3 添加CU文件</p>
<p>第四步：为&#8220;test.cu&#8221;添加生成规则</p>
<p>右击项目，选择&#8220;自定义生成&#8221;，会跳出图4框，如图所示操作。</p>
<p><a href="http://hi.csdn.net/attachment/201105/20/0_1305887895yzo8.gif"><img title="clip_image008" style="border-left-width: 0px; border-right-width: 0px;background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="clip_image008" src="http://hi.csdn.net/attachment/201105/20/0_1305887895pV2D.gif" width="244" height="142" /></a></p>
<p align="center">图4选择自定义生成规则</p>
<p>右击你添加的CU文件，选择属性，然后按图示操作。</p>
<p align="center"><a href="http://hi.csdn.net/attachment/201105/20/0_1305887895H161.gif"><img title="clip_image010" style="border-left-width: 0px; border-right-width: 0px;background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image010" src="http://hi.csdn.net/attachment/201105/20/0_1305887896ItMM.gif" width="244" height="177" /></a></p>
<p align="center">图5 修改CU文件的生成规则为CUDA C/C++</p>
<p><a href="http://hi.csdn.net/attachment/201105/20/0_1305887896lalw.gif"><img title="clip_image012" style="border-left-width: 0px; border-right-width: 0px;background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="clip_image012" src="http://hi.csdn.net/attachment/201105/20/0_1305887896PwPe.gif" width="244" height="180" /></a></p>
<p align="center">图6 应用后的结果</p>
<p>第五步：添加附加依赖项cuda.lib;cudart.lib。右击项目，选择属性，然后按图示操作。</p>
<p><a href="http://hi.csdn.net/attachment/201105/20/0_1305887896G9Pq.gif"><img title="clip_image014" style="border-left-width: 0px; border-right-width: 0px;background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="clip_image014" src="http://hi.csdn.net/attachment/201105/20/0_1305887897qBzP.gif" width="244" height="175" /></a></p>
<p align="center">图7 添加附加依赖项</p>
<p>第六步：测试。在CU问价中添加如下代码：（很假单的代码，呵呵）</p>
<p><strong>#include &lt;cuda.h&gt;</strong></p>
<p><strong>#include &lt;cuda_runtime_api.h&gt;</strong></p>
<p><strong>int main(int argc, char *argv[])</strong></p>
<p><strong>{</strong></p>
<p><strong>float *device_f = NULL;</strong></p>
<p><strong>cudaMalloc((void**)&amp;device_f, 10*sizeof(float));</strong></p>
<p><strong>//</strong></p>
<p><strong>cudaFree(device_f);</strong></p>
<p><strong>return 0;</strong></p>
<p><strong>}</strong></p>
<p>生成：</p>
<p><a href="http://hi.csdn.net/attachment/201105/20/0_1305887897Wh94.gif"><img title="clip_image016" style="border-left-width: 0px; border-right-width: 0px;background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="clip_image016" src="http://hi.csdn.net/attachment/201105/20/0_1305887897Y5H8.gif" width="244" height="26" /></a></p>
<p align="center">图8生成结果</p>
<p>重要提醒：程序最好不要放在含有汉字的目录下，如果提示有规则错误，先关闭VS，然后把解决方案目录下的那个数据库，Debug文件夹删除。项目目录下的Debug也删除。这主要是由于两家公司（Nvidia、Microsoft）的问题。</p>
<p>为了让你相信我的配置是成功的，我把我的一个图像处理结果贴出来。</p>
<p>
<table cellspacing="0" cellpadding="0" border="1">
<tbody>
<tr>
<td width="238">
<p align="center"><a href="http://hi.csdn.net/attachment/201105/20/0_130588789755fI.gif"><img title="clip_image018" style="border-left-width: 0px; border-right-width: 0px;background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image018" src="http://hi.csdn.net/attachment/201105/20/0_1305887897H1Kr.gif" width="220" height="221" /></a></p>
<p align="center">Lenna原图</p></td>
<td width="238">
<p align="center"><a href="http://hi.csdn.net/attachment/201105/20/0_1305887898QMYC.gif"><img title="clip_image020" style="border-left-width: 0px; border-right-width: 0px;background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image020" src="http://hi.csdn.net/attachment/201105/20/0_1305887898S88O.gif" width="224" height="225" /></a></p>
<p align="center">Lenna锐化结果</p></td></tr></tbody></table>
<p>&nbsp;</p>
<p>很需要的额外的两步：</p>
<p>一、将SDK目录下：&#8230;/NVIDIA GPU Computing SDK 4.0/C/doc/syntax_highlighting/visual_studio_8 。将此目录下的usertype.dat拷贝到&#8230;/Microsoft Visual Studio 10.0/Common7/IDE目录下。</p>
<p>二、在菜单栏中选择&#8220;工具&#8221;-&gt;&#8220;选项&#8221;。然后按照图示操作就行了。操作完后，记得重启VS2010。</p>
<p><a href="http://hi.csdn.net/attachment/201105/20/0_13058878986dPv.gif"><img title="clip_image022" style="border-left-width: 0px; border-right-width: 0px;background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="clip_image022" src="http://hi.csdn.net/attachment/201105/20/0_13058878986DI5.gif" width="244" height="161" /></a></p><img src ="http://www.cppblog.com/jackdongy/aggbug/193588.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jackdongy/" target="_blank">jackdong</a> 2012-10-21 11:28 <a href="http://www.cppblog.com/jackdongy/archive/2012/10/21/193588.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>