如何解决指向指针别名和restrict关键字的指针
我熟悉在 C 中使用 __restrict 关键字进行性能优化,特别是在这种情况下的 CUDA。
void Foo(const float* __restrict X,const float* __restrict Y);
我了解此 Foo
函数具有 __restrict
关键字,这些关键字向编译器指示 X 和 Y 保证指向不同的内存块。
就别名限制而言,当我们有一个指向指针的指针时会发生什么?
void Bar1(const float* const * __restrict X,const float* const * __restrict Y);
void Bar2(const float* const __restrict * __restrict X,const float* const __restrict * __restrict Y);
是否完全限制了 Bar1
或是否需要限制每个间接级别,如 Bar2
所示?
哪个语法正确地表明所有指针都可以利用或只读缓存?我需要“限制”两个指针还是只“限制”顶级变量名称?
解决方法
我需要“限制”两个指针还是只“限制”顶级变量名?
限制指针的两个“级别”。
即使这对于启用非一致/只读缓存的使用不是必需的 - 这仍然是正确的选择,因为您在输入参数的描述中更加明确。您让使用您的函数的人更清楚地知道,他们不应让内部指针指向重叠位置。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。