問題
Tensorflow内で、cuBLASやcuDNNのAPIがどのように呼ばれているのか調べています。
しかし、ソースコードを探してもAPIを呼んでいる箇所を特定することができません。
調査
例えば、Caffeでは以下のようにcuDNNのAPI(cudnnConvolutionForward())が呼ばれています。
cpp
1// https://github.com/BVLC/caffe/blob/master/src/caffe/layers/cudnn_conv_layer.cu 2 3void CuDNNConvolutionLayer<Dtype>::Forward_gpu( 4 const vector<Blob<Dtype>*>& bottom, const vector<Blob<Dtype>*>& top) { 5 6 ... 7 8 // Forward through cuDNN in parallel over groups. 9 for (int g = 0; g < this->group_; g++) { 10 // Filters. 11 CUDNN_CHECK(cudnnConvolutionForward(handle_[g], 12 cudnn::dataType<Dtype>::one, 13 bottom_descs_[i], bottom_data + bottom_offset_ * g, 14 filter_desc_, weight + this->weight_offset_ * g, 15 conv_descs_[i], 16 fwd_algo_[i], workspace[g], workspace_fwd_sizes_[i], 17 cudnn::dataType<Dtype>::zero, 18 top_descs_[i], top_data + top_offset_ * g)); 19 20 ... 21}
一方、TensorFlowのソースコード内を「cudnnConvolutionForward」でgrepしても
以下のようなものしか該当せず、
CaffeのようにcudnnConvolutionForward()を呼び出している箇所が見つかりません。
cpp
1//https://github.com/tensorflow/tensorflow/blob/7f50c8ca03bc087dc99ffc8fbed93d1663985982/tensorflow/stream_executor/cuda/cuda_dnn.cc 2 3#define CUDNN_DNN_ROUTINE_EACH(__macro) \ 4 __macro(cudnnBatchNormalizationBackward) \ 5 ・・・ 6 __macro(cudnnConvolutionForward) \ 7 ・・・
質問
TensorFlowのGPU実行での高速化にはcuDNN利用が必須なので、
cudnnConvolutionForward()を利用していないとは想像できないのですが
TenosorFlowはどのように呼び出しているのでしょうか?
私の検索の仕方が悪いのでしょうか?
よろしくお願いいたします。
あなたの回答
tips
プレビュー