cuda学习笔记之异步并行执行
2014-04-21 15:27
246 查看
分类: CUDA2010-01-03 21:13 2526人阅读 评论(1) 收藏 举报
cuda多线程direct3d集群api编译器
异步函数使得主机端与设备端并行执行:控制在设备还没有完成前就被返回给主机线程;
包括:
kernel启动; 以Async为后缀的内存拷贝函数; device到device内存拷贝函数;存储器初始化函数,比如cudaMemset(),cudaMemset2D(),cudaMemset3D();
一些设备能够在kernel执行期间,执行pinned memory和显存间的数据传输,可以通过调用cudaGetDeviceProperties()检验;
异步执行意义:一个流内的计算与数据拷贝时依次进行的;
不同流之间的这些操作可以同时执行;
当GPU传输数据时,主机线程不必等待可以进行一些运算,提高cpu与GPu并行工作;
如果调用了同步版本的GPU函数,只能在设备完成任务后才能返回主机线程,此时主机端进入yield,block或者spin状态,可以由cudaSetDeviceFlags()或cuCtxCreate()来选择主机端在进行GPU计算时进入的状态;
流:程序通过流来管理并发,每个流是按顺序执行的一系列操作;不同流之间乱序执行或者并行执行;定义是创建一个cudaStream_t对象;
当使用两个流处理同一块存储时,必须使用pinned memory;
如果主机线程在来自不同流的两个操作之间调用了pinned memory的分配,显存分配,显存设置,设备与设备间的双向拷贝或0流的两项操作,则这两项操作无法并行执行;
可以设置CUDA_LAUNCH_BLOCKING = 1,禁用所有cuda应用程序异步执行;
cudaStreamSynchronize() 强制cuda运行时等待流中所有操作完成;函数没有采取中断,会进行轮询,占用大量CPU资源;
事件
运行时API可以通过事件管理密切监控设备进度并执行准确计时,可以异步的记录下程序内任一点的事件,并可以查询这些事件被记录的时间;时间使用的GPU计时器,比CPU计时器更加准确;事件管理可以用于测量程序运行时间,或者管理CPU和GPU同时进行运算;
CUDA与图形学API互操作
经过配置可以与OpenGL,Direct3D共同使用;
多设备与设备集群:
主机端的线程数量可以多于设备数量,但是同一时刻一个设备上只能有一个线程;
多个设备可以通过C提供的多线程进行管理;
可以通过openMP管理多个设备;
cuda可以与MPI联用;
OpenMP:用于共享内存并行系统的多线程程序设计的一套指导性注释;提供并行算法的高层抽象描述,程序员在源代码中加入专用pragama来知名自己的意图,编译器自动将程序并行化;非常适用于基于数据分级的多线程程序设计;不适合需要复杂线程同步和互斥的场合;不能在飞共享内存系统(如计算集群常用mpi)上使用;
cuda多线程direct3d集群api编译器
异步函数使得主机端与设备端并行执行:控制在设备还没有完成前就被返回给主机线程;
包括:
kernel启动; 以Async为后缀的内存拷贝函数; device到device内存拷贝函数;存储器初始化函数,比如cudaMemset(),cudaMemset2D(),cudaMemset3D();
一些设备能够在kernel执行期间,执行pinned memory和显存间的数据传输,可以通过调用cudaGetDeviceProperties()检验;
异步执行意义:一个流内的计算与数据拷贝时依次进行的;
不同流之间的这些操作可以同时执行;
当GPU传输数据时,主机线程不必等待可以进行一些运算,提高cpu与GPu并行工作;
如果调用了同步版本的GPU函数,只能在设备完成任务后才能返回主机线程,此时主机端进入yield,block或者spin状态,可以由cudaSetDeviceFlags()或cuCtxCreate()来选择主机端在进行GPU计算时进入的状态;
流:程序通过流来管理并发,每个流是按顺序执行的一系列操作;不同流之间乱序执行或者并行执行;定义是创建一个cudaStream_t对象;
当使用两个流处理同一块存储时,必须使用pinned memory;
如果主机线程在来自不同流的两个操作之间调用了pinned memory的分配,显存分配,显存设置,设备与设备间的双向拷贝或0流的两项操作,则这两项操作无法并行执行;
可以设置CUDA_LAUNCH_BLOCKING = 1,禁用所有cuda应用程序异步执行;
cudaStreamSynchronize() 强制cuda运行时等待流中所有操作完成;函数没有采取中断,会进行轮询,占用大量CPU资源;
事件
运行时API可以通过事件管理密切监控设备进度并执行准确计时,可以异步的记录下程序内任一点的事件,并可以查询这些事件被记录的时间;时间使用的GPU计时器,比CPU计时器更加准确;事件管理可以用于测量程序运行时间,或者管理CPU和GPU同时进行运算;
CUDA与图形学API互操作
经过配置可以与OpenGL,Direct3D共同使用;
多设备与设备集群:
主机端的线程数量可以多于设备数量,但是同一时刻一个设备上只能有一个线程;
多个设备可以通过C提供的多线程进行管理;
可以通过openMP管理多个设备;
cuda可以与MPI联用;
OpenMP:用于共享内存并行系统的多线程程序设计的一套指导性注释;提供并行算法的高层抽象描述,程序员在源代码中加入专用pragama来知名自己的意图,编译器自动将程序并行化;非常适用于基于数据分级的多线程程序设计;不适合需要复杂线程同步和互斥的场合;不能在飞共享内存系统(如计算集群常用mpi)上使用;
相关文章推荐
- cuda学习笔记之异步并行执行
- jqGrid 学习笔记--数据异步加载方法 随笔1
- iOS学习笔记---利用NSThread实现异步更新UI和下载图片
- 关于javascript单线程及异步的学习笔记
- CUDA学习笔记——一些基本概念
- 【JAVAWEB学习笔记】网上商城实战2:异步加载分类、Redis缓存分类和显示商品
- NVIDIA DIGITS 学习笔记(NVIDIA DIGITS-2.0 + Ubuntu 14.04 + CUDA 7.0 + cuDNN 7.0 + Caffe 0.13.0)
- Asp.Net Ajax 学习笔记13 Microsoft AJAX Library中异步通信层(摘自网络)
- android异步任务学习笔记
- Androidx学习笔记(40)--- 使用异步HttpClient(android-async-http-master)做get提交
- CUDA学习笔记
- 关于安卓异步加载Asynctask的学习笔记
- CUDA学习笔记之 CUDA存储器模型
- Celery 的学习笔记--tornado异步开发的好朋友<二>
- CUDA 学习笔记 2
- [CUDA学习笔记]从Hello Cuda开始
- 【SQL Server学习笔记】Service Broker创建异步的、数据驱动的消息应用程序
- 图片的异步加载和双缓存学习笔记——ImageLoaderConfiguration
- CUDA学习笔记之程序优化
- Javascript学习笔记_异步模式