首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NVCC使用ldg而不是普通负载的充分条件(经验性)是什么?

NVCC使用ldg而不是普通负载的充分条件(经验性)是什么?
EN

Stack Overflow用户
提问于 2016-08-27 16:55:49
回答 2查看 177关注 0票数 1

“数据自动化系统C编程指南”他说 G.4.2节

在内核的整个生命周期中只读的数据也可以通过使用__ldg()函数读取而缓存在上一节中描述的只读数据缓存中.当编译器检测到某些数据满足只读条件时,它将使用__ldg()读取它。编译器可能并不总是能够检测到某些数据是否满足只读条件。用const__restrict__限定符标记用于加载此类数据的指针会增加编译器检测只读条件的可能性。

我的问题:

  • “增加可能性”--为什么const __restrict__指针的可能性不是100%?毕竟,您确实不允许使用它们进行写作(除非您使用const_cast或其他类似的邪恶工具)。
  • 根据您的经验,编译器在const __restrict__指针上使用const __restrict__本身的充分条件是什么?
  • 相反,在哪些情况下,我应该显式地使用__ldg()const __restrict__指针加载。
EN

回答 2

Stack Overflow用户

发布于 2016-08-27 17:14:08

只读(纹理)缓存与全局内存不一致.因此,除了验证您的函数没有更改指向的数据之外,编译器还需要检查内核中的任何其他地方都没有修改内存。否则,该函数可能会忽略对纹理缓存仍然包含陈旧数据的数据的更改。

票数 1
EN

Stack Overflow用户

发布于 2016-08-27 21:11:14

基于其他注释和回答,我将冒昧地陈述用于从指针__ldg()读取p的以下条件--每个条件都足够(但不是必要的):

条件A

  1. p__global__函数的参数。
  2. pconst __restrict__

条件B

  1. p__device__函数f的参数。
  2. pconst __restrict__
  3. 函数f只与指针算法的结果一起调用,该指针本身满足条件A。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39183580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档