博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CUDA学习(八十八)
阅读量:6833 次
发布时间:2019-06-26

本文共 1610 字,大约阅读时间需要 5 分钟。

3.虽然__syncthreads()一直被记录为同步线程块中的所有线程,但Pascal和以前的体系结构只能在warp级别强制执行同步。 在某些情况下,只要每条经线中至少有一条线达到屏障,就可以在不被每条线执行的情况下成功实现屏障。 从Volta开始,CUDA内置的__syncthreads()和PTX指令bar.sync(及其衍生物)是针对每个线程实施的,因此在该块中的所有非退出线程到达之前都不会成功。 利用先前行为的代码可能会死锁,并且必须进行修改,以确保所有非退出的线程都到达障碍。

cuda-memcheck提供的racecheck和synccheck工具可以帮助定位第2点和第3点。
为了在实施上述纠正措施时帮助迁移,开发人员可以选择不支持独立线程调度的Pascal调度模型。 详情请参阅应用程序兼容性 。
全局内存:
全局内存的运行方式与计算能力5.x的设备相同。
共享内存:
为共享内存保留的128 KB数据高速缓存的比率称为共享内存分块。 可以在每个内核的基础上配置分区。 支持的共享内存容量为0,8,16,32,64或96 KB。
不是扩展用于Kepler架构的现有cudaFuncSetCacheConfig()API以支持一组扩展的共享容量,而是设计了一个新的运行时API。 新的API解决了旧API中的两个关键缺陷。 首先,为每个容量比定义单独的枚举不会优雅地适用于许多选项。 其次,因为传统API将共享内存容量视为内核启动的硬性要求,所以将内核与不同的共享内存请求交错将不必要地在共享内存重新配置后序列化启动。
新API使用函数cudaFuncSetAttribute(),如下所示。

// Device code__global__ void MyKernel(...){    ...}// Host codeint carveout = 50; // 50%                   // Named Carevout Values:                   // carveout = cudaSharedmemCarveoutDefault; // (-1)                   // carveout = cudaSharedmemCarveoutMaxL1; // (0)                   // carveout = cudaSharedmemCarveoutMaxShared; // (100)cudaFuncSetAttribute(MyKernel, cudaFuncAttributePreferredSharedMemoryCarveout,    carveout);MyKernel << 
> >(...);

在这里,整数分割指定共享内存分割首选项占总资源的百分比。 这只是一个提示,如果需要执行该功能,驱动可以选择不同的比例。

计算能力7.0设备允许单个线程块寻址完整的96 KB共享内存。 依赖每块超过48 KB的共享内存分配的内核是特定于体系结构的,因此它们必须使用动态共享内存(而不是静态大小的数组),并且需要使用cudaFuncSetAttribute()进行显式选择,如下所示:

// Device code__global__ void MyKernel(...){    ...}// Host codeint maxbytes = 98304; // 96 KBcudaFuncSetAttribute(MyKernel, cudaFuncAttributeMaxDynamicSharedMemorySize,    maxbytes);MyKernel << 
> >(...);

其他共享内存的行为与计算能力5.x的设备相同。

timg

转载地址:http://ernkl.baihongyu.com/

你可能感兴趣的文章
Elasticsearch + Logstash + Kibana(ELK)安装部署方法
查看>>
exchange2007的5大角色
查看>>
我的友情链接
查看>>
Windows Server 2012 R2 新功能体验——工作文件夹(Work Folders)
查看>>
ubuntu11.10的root密码
查看>>
django python 文件上传【Part 5】
查看>>
【模板】最小费用最大流
查看>>
五周第一次课(1月8日)
查看>>
解决vsftpd编译时的错误:could not read symbols: File in wrong format
查看>>
NHibernate学习总结
查看>>
html转译java语言
查看>>
oracle中时间转换的问题
查看>>
如何设计Android App测试用例
查看>>
sysbench
查看>>
详解MySQL读写分离
查看>>
dns服务器在做nslookup测试的时候,出现dns timeout 2 seconds的错误解释
查看>>
使用监控宝监控snmp性能经验实录
查看>>
開發Android, 從Eclipse官網下載Eclipse開始,從無到有安裝一遍
查看>>
逻辑判断
查看>>
mockcpp的so加载失败问题
查看>>