社区
CUDA on Linux
帖子详情
怎样用C语言直接调用cuda写成的函数?
旗戈
2009-10-14 10:23:55
现在想把一个用c写成的软件中的耗时部分函数用cuda代码实现,但不知怎样作。大家有没有这方面的经验呢?谢谢
...全文
630
26
打赏
收藏
怎样用C语言直接调用cuda写成的函数?
现在想把一个用c写成的软件中的耗时部分函数用cuda代码实现,但不知怎样作。大家有没有这方面的经验呢?谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
26 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
OpenGPU2010
2010-04-10
打赏
举报
回复
[Quote=引用 15 楼 l7331014 的回复:]
引用 14 楼 stringtz 的回复:
引用 1 楼 l7331014 的回复:
先并行算法从新设计.再在cuda用驱动层API上实现.
不使用驱动API的话,直接在C函数中调用cuda函数不行吗?
LS的cuda函数指什么?cuda本身并不是一个功能库,而是控制指挥gpu上的程序的api接口.
[/Quote]
是的,这个定位准确 :>
---------------------------------------------------------------------
开源图形处理器体系结构论坛
(
OpenGPU论坛
)
http://www.opengpu.org/bbs
/
OpenGPU Graphics Open Source community
(
图形开源社区
),聚焦领域(focus domain)包括:
*
GPU Architecture
(
图形处理器体系结构
).
*
Graphics Algorithm
(
图形算法
).
*
Open Source Rendering Engine
(
开源渲染器
).
*
Open Source GPU Simulator/RTL Implement
(
开源GPU模拟器
).
*
GPGPU Programming
(
面向通用的图形处理器编程
)
*
GPU General-purposed Computing
(
GPU通用计算
).
.
无心人_过过小日子
2010-04-09
打赏
举报
回复
[Quote=引用 14 楼 stringtz 的回复:]
引用 1 楼 l7331014 的回复:
先并行算法从新设计.再在cuda用驱动层API上实现.
不使用驱动API的话,直接在C函数中调用cuda函数不行吗?
[/Quote]
LS的cuda函数指什么?cuda本身并不是一个功能库,而是控制指挥gpu上的程序的api接口.
stringtz
2010-04-09
打赏
举报
回复
[Quote=引用 1 楼 l7331014 的回复:]
先并行算法从新设计.再在cuda用驱动层API上实现.
[/Quote]
不使用驱动API的话,直接在C函数中调用cuda函数不行吗?
OpenGPU2010
2010-03-10
打赏
举报
回复
呵呵,其实GPU编程就是个洗脑的过程~
---------------------------------------------------------------------
开源图形处理器体系结构论坛
(
OpenGPU论坛
)
http://www.opengpu.org/bbs
/
OpenGPU Graphics Open Source community
(
图形开源社区
),聚焦领域(focus domain)包括:
* GPU Architecture(图形处理器体系结构)
.
* Graphics Algorithm(图形算法)
.
* GPGPU Programming (面向通用的图形处理器编程)
.
* Open Source Rendering Engine(开源渲染器)
.
* Open Source GPU Simulator/RTL Implement(开源GPU模拟器)
.
OpenHero
2010-01-19
打赏
举报
回复
不是的,就是所有的都需要这样一个过程
wwwinking
2010-01-18
打赏
举报
回复
你们讨论的是CUDA的框架函数吗,是不是就像fremi这样的,我才接触这个,不要笑我问的问题菜呵呵
OpenHero
2009-12-30
打赏
举报
回复
直接定义结构体,给结构体分配好空间,然后再copy到device上面
无心人_过过小日子
2009-12-29
打赏
举报
回复
1)是.gpu上运行的程序,永远会把地址当成显存的地址.
2)cudaMemcp也不是随便可指定地址是内存的还是显存的,得根据API的要求来.呵呵.
guoboxue986235
2009-12-29
打赏
举报
回复
gpu上运行的程序,永远会把地址当成显存的地址!
但在CPU上调用的如cudaMemcpy等函数,可以指定地址是内存的,还是显存的,、
不知道我理解的对不对?
无心人_过过小日子
2009-10-19
打赏
举报
回复
host上的指针是指向主机的内存的,kernel中的指针是指向显存空间的,完全不同.用数组及数组下标代替空间和指针.
旗戈
2009-10-19
打赏
举报
回复
现遇到一个问题,就是要从host上面往GPU上面传递一系列结构体(由一指针所指的相同的结构体),如何传递呢?
可以用cudaMemcpy直接传递吗?programming Guide里面只有单个结构体的传递例子,而且是把结构体里面的各组成部分分别传过去的,能不能一次性的把整个结构体传递过去呢?谢谢
无心人_过过小日子
2009-10-14
打赏
举报
回复
先并行算法从新设计.再在cuda用驱动层API上实现.
CUDA
编程指南5.0
第一章导论 1 1.1 从图形处理到通用并行计算 1 1.2
CUDA
TM:一种通用并行计算架构 3 1.3 一种可扩展的编程模型 3 1.4 文档结构 4 第二章编程模型 7 2.1 内核 7 2.2 线程层次 8 2.3 存储器层次 11 2.4 异构编程 11 2.5 计算能力 11 第三章编程接口 15 3.1 用nvcc编译 15 3.1.1 编译流程 16 3.1.1.1 离线编译 16 3.1.1.2 即时编译 16 3.1.2 二进制兼容性 17 3.1.3 PTX兼容性 17 3.1.4 应用兼容性 18 3.1.5 C/C++兼容性 19 3.1.6 64位兼容性 19 3.2
CUDA
C运行时 3.2.1 初始化 20 3.2.2 设备存储器 20 3.2.3 共享存储器 24 3.2.4 分页锁定主机存储器 32 3.2.4.1 可分享存储器(portable memory) 34 3.2.4.2 写结合存储器 34 3.2.4.3 被映射存储器 34 3.2.5 异步并发执行 35 3.2.5.1 主机和设备间异步执行 35 3.2.5.2 数据传输和内核执行重叠 36 3.2.5.3 并发内核执行 36 3.2.5.4 并发数据传输 36 3.2.5.5 流 37 3.2.5.6 事件 41 3.2.5.7 同步
调用
42 3.2.6 多设备系统 42 3.2.6.1 枚举设备 42 3.2.6.2 设备指定 42 3.2.6.3 流和事件行为 43 3.2.6.4 p2p存储器访问 44 3.2.6.5 p2p存储器复制 45 3.2.6.6 统一虚拟地址空间 45 3.2.6.7 错误检查 46 3.2.7
调用
栈 47 3.2.8 纹理和表面存储器 47 3.2.8.1 纹理存储器 47 3.2.8.2 表面存储器(surface) 60 3.2.8.3
CUDA
数组 65 目录iii 3.2.8.4 读写一致性 66 3.2.9 图形学互操作性 66 3.2.9.1 OpenGL互操作性 67 3.2.9.2 Direct3D互操作性 70 3.2.9.3 SLI(速力)互操作性 82 3.3 版本和兼容性 82 3.4 计算模式 83 3.5 模式切换 84 3.6 Windows上的Tesla计算集群模式 85 第四章硬件实现 87 4.1 SIMT 架构 87 4.2 硬件多线程 88 第五章性能指南 91 5.1 总体性能优化策略 91 5.2 最大化利用率 91 5.2.1 应用层次 91 5.2.2 设备层次 92 5.2.3 多处理器层次 92 5.3 最大化存储器吞吐量 94 5.3.1 主机和设备的数据传输 95 5.3.2 设备存储器访问 96 5.3.2.1 全局存储器 96 5.3.2.2 本地存储器 98 5.3.2.3 共享存储器 99 5.3.2.4 常量存储器 100 5.3.2.5 纹理和表面存储器 100 5.4 最大化指令吞吐量 100 iv
CUDA
编程指南5.0中文版 5.4.1 算术指令 101 5.4.2 控制流指令 104 5.4.3 同步指令 105 附录A 支持
CUDA
的GPU 107 附录B
C语言
扩展 109 B.1
函数
类型限定符 109 B.1.1 device 109 B.1.2 global 109 B.1.3 host 109 B.1.4 noinline 和forceinline 110 B.2 变量类型限定符 110 B.2.1 device 111 B.2.2 constant 111 B.2.3 shared 112 B.2.4 restrict 113 B.3 内置变量类型 115 B.3.1 char1、uchar1、char2、uchar2、char3、uchar3、char4、 uchar4、short1、ushort1、short2、ushort2、short3、ushort3、 short4、ushort4、int1、uint1、int2、uint2、int3、uint3、 int4、uint4、long1、ulong1、long2、ulong2、long3、ulong3、 long4、ulong4、float1、float2、float3、float4、double2 115 B.3.2 dim3类型 115 B.4 内置变量 115 B.4.1 gridDim 115 B.4.2 blockIdx 115 B.4.3 blockDim 117 B.4.4 threadIdx 117 B.4.5 warpSize 117 目录v B.5 存储器栅栏
函数
117 B.6 同步
函数
119 B.7 数学
函数
120 B.8 纹理
函数
120 B.8.1 纹理对象
函数
120 B.8.1.1 tex1Dfetch() 120 B.8.1.2 tex1D() 121 B.8.1.3 tex2D() 121 B.8.1.4 tex3D() 121 B.8.1.5 tex1DLayered() 121 B.8.1.6 tex2DLayered() 122 B.8.1.7 texCubemap() 122 B.8.1.8 texCubemapLayered() 122 B.8.1.9 tex2Dgather() 123 B.8.2 纹理参考
函数
123 B.8.2.1 tex1Dfetch() 123 B.8.2.2 tex1D() 124 B.8.2.3 tex2D() 124 B.8.2.4 tex3D() 125 B.8.2.5 tex1DLayered() 125 B.8.2.6 tex2DLayered() 125 B.8.2.7 texCubemap() 125 B.8.2.8 texCubemapLayered() 126 B.8.2.9 tex2Dgather() 126 B.9 表面
函数
(surface) 126 B.9.1 表面对象
函数
127 B.9.1.1 surf1Dread() 127 B.9.1.2 surf1Dwrite() 127 vi
CUDA
编程指南5.0中文版 B.9.1.3 surf2Dread() 127 B.9.1.4 surf2Dwrite() 128 B.9.1.5 surf3Dread() 128 B.9.1.6 surf3Dwrite() 128 B.9.1.7 surf1DLayeredread() 129 B.9.1.8 surf1DLayeredwrite() 129 B.9.1.9 surf2DLayeredread() 129 B.9.1.10 surf2DLayeredwrite() 130 B.9.1.11 surfCubemapread() 130 B.9.1.12 surfCubemapwrite() 131 B.9.1.13 surfCubemapLayeredread() 131 B.9.1.14 surfCubemapLayeredwrite() 131 B.9.2 表面引用API 132 B.9.2.1 surf1Dread() 132 B.9.2.2 surf1Dwrite() 132 B.9.2.3 surf2Dread() 132 B.9.2.4 surf2Dwrite() 133 B.9.2.5 surf3Dread() 133 B.9.2.6 surf3Dwrite() 133 B.9.2.7 surf1DLayeredread() 134 B.9.2.8 surf1DLayeredwrite() 134 B.9.2.9 surf2DLayeredread() 135 B.9.2.10 surf2DLayeredwrite() 135 B.9.2.11 surfCubemapread() 135 B.9.2.12 surfCubemapwrite() 136 B.9.2.13 surfCubemapLayeredread() 136 B.9.2.14 surfCubemapLayeredwrite() 137 B.10 时间
函数
137 目录vii B.11 原子
函数
137 B.11.1 数学
函数
138 B.11.1.1 atomicAdd() 138 B.11.1.2 atomicSub() 139 B.11.1.3 atomicExch() 139 B.11.1.4 atomicMin() 140 B.11.1.5 atomicMax() 140 B.11.1.6 atomicInc() 140 B.11.1.7 atomicDec() 141 B.11.1.8 atomicCAS() 141 B.11.2 位逻辑
函数
141 B.11.2.1 atomicAnd() 141 B.11.2.2 atomicOr() 142 B.11.2.3 atomicXor() 142 B.12 束表决(warp vote)
函数
142 B.13 束洗牌
函数
143 B.13.1 概览 143 B.13.2 在束内广播一个值 144 B.13.3 计算8个线程的前缀和 145 B.13.4 束内求和 146 B.14 取样计数器
函数
146 B.15 断言 147 B.16 格式化输出 148 B.16.1 格式化符号 149 B.16.2 限制 149 B.16.3 相关的主机端API 150 B.16.4 例程 151 B.17 动态全局存储器分配 152 viii
CUDA
编程指南5.0中文版 B.17.1 堆存储器分配 153 B.17.2 与设备存储器API的互操作 154 B.17.3 例程 154 B.17.3.1 每个线程的分配 154 B.17.3.2 每个线程块的分配 155 B.17.3.3 在内核启动之间持久的分配 156 B.18 执行配置 159 B.19 启动绑定 160 B.20 #pragma unroll 162 B.21 SIMD 视频指令 163 附录C 数学
函数
165 C.1 标准
函数
165 C.1.1 单精度浮点
函数
165 C.1.2 双精度浮点
函数
168 C.2 内置
函数
171 C.2.1 单精度浮点
函数
172 C.2.2 双精度浮点
函数
172 附录D C++语言支持 175 D.1 代码例子 175 D.1.1 数据类 175 D.1.2 派生类 176 D.1.3 类模板 177 D.1.4
函数
模板 178 D.1.5 函子类 178 D.2 限制 180 D.2.1 预处理符号 180 D.2.2 限定符 180 目录ix D.2.2.1 设备存储器限定符 180 D.2.2.2 Volatile限定符 182 D.2.3 指针 182 D.2.4 运算符 183 D.2.4.1 赋值运算符 183 D.2.4.2 地址运算符 183 D.2.5
函数
183 D.2.5.1 编译器生成的
函数
183 D.2.5.2
函数
参数 184 D.2.5.3
函数
内静态变量 184 D.2.5.4
函数
指针 184 D.2.5.5
函数
递归 185 D.2.6 类 185 D.2.6.1 数据成员 185 D.2.6.2
函数
成员 185 D.2.6.3 虚
函数
185 D.2.6.4 虚基类 185 D.2.6.5 Windows相关 185 D.2.7 模板 186 附录E 纹理获取 187 E.1 最近点取样 187 E.2 线性滤波 187 E.3 查找表 189 附录F 计算能力 191 F.1 特性和技术规范 191 F.2 浮点标准 195 F.3 计算能力1.x 198 x
CUDA
编程指南5.0中文版 F.3.1 架构 198 F.3.2 全局存储器 199 F.3.2.1 计算能力1.0和1.1的设备 199 F.3.2.2 计算能力1.2和1.3的设备 199 F.3.3 共享存储器 201 F.3.3.1 32位步长访问 201 F.3.3.2 32位广播访问 202 F.3.3.3 8位和16位访问 205 F.3.3.4 大于32位访问 205 F.4 计算能力2.x 206 F.4.1 架构 206 F.4.2 全局存储器 208 F.4.3 共享存储器 209 F.4.3.1 32位步长访问 209 F.4.3.2 大于32位访问 210 F.4.4 常量存储器 211 F.5 计算能力3.x 211 F.5.1 架构 211 F.5.2 全局存储器访问 212 F.5.3 共享存储器 213 F.5.3.1 64位模式 213 F.5.3.2 32位模式 213 附录G 驱动API 215 G.1 上下文 218 G.2 模块 219 G.3 内核执行 220 G.4 运行时API和驱动API的互操作性 222 G.5 注意 223
darknet C++源码
Darknet是一个深度学习框架,该框架有一些自己独有的优点: 1.易于安装:在makefile里面选择自己需要的附加项(
cuda
,cudnn,opencv等)
直接
make即可,几分钟完成安装; 2.没有任何依赖项:整个框架都用
C语言
进行编写,可以不依赖任何库,连opencv作者都编写了可以对其进行替代的
函数
; 3.结构明晰,源代码查看、修改方便:其框架的基础文件都在src文件夹,而定义的一些检测、分类
函数
则在example文件夹,可根据需要
直接
对源代码进行查看和修改; 4.友好python接口:虽然darknet使用
c语言
进行编写,但是也提供了python的接口,通过python
函数
,能够使用python
直接
对训练好的.weight格式的模型进行
调用
; 5.易于移植:该框架部署到机器本地十分简单,且可以根据机器情况,使用cpu和gpu,特别是检测识别任务的本地端部署,darknet会显得异常方便。
C语言
--视频精讲
C语言
作为被长期使用的编程语言,可以被运用到各种操作系统,游戏,开发中。本课程作为互联网上首家使用C99录制的
C语言
教程,展现了全面、专业。标准的
C语言
教程。可以帮助学员从基础开始一点点的深刻理解
C语言
。
darknet_AlexeyAB-master.zip
Darknet是一个比较小众的深度学习框架,没有社区,主要靠作者团队维护,所以推广较弱,用的人不多。而且由于维护人员有限,功能也不如tensorflow等框架那么强大,但是该框架还是有一些独有的优点: 1.易于安装:在makefile里面选择自己需要的附加项(
cuda
,cudnn,opencv等)
直接
make即可,几分钟完成安装; 2.没有任何依赖项:整个框架都用
C语言
进行编写,可以不依赖任何库,连opencv作者都编写了可以对其进行替代的
函数
; 3.结构明晰,源代码查看、修改方便:其框架的基础文件都在src文件夹,而定义的一些检测、分类
函数
则在example文件夹,可根据需要
直接
对源代码进行查看和修改; 4.友好python接口:虽然darknet使用
c语言
进行编写,但是也提供了python的接口,通过python
函数
,能够使用python
直接
对训练好的.weight格式的模型进行
调用
; 5.易于移植:该框架部署到机器本地十分简单,且可以根据机器情况,使用cpu和gpu,特别是检测识别任务的本地端部署,darknet会显得异常方便。 ———————————————— 版权声明:本文为CSDN博主「深夜虫鸣」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/u010122972/article/details/83541978
EDA/PLD中的Portland Group PGI 9.0编译器简化x64+GPU编程
意法半导体全资子公司Portland Group宣布支持 Linux、Mac OS X和Windows三大操作系统的PGI 9.0版高性能并行编译器及开发工具系列产品正式上市。PGI 9.0版编译器是首款在含有英伟达(NVIDIA)
CUDA
图形处理器(GPU)的基于x64位处理器的Linux系统中支持高级PGI Accelerator编程模型的公开发行版。 在高性能计算技术(HPC)领域,将图形处理器用作通用加速器是一大趋势。直到目前为止,从Fortran语言应用程序
调用
GPU还是受到极大的限制。专注GPU加速器的开发人员必须使用
C语言
详细地编程,使用
函数
调用
序列来管理数据在x64主机与
CUDA on Linux
374
社区成员
345
社区内容
发帖
与我相关
我的任务
CUDA on Linux
CUDA on Linux
复制链接
扫一扫
分享
社区描述
CUDA on Linux
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章