微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

指向指针别名和restrict关键字的指针

如何解决指向指针别名和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 举报,一经查实,本站将立刻删除。