【发布时间】:2019-12-16 21:04:18
【问题描述】:
考虑以下程序:
class A {
__host__ __device__ void foo();
};
class B : A {
__host__ void foo();
};
int main()
{
A a; (void) a;
B b; (void) b;
}
这个compiles (GodBolt) 带有 nvcc 10。
然而,在更复杂的程序中,我有时会收到以下错误(为了便于阅读而换行):
whatever.hpp(88): error: execution space mismatch: overridden entity (function
"C::foo") is a __host__ __device__ function, but overriding entity (function "D::foo")
is a __host__ function
所以,nvcc 告诉我,我不应该在覆盖方法时删除执行空间。我不是在问我自己的代码(我在这里没有引用),而是在问原理:
- 如果只用
__host__函数覆盖__host__ __device__函数是可以接受的(我认为这是合理的),那么 nvcc 怎么会出现这样的错误? - 或者,如果不允许 - 为什么上面的小程序要编译?
【问题讨论】:
标签: compiler-errors cuda overriding virtual-functions nvcc