指向指针别名和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 所示?

哪个语法正确地表明所有指针都可以利用或只读缓存?我需要“限制”两个指针还是只“限制”顶级变量名称?

解决方法

我需要“限制”两个指针还是只“限制”顶级变量名?

限制指针的两个“级别”。

即使这对于启用非一致/只读缓存的使用不是必需的 - 这仍然是正确的选择,因为您在输入参数的描述中更加明确。您让使用您的函数的人更清楚地知道,他们不应让内部指针指向重叠位置。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...