Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 能否在CUDA速度计算中实现Tensorflow自定义op梯度?_C++_Tensorflow_Eigen - Fatal编程技术网

C++ 能否在CUDA速度计算中实现Tensorflow自定义op梯度?

C++ 能否在CUDA速度计算中实现Tensorflow自定义op梯度?,c++,tensorflow,eigen,C++,Tensorflow,Eigen,在使用GPU支持在tensorflow中编写自己的自定义op时,建议使用python计算渐变。人们已经使用C++和诸如EGIN这样的库来以同样的方式更有效地实现梯度。 我的问题是,;在GPU上进行培训时,使用自定义操作参数张量作为设备内存指针(是否正确?) 通过计算GPU上win CUDA操作的梯度,可以避免主机和设备之间的数据复制吗 这会减少计算时间吗?(我知道这取决于梯度计算对并行计算的适用程度,但假设它适用) 有什么理由不应该这样做吗?/潜在的速度增长太小,不值得吗?你可以简单地在CUDA

在使用GPU支持在tensorflow中编写自己的自定义op时,建议使用python计算渐变。人们已经使用C++和诸如EGIN这样的库来以同样的方式更有效地实现梯度。 我的问题是,;在GPU上进行培训时,使用自定义操作参数张量作为设备内存指针(是否正确?)

通过计算GPU上win CUDA操作的梯度,可以避免主机和设备之间的数据复制吗

这会减少计算时间吗?(我知道这取决于梯度计算对并行计算的适用程度,但假设它适用)


有什么理由不应该这样做吗?/潜在的速度增长太小,不值得吗?

你可以简单地在CUDA中构建一个op,然后在渐变的python定义中调用它,通过这种方式,您肯定可以大大加快梯度计算,并且不必在GPU和CPU内存之间进行复制

在CUDA中构建op需要您明确指定要由GPU操作的数据的内存位置。在所有示例中,这些数据都源于主机,您需要将其复制到gpu,然后对其进行操作,然后将其复制回主机以访问它。但是,如果以前使用CUDA在tensorflow中计算过数据,那么应该可以访问gpu上已经存在的数据,并将其留在gpu上供将来的ops访问,从而避免昂贵的数据传输。我不明白为什么您的输入现在在主机上,您不是说它们在gpu上吗?您可以在GPU上完全训练模型:向前和向后传球。
OpKernelContext* context
const Tensor& grad = context->input(0);