Я использую ускорение cudnn в моей программе caffe.
Я использую cudnn 4 в начале, и она работает нормально, но когда я обновил cudnn до версии 5.0, функция pow не работает.
Вызывающая функция находится на уровне batch_norm как
caffe_gpu_powx(variance_.count(), variance_.gpu_data(), Dtype(0.5), variance_.mutable_gpu_data());
И данные после звонка не меняются.
Функция pow определена, как показано ниже, так же, как в caffe github banch
template <typename Dtype>
\__global__ void powx_kernel(const int n, const Dtype* a,
const Dtype alpha, Dtype* y)
{
CUDA_KERNEL_LOOP(index, n)
{
y[index] = pow(a[index], alpha);
}
}
template <>
void caffe_gpu_powx<float>(const int N, const float* a,
const float alpha, float* y) {
// NOLINT_NEXT_LINE(whitespace/operators)
powx_kernel<float><<<CAFFE_GET_BLOCKS(N), CAFFE_CUDA_NUM_THREADS>>>(
N, a, alpha, y);
}
Я сделал ошибку, что я установил генерацию кода на «compute_52, sm_52» в начале с TITAN X, но теперь более низкий GPU должен быть установлен на «compute_20, sm_20». И теперь работает нормально.
Других решений пока нет …