samskalicky commented on a change in pull request #17270: [WIP] Dynamic custom
operator GPU support
URL: https://github.com/apache/incubator-mxnet/pull/17270#discussion_r367714197
##########
File path: src/c_api/c_api.cc
##########
@@ -450,32 +480,59 @@ int MXLoadLib(const char *path) {
return ptr;
};
+ // pass the gpu stream associated with the context to custom library
+ void* gpu_stream = nullptr;
+ if (inputs[i].ctx().dev_mask() == Context::kGPU) {
+ mshadow::Stream<mxnet::gpu> *s = ctx.get_stream<mxnet::gpu>();
+ gpu_stream = static_cast<void*>(mshadow::Stream<gpu>::GetStream(s));
+ }
+
// call fcompute function
CHECK(callFComp(fcomp_fp, attr_keys.data(), attr_vals.data(),
attr_keys.size(),
- in_shapes.data(), in_dims.data(), in_data.data(),
- in_types.data(), in_verIDs.data(), in_data.size(),
- out_shapes.data(), out_dims.data(), out_data.data(),
- out_types.data(), out_verIDs.data(), out_data.size(),
- cpu_malloc, &cpu_alloc))
+ in_shapes.data(), in_dims.data(), in_data.data(),
in_types.data(),
+ in_verIDs.data(), in_dev_type.data(), in_dev_id.data(),
in_data.size(),
+ out_shapes.data(), out_dims.data(), out_data.data(),
out_types.data(),
+ out_verIDs.data(), out_dev_type.data(),
out_dev_id.data(), out_data.size(),
+ cpu_malloc, &cpu_alloc, gpu_stream))
<< "Error calling FCompute for custom operator '" << name_str << "'";
// return type void
};
- auto forward_lambda = [=](const nnvm::NodeAttrs& attrs,
- const OpContext& ctx,
- const std::vector<NDArray>& inputs,
- const std::vector<OpReqType>& req,
- const std::vector<NDArray>& outputs) {
- return fcomp_lambda(fcomp_fp, attrs, ctx, inputs, req, outputs);
+ auto forward_cpu_lambda = [=](const nnvm::NodeAttrs& attrs,
+ const OpContext& ctx,
+ const std::vector<NDArray>& inputs,
+ const std::vector<OpReqType>& req,
+ const std::vector<NDArray>& outputs) {
+ CHECK(forward_ctx_map.count("cpu") > 0) << "CPU Forward function is not
implemented";
+ return fcomp_lambda(forward_ctx_map.at("cpu"), attrs, ctx, inputs, req,
outputs);
Review comment:
```
if(forward_ctx_map.count("cpu") > 0) {
fcomp_t fcomp = forward_ctx_map.at("cpu");
auto forward_cpu_lambda = [=](const nnvm::NodeAttrs& attrs,
const OpContext& ctx,
const std::vector<NDArray>& inputs,
const std::vector<OpReqType>& req,
const std::vector<NDArray>& outputs) {
return fcomp_lambda(fcomp, attrs, ctx, inputs, req, outputs);
} ;
}
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services