]CUDA学习笔记2

转载 2015年07月08日 14:45:48

CUDA的文件组织形式:

  1. CUDA工程中可以有.cu和.cpp。

  2. 在.cu文件中,可以用#include "cuda_x.cuh"来相互调用.cu里的函数,也可以调用 #include "cpp_x.h".

     比如在test1.h 中声明class A; 在test1.cpp中定义class A的相关成员函数。那么在cuda_xx.cu中,先 #include "test1.h",然后在定义 extern "C" void foo(...){ A aa; aa.memberfunc(...); } 可以使用,而extern "C" 的定义是为.cpp文件调用foo函数做准备。 如果没有extern "C"  则报错:“无法解析的外部符号 _foo,该符号在函数 _main 中被引用”。

     在其他的.cu中定义的 __global__ 函数,可以放到.cuh文件中,共其他.cu调用。但是,不是cuda提供的函数形式(比如C语言形式的函数),则必须要使用extern "C" 。此时,可以不要在.cuh文件中声明,直接在.cu文件中定义,而其他.cu文件调用时,在调用之前用extern "C" int foo(......);声明一下。而调用foo的函数(比如说是foo2)也需要用extern "C"来修饰。

  3.在.cpp文件中,可以使用.cu文件中的声明为extern "C"的函数。在.cpp文件调用前,需要用extern "C"+函数声明再声明一次。即.cu中,函数定义时需要用extern "C" 修饰。在.cpp调用时,也需要用extern "C" 来修饰。而.cpp中是不能直接调用__global__函数的,因为编译器是无法解析符号<<<......>>>以及blockIdx、threadIdx等,因此__global__函数只能放在.cu函数里面定义和调用。

  4. 有点麻烦吧?呵呵。用extern "C" 修饰的原因,就是.cu是扩展C,但只是部分只是cpp,所以需要定义为类C语言编译(NVCC.exe编译)。

  5. 看SDK给出的例子,在比如在cuda1.cu中可以调用cuda2.cu中定义的__global__函数。但是我弄了半天却报错说:

1>正在链接...
1>CUDA2.cu.obj : error LNK2005: ___device_stub__Z14colsSumCUDA232PfS_ii 已经在 CUDA1.cu.obj 中定义
1>CUDA2.cu.obj : error LNK2005: "void __cdecl colsSumCUDA232__entry(float *,float *,int,int)" (?colsSumCUDA232__entry@@YAXPAM0HH@Z) 已经在 CUDA1.cu.obj 中定义
1>../../bin/win32/Debug/deviceQuery.exe : fatal error LNK1169: 找到一个或多个多重定义的符号

检查了半天,才发现,原来cuda2.cu(其中定义了GPU的kernel函数)在【属性】中需要将cuda2.cu设置为“从生成中排除”。

深度学习(三十六)异构计算CUDA学习笔记(1)

二、CUDA编程步骤: 1、设置显卡编号:cudaSetDevice; 2、为显卡开辟变量内存:cudaMalloc; 3、把cup上的数据拷贝到GPU上:cudaMemcpy; 4、调用内核函数__...
  • hjimce
  • hjimce
  • 2016年05月26日 12:33
  • 4320

N卡双显卡电脑装ubuntu15.04并配置Anaconda+Tensorflow+cuda+cuDNN的深度学习环境

1.序 这篇文章的目的是Tensorflow环境配置的经验和流程总结,涉及3个部分: 1)装ubuntu并配置显卡驱动; 2)装CUDA+cuDNN库并解决cuda与显卡驱动冲突问题 3)以常用的科学...
  • BobAuditore
  • BobAuditore
  • 2016年07月16日 15:10
  • 3313

吴恩达Coursera深度学习课程 DeepLearning.ai 提炼笔记(2-1)-- 深度学习的实践方面

改善深层神经网络:超参数调试、正则化以及优化 ---- 深度学习的实践方面
  • Koala_Tree
  • Koala_Tree
  • 2017年09月28日 17:00
  • 2348

【cuda学习笔记】2.纹理对象API的使用,实现sobel边缘检测

纹理对象API 使用cudaCreateTextureObject()函数从一个用来指定纹理并从纹理类型定义而来的资源描述类型结构(resource description of type stru...
  • dgh_dean
  • dgh_dean
  • 2016年11月10日 09:56
  • 826

炼数成金CUDA视频教程——第三课2——学习笔记

/* * 源代码来自 炼数成金教程 * 给出任意一个一维数组 * 新数组中每个元素都等于源数组中位置排在它前面的所有元素的和 * */ #include #include using nam...
  • zlf19910726
  • zlf19910726
  • 2017年11月10日 12:42
  • 69

我的CUDA学习笔记

  • 2012年08月29日 09:30
  • 2.63MB
  • 下载

CUDA学习笔记(2) 第一个CUDA程序

首先,我们用VisualStudio创建了CUDA的工程后,会出现一个数组对应位置元素求和的模版代码,我们可以先借此了解CUDA工程的主体结构,然后将他们全都删掉,从头开始练习。   假设我们现在要...
  • q583956932
  • q583956932
  • 2017年12月10日 12:44
  • 70

CUDA学习笔记之程序优化

CUDA学习笔记之程序优化 分类: CUDA2010-01-05 17:18 3833人阅读 评论(3) 收藏 举报 cuda优化conflict存储算法数学计算 CUDA程序优化 C...
  • bit262426738
  • bit262426738
  • 2014年04月21日 15:02
  • 517

CUDA学习笔记之Tesla图形与计算架构和通用计算模型

Tesla图形与计算架构:流处理器阵列(scalable streaming processor array,SPA)+存储器系统,由片上互联网络连接; 存储器系统:存储器控制器(MMC)、固定功能...
  • bit262426738
  • bit262426738
  • 2014年04月21日 15:24
  • 679

《GPU高性能编程CUDA实战》学习笔记(四)

第4章 CUDA C并行编程 4.1 目标 了解CUDA在实现并行是采用的一种重要方式。 4.2 CUDA并行编程 __global__ 修饰符 并行执行设备核函数 4.2.1 矢量求和运...
  • w09103419
  • w09103419
  • 2016年09月09日 14:24
  • 1132
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:]CUDA学习笔记2
举报原因:
原因补充:

(最多只允许输入30个字)