Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/marian-nmt/marian.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src/graph
diff options
context:
space:
mode:
authorMarcin Junczys-Dowmunt <junczys@amu.edu.pl>2018-02-16 04:42:43 +0300
committerMarcin Junczys-Dowmunt <junczys@amu.edu.pl>2018-02-16 04:42:43 +0300
commitae600b3ef7cefb82c569444b1477873e4c2229f3 (patch)
tree077947625210edef6848eaf117def3f0c53ef069 /src/graph
parentb4fdf6134b47220955a41a4b60806c53829eb1c7 (diff)
more clean up in backend
Diffstat (limited to 'src/graph')
-rw-r--r--src/graph/backend.h20
-rw-r--r--src/graph/backend_gpu.h65
-rw-r--r--src/graph/expression_graph.cpp7
-rw-r--r--src/graph/expression_graph.h2
-rw-r--r--src/graph/node.cu51
-rw-r--r--src/graph/node.h5
-rw-r--r--src/graph/node_operators_binary.h58
-rw-r--r--src/graph/node_operators_unary.h5
8 files changed, 38 insertions, 175 deletions
diff --git a/src/graph/backend.h b/src/graph/backend.h
deleted file mode 100644
index 323f3f95..00000000
--- a/src/graph/backend.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#pragma once
-
-#include "common/definitions.h"
-
-namespace marian {
-
-class Backend {
-protected:
- DeviceId deviceId_;
- size_t seed_;
-
-public:
- Backend(DeviceId deviceId, size_t seed)
- : deviceId_(deviceId), seed_(seed) {}
-
- virtual DeviceId getDevice() { return deviceId_; };
- virtual void setDevice() = 0;
-};
-
-}
diff --git a/src/graph/backend_gpu.h b/src/graph/backend_gpu.h
deleted file mode 100644
index faa5cc77..00000000
--- a/src/graph/backend_gpu.h
+++ /dev/null
@@ -1,65 +0,0 @@
-#pragma once
-
-#include <cublas_v2.h>
-#include <cuda.h>
-#include <curand.h>
-
-#include "common/config.h"
-#include "graph/backend.h"
-
-#define CURAND_CALL(x) \
- do { \
- if((x) != CURAND_STATUS_SUCCESS) { \
- printf("Error at %s:%d\n", __FILE__, __LINE__); \
- exit(1); \
- } \
- } while(0)
-
-namespace marian {
-
-class BackendGPU : public Backend {
-public:
- BackendGPU(DeviceId deviceId, size_t seed) : Backend(deviceId, seed) {
- setDevice();
- setHandles();
- }
-
- void setDevice() {
- cudaSetDevice(deviceId_.no);
- }
-
- cublasHandle_t getCublasHandle() { return cublasHandle_; }
-
- curandGenerator_t getCurandGenerator() { return curandGenerator_; }
-
-private:
- cublasHandle_t cublasHandle_;
- curandGenerator_t curandGenerator_;
-
-
- void setHandles() {
- cublasHandle_ = create_handle();
- curandGenerator_ = createCurandGenerator();
- }
-
-
- curandGenerator_t createCurandGenerator() {
- cudaSetDevice(deviceId_.no);
- curandGenerator_t generator;
- CURAND_CALL(curandCreateGenerator(&generator, CURAND_RNG_PSEUDO_DEFAULT));
- CURAND_CALL(curandSetPseudoRandomGeneratorSeed(generator, seed_));
-
- // cudaStream_t stream = 0;
- // CURAND_CALL(curandSetStream(generator, stream));
- // CURAND_CALL(curandDestroyGenerator(generator));
- return generator;
- }
-
- cublasHandle_t create_handle() {
- cudaSetDevice(deviceId_.no);
- cublasHandle_t cublasHandle;
- cublasCreate(&cublasHandle);
- return cublasHandle;
- }
-};
-}
diff --git a/src/graph/expression_graph.cpp b/src/graph/expression_graph.cpp
index 9014abb5..183b5787 100644
--- a/src/graph/expression_graph.cpp
+++ b/src/graph/expression_graph.cpp
@@ -1,8 +1,7 @@
#include <sstream>
-#include "graph/backend_gpu.h"
#include "graph/expression_graph.h"
-#include "backend/dispatch.h"
+#include "tensors/dispatch.h"
namespace marian {
@@ -11,11 +10,9 @@ ExpressionGraph::ExpressionGraph(bool inference)
void ExpressionGraph::setDevice(DeviceId deviceId) {
if(!backend_) {
- backend_ = New<BackendGPU>(deviceId, Config::seed);
-
+ backend_ = BackendByDevice(deviceId, Config::seed);
params_ = New<Parameters>();
params_->init(backend_->getDevice());
-
tensors_ = New<TensorAllocator>(backend_->getDevice());
}
}
diff --git a/src/graph/expression_graph.h b/src/graph/expression_graph.h
index 7d50e9ba..defdb475 100644
--- a/src/graph/expression_graph.h
+++ b/src/graph/expression_graph.h
@@ -8,8 +8,8 @@
#include "common/definitions.h"
#include "tensors/tensor_allocator.h"
+#include "tensors/backend.h"
-#include "graph/backend.h"
#include "graph/parameters.h"
#include "graph/chainable.h"
#include "graph/node_operators.h"
diff --git a/src/graph/node.cu b/src/graph/node.cu
deleted file mode 100644
index a289f60c..00000000
--- a/src/graph/node.cu
+++ /dev/null
@@ -1,51 +0,0 @@
-#include "graph/backend_gpu.h"
-#include "graph/expression_graph.h"
-#include "graph/node.h"
-
-namespace marian {
-
-size_t Node::allocate() {
- size_t elements = 0;
- if(!val_) {
- graph()->tensor(val_, shape_);
- elements = val_->shape().elements();
- }
- return elements;
-}
-
-void Node::free() {
- if(graph()) {
- if(val_)
- graph()->free(val_);
- if(adj_)
- graph()->free(adj_);
- }
-}
-
-void Node::init_dependent() {
- if(!adj_) {
- graph()->tensor(adj_, shape_);
- adj_->set(1);
- }
-}
-
-void Node::set_zero_adjoint() {
- if(!adj_) {
- graph()->tensor(adj_, shape_);
- adj_->set(0);
- }
-}
-
-float Node::scalar() {
- return val_->scalar();
-}
-
-Ptr<Backend> Node::getBackend() {
- return graph()->getBackend();
-}
-
-void NaryNodeOp::remove_children_from_top_nodes() {
- for(auto child : children_)
- graph()->remove_top_node(child);
-}
-}
diff --git a/src/graph/node.h b/src/graph/node.h
index 126d7d49..aa450000 100644
--- a/src/graph/node.h
+++ b/src/graph/node.h
@@ -5,10 +5,11 @@
#include <thread>
#include "common/keywords.h"
-#include "graph/backend.h"
-#include "graph/chainable.h"
+#include "tensors/backend.h"
#include "tensors/tensor.h"
+#include "graph/chainable.h"
+
namespace marian {
class Node : public Chainable<Tensor>,
diff --git a/src/graph/node_operators_binary.h b/src/graph/node_operators_binary.h
index 50ead8e6..7d6836a3 100644
--- a/src/graph/node_operators_binary.h
+++ b/src/graph/node_operators_binary.h
@@ -2,10 +2,10 @@
#include <thread>
-#include "graph/backend_gpu.h"
+#include "tensors/gpu/backend.h"
#include "graph/node.h"
-#include "kernels/tensor_operators.h"
#include "functional/functional.h"
+#include "kernels/tensor_operators.h"
#include "kernels/cudnn_wrappers.h"
namespace marian {
@@ -54,7 +54,7 @@ public:
NodeOps forwardOps() {
// C = alpha * dot(op(A), op(B))
return {NodeOp(Prod(
- std::static_pointer_cast<BackendGPU>(getBackend())->getCublasHandle(),
+ std::static_pointer_cast<gpu::Backend>(getBackend())->getCublasHandle(),
val_,
child(0)->val(),
child(1)->val(),
@@ -72,7 +72,7 @@ public:
// to sum gradients from different graph parts
if(!transA_ && transB_)
- return {NodeOp(Prod(std::static_pointer_cast<BackendGPU>(getBackend())
+ return {NodeOp(Prod(std::static_pointer_cast<gpu::Backend>(getBackend())
->getCublasHandle(),
child(0)->grad(),
adj_,
@@ -81,7 +81,7 @@ public:
false,
1.0,
scalar_)),
- NodeOp(Prod(std::static_pointer_cast<BackendGPU>(getBackend())
+ NodeOp(Prod(std::static_pointer_cast<gpu::Backend>(getBackend())
->getCublasHandle(),
child(1)->grad(),
adj_,
@@ -92,7 +92,7 @@ public:
scalar_))};
if(transA_ && !transB_)
- return {NodeOp(Prod(std::static_pointer_cast<BackendGPU>(getBackend())
+ return {NodeOp(Prod(std::static_pointer_cast<gpu::Backend>(getBackend())
->getCublasHandle(),
child(0)->grad(),
child(1)->val(),
@@ -101,7 +101,7 @@ public:
true,
1.0,
scalar_)),
- NodeOp(Prod(std::static_pointer_cast<BackendGPU>(getBackend())
+ NodeOp(Prod(std::static_pointer_cast<gpu::Backend>(getBackend())
->getCublasHandle(),
child(1)->grad(),
child(0)->val(),
@@ -112,7 +112,7 @@ public:
scalar_))};
if(transA_ && transB_)
- return {NodeOp(Prod(std::static_pointer_cast<BackendGPU>(getBackend())
+ return {NodeOp(Prod(std::static_pointer_cast<gpu::Backend>(getBackend())
->getCublasHandle(),
child(0)->grad(),
child(1)->val(),
@@ -121,7 +121,7 @@ public:
true,
1.0,
scalar_)),
- NodeOp(Prod(std::static_pointer_cast<BackendGPU>(getBackend())
+ NodeOp(Prod(std::static_pointer_cast<gpu::Backend>(getBackend())
->getCublasHandle(),
child(1)->grad(),
adj_,
@@ -131,7 +131,7 @@ public:
1.0,
scalar_))};
- return {NodeOp(Prod(std::static_pointer_cast<BackendGPU>(getBackend())
+ return {NodeOp(Prod(std::static_pointer_cast<gpu::Backend>(getBackend())
->getCublasHandle(),
child(0)->grad(),
adj_,
@@ -140,7 +140,7 @@ public:
true,
1.0,
scalar_)),
- NodeOp(Prod(std::static_pointer_cast<BackendGPU>(getBackend())
+ NodeOp(Prod(std::static_pointer_cast<gpu::Backend>(getBackend())
->getCublasHandle(),
child(1)->grad(),
child(0)->val(),
@@ -198,7 +198,7 @@ public:
using namespace functional;
return {
NodeOp(Prod(
- std::static_pointer_cast<BackendGPU>(getBackend())->getCublasHandle(),
+ std::static_pointer_cast<gpu::Backend>(getBackend())->getCublasHandle(),
val_,
child(0)->val(),
child(1)->val(),
@@ -219,7 +219,7 @@ public:
using namespace functional;
if(!transA_ && transB_)
- return {NodeOp(Prod(std::static_pointer_cast<BackendGPU>(getBackend())
+ return {NodeOp(Prod(std::static_pointer_cast<gpu::Backend>(getBackend())
->getCublasHandle(),
child(0)->grad(),
adj_,
@@ -228,7 +228,7 @@ public:
false,
1.0,
scalar_)),
- NodeOp(Prod(std::static_pointer_cast<BackendGPU>(getBackend())
+ NodeOp(Prod(std::static_pointer_cast<gpu::Backend>(getBackend())
->getCublasHandle(),
child(1)->grad(),
adj_,
@@ -240,7 +240,7 @@ public:
NodeOp(Add(_1, child(2)->grad(), adj_))};
if(transA_ && !transB_)
- return {NodeOp(Prod(std::static_pointer_cast<BackendGPU>(getBackend())
+ return {NodeOp(Prod(std::static_pointer_cast<gpu::Backend>(getBackend())
->getCublasHandle(),
child(0)->grad(),
child(1)->val(),
@@ -249,7 +249,7 @@ public:
true,
1.0,
scalar_)),
- NodeOp(Prod(std::static_pointer_cast<BackendGPU>(getBackend())
+ NodeOp(Prod(std::static_pointer_cast<gpu::Backend>(getBackend())
->getCublasHandle(),
child(1)->grad(),
child(0)->val(),
@@ -261,7 +261,7 @@ public:
NodeOp(Add(_1, child(2)->grad(), adj_))};
if(transA_ && transB_)
- return {NodeOp(Prod(std::static_pointer_cast<BackendGPU>(getBackend())
+ return {NodeOp(Prod(std::static_pointer_cast<gpu::Backend>(getBackend())
->getCublasHandle(),
child(0)->grad(),
child(1)->val(),
@@ -270,7 +270,7 @@ public:
true,
1.0,
scalar_)),
- NodeOp(Prod(std::static_pointer_cast<BackendGPU>(getBackend())
+ NodeOp(Prod(std::static_pointer_cast<gpu::Backend>(getBackend())
->getCublasHandle(),
child(1)->grad(),
adj_,
@@ -281,7 +281,7 @@ public:
scalar_)),
NodeOp(Add(_1, child(2)->grad(), adj_))};
- return {NodeOp(Prod(std::static_pointer_cast<BackendGPU>(getBackend())
+ return {NodeOp(Prod(std::static_pointer_cast<gpu::Backend>(getBackend())
->getCublasHandle(),
child(0)->grad(),
adj_,
@@ -290,7 +290,7 @@ public:
true,
1.0,
scalar_)),
- NodeOp(Prod(std::static_pointer_cast<BackendGPU>(getBackend())
+ NodeOp(Prod(std::static_pointer_cast<gpu::Backend>(getBackend())
->getCublasHandle(),
child(1)->grad(),
child(0)->val(),
@@ -350,7 +350,7 @@ public:
NodeOps forwardOps() {
// C = alpha * dot(op(A), op(B))
return {NodeOp(ProdBatched(
- std::static_pointer_cast<BackendGPU>(getBackend())->getCublasHandle(),
+ std::static_pointer_cast<gpu::Backend>(getBackend())->getCublasHandle(),
val_,
child(0)->val(),
child(1)->val(),
@@ -369,7 +369,7 @@ public:
if(!transA_ && transB_)
return {
- NodeOp(ProdBatched(std::static_pointer_cast<BackendGPU>(getBackend())
+ NodeOp(ProdBatched(std::static_pointer_cast<gpu::Backend>(getBackend())
->getCublasHandle(),
child(0)->grad(),
adj_,
@@ -378,7 +378,7 @@ public:
false,
1.0,
scalar_)),
- NodeOp(ProdBatched(std::static_pointer_cast<BackendGPU>(getBackend())
+ NodeOp(ProdBatched(std::static_pointer_cast<gpu::Backend>(getBackend())
->getCublasHandle(),
child(1)->grad(),
adj_,
@@ -390,7 +390,7 @@ public:
if(transA_ && !transB_)
return {
- NodeOp(ProdBatched(std::static_pointer_cast<BackendGPU>(getBackend())
+ NodeOp(ProdBatched(std::static_pointer_cast<gpu::Backend>(getBackend())
->getCublasHandle(),
child(0)->grad(),
child(1)->val(),
@@ -399,7 +399,7 @@ public:
true,
1.0,
scalar_)),
- NodeOp(ProdBatched(std::static_pointer_cast<BackendGPU>(getBackend())
+ NodeOp(ProdBatched(std::static_pointer_cast<gpu::Backend>(getBackend())
->getCublasHandle(),
child(1)->grad(),
child(0)->val(),
@@ -411,7 +411,7 @@ public:
if(transA_ && transB_)
return {
- NodeOp(ProdBatched(std::static_pointer_cast<BackendGPU>(getBackend())
+ NodeOp(ProdBatched(std::static_pointer_cast<gpu::Backend>(getBackend())
->getCublasHandle(),
child(0)->grad(),
child(1)->val(),
@@ -420,7 +420,7 @@ public:
true,
1.0,
scalar_)),
- NodeOp(ProdBatched(std::static_pointer_cast<BackendGPU>(getBackend())
+ NodeOp(ProdBatched(std::static_pointer_cast<gpu::Backend>(getBackend())
->getCublasHandle(),
child(1)->grad(),
adj_,
@@ -431,7 +431,7 @@ public:
scalar_))};
return {
- NodeOp(ProdBatched(std::static_pointer_cast<BackendGPU>(getBackend())
+ NodeOp(ProdBatched(std::static_pointer_cast<gpu::Backend>(getBackend())
->getCublasHandle(),
child(0)->grad(),
adj_,
@@ -440,7 +440,7 @@ public:
true,
1.0,
scalar_)),
- NodeOp(ProdBatched(std::static_pointer_cast<BackendGPU>(getBackend())
+ NodeOp(ProdBatched(std::static_pointer_cast<gpu::Backend>(getBackend())
->getCublasHandle(),
child(1)->grad(),
child(0)->val(),
diff --git a/src/graph/node_operators_unary.h b/src/graph/node_operators_unary.h
index 8390a0c2..a3f27fd2 100644
--- a/src/graph/node_operators_unary.h
+++ b/src/graph/node_operators_unary.h
@@ -1,10 +1,11 @@
#pragma once
-#include "graph/backend_gpu.h"
+#include "tensors/tensor.h"
+#include "tensors/gpu/backend.h"
+
#include "graph/node.h"
#include "kernels/sparse.h"
#include "kernels/tensor_operators.h"
-#include "tensors/tensor.h"
#include "functional/functional.h"
#include "kernels/cudnn_wrappers.h"