This repository has been archived on 2026-02-22. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
tkDNN/src/Network.cpp
T
2017-08-03 12:16:57 +02:00

60 lines
1.3 KiB
C++

#include <iostream>
#include "NvInfer.h"
#include "tkdnn.h"
#include "Network.h"
#include "Layer.h"
namespace tkDNN {
Network::Network(dataDim_t input_dim) {
this->input_dim = input_dim;
float tk_ver = float(tkDNN::getVersion())/1000;
float cu_ver = float(cudnnGetVersion())/1000;
float rt_ver = float(NV_TENSORRT_MAJOR) + float(NV_TENSORRT_MINOR)/10 + float(NV_TENSORRT_PATCH)/100;
std::cout<<"New NETWORK (tkDNN v"<<tk_ver
<<", CUDNN v"<<cu_ver<<", TensorRT v"<<rt_ver<<")\n";
dataType = CUDNN_DATA_FLOAT;
tensorFormat = CUDNN_TENSOR_NCHW;
checkCUDNN( cudnnCreate(&cudnnHandle) );
checkERROR( cublasCreate(&cublasHandle) );
num_layers = 0;
}
Network::~Network() {
checkCUDNN( cudnnDestroy(cudnnHandle) );
checkERROR( cublasDestroy(cublasHandle) );
}
value_type* Network::infer(dataDim_t &dim, value_type* data) {
//do infer for every layer
for(int i=0; i<num_layers; i++)
data = layers[i]->infer(dim, data);
checkCuda(cudaDeviceSynchronize());
return data;
}
bool Network::addLayer(Layer *l) {
if(num_layers == MAX_LAYERS)
return false;
layers[num_layers++] = l;
return true;
}
dataDim_t Network::getOutputDim() {
if(num_layers == 0)
return input_dim;
else
return layers[num_layers-1]->output_dim;
}
}