Python 张量流C++;API:如何将输入参数传递给CUDA内核 我对CUDA/C++编程很陌生,我坚持从ToSoFraseC++接口将输入参数传递给CUDA内核。
首先,我注册以下Op:Python 张量流C++;API:如何将输入参数传递给CUDA内核 我对CUDA/C++编程很陌生,我坚持从ToSoFraseC++接口将输入参数传递给CUDA内核。,python,c++,tensorflow,custom-operator,Python,C++,Tensorflow,Custom Operator,首先,我注册以下Op: REGISTER_OP("Op") .Attr("T: {float, int64}") .Input("in: T") .Input("angles: T") .Output("out: T"); 之后,我想将第二个输入(角度)传递给CPU/GPU内核。不知怎的,下面的实现对于CPU实现来说很好,但是当我在GPU上运行它时,在Python中抛出了一个错误。。。 Pyth
REGISTER_OP("Op")
.Attr("T: {float, int64}")
.Input("in: T")
.Input("angles: T")
.Output("out: T");
之后,我想将第二个输入(角度)传递给CPU/GPU内核。不知怎的,下面的实现对于CPU实现来说很好,但是当我在GPU上运行它时,在Python中抛出了一个错误。。。
Python错误消息:
Process finished with exit code -1073741819 (0xC0000005)
这就是我试图访问输入值的方式。请注意,“角度”的输入始终是单个值(浮点或整数):
void计算(OpKernelContext*context)覆盖{
...
常量张量和输入角度=上下文->输入(1);
自动角度调整=输入角度调整();
常数浮点N=角度(0);
...
}
按如下方式调用CPU/GPU内核:
...
Functor<Device, T>()(
context->eigen_device<Device>(),
static_cast<int>(input_tensor.NumElements()),
input_tensor.flat<T>().data(),
output_tensor->flat<T>().data(),
N);
...
。。。
函子()(
上下文->本征设备(),
静态\u转换(输入\u张量.NumElements()),
输入张量.flat().data(),
输出张量->展开().data(),
N) );
...
正如我之前所说的,在CPU上运行这个操作正是我想要的,但是当我在GPU上运行它时,我总是得到上面提到的Python错误。。。有人知道如何解决这个问题吗?我只能猜测我试图使用
角度\u平面(0)
访问GPU上的错误地址。。。因此,如果有人能在这里帮助我,我将不胜感激 您的错误是主机SEGFULT/地址无效。它不是来自GPU。它可能来自于试图在代码中的某个地方取消引用主机代码中的GPU指针,或者将GPU数据容器传递给需要主机数据的API。我看这里没有CUDA的问题。我想您需要关注Tensorflow主机代码中的数据流和使用情况。您遇到的错误是主机SEGFULT/无效地址。它不是来自GPU。它可能来自于试图在代码中的某个地方取消引用主机代码中的GPU指针,或者将GPU数据容器传递给需要主机数据的API。我看这里没有CUDA的问题。我想您需要关注Tensorflow主机代码中的数据流和使用情况。
...
Functor<Device, T>()(
context->eigen_device<Device>(),
static_cast<int>(input_tensor.NumElements()),
input_tensor.flat<T>().data(),
output_tensor->flat<T>().data(),
N);
...