Skip to content

Commit

Permalink
Adjust Operator::Run to take reference instead of pointer (#1168)
Browse files Browse the repository at this point in the history
The `Operator::Run` and `RunImpl` signatures are changed from accepting pointer to workspace to reference to workspace.
This is more C++ way of things and matches the signature of `Setup`.


Signed-off-by: Krzysztof Lecki <klecki@nvidia.com>
  • Loading branch information
klecki committed Aug 19, 2019
1 parent 1900068 commit a9989e0
Show file tree
Hide file tree
Showing 113 changed files with 516 additions and 516 deletions.
4 changes: 2 additions & 2 deletions dali/benchmark/displacement_cpu_bench.cc
Expand Up @@ -105,10 +105,10 @@ void DisplacementBench(benchmark::State& st) {//NOLINT
ws.SetThreadPool(&tp);

// Run once so output is allocated
df.Run(&ws);
df.Run(ws);

for (auto _ : st) {
df.Run(&ws);
df.Run(ws);
}
}

Expand Down
8 changes: 4 additions & 4 deletions dali/benchmark/operator_bench.h
Expand Up @@ -67,9 +67,9 @@ class OperatorBench : public DALIBenchmark {
ThreadPool tp(num_threads, 0, false);
ws.SetThreadPool(&tp);

op_ptr->Run(&ws);
op_ptr->Run(ws);
for (auto _ : st) {
op_ptr->Run(&ws);
op_ptr->Run(ws);
st.counters["FPS"] = benchmark::Counter(st.iterations() + 1,
benchmark::Counter::kIsRate);
}
Expand Down Expand Up @@ -108,10 +108,10 @@ class OperatorBench : public DALIBenchmark {
ws.AddOutput(data_out_gpu);
ws.set_stream(0);

op_ptr->Run(&ws);
op_ptr->Run(ws);
CUDA_CALL(cudaStreamSynchronize(0));
for (auto _ : st) {
op_ptr->Run(&ws);
op_ptr->Run(ws);
CUDA_CALL(cudaStreamSynchronize(0));

int num_batches = st.iterations() + 1;
Expand Down
2 changes: 1 addition & 1 deletion dali/pipeline/executor/executor.h
Expand Up @@ -255,7 +255,7 @@ class DLL_PUBLIC Executor : public ExecutorBase, public WorkspacePolicy, public
"type information for Operator outputs. In that case CanInferOutputs should "
"always return false.");
}
op.Run(&ws);
op.Run(ws);
}
};

Expand Down
8 changes: 4 additions & 4 deletions dali/pipeline/operators/color/color_twist.cc
Expand Up @@ -104,9 +104,9 @@ Values >= 0 are accepted. For example:
.AddParent("ColorTransformBase");

template <>
void ColorTwistBase<CPUBackend>::RunImpl(SampleWorkspace *ws) {
const auto &input = ws->Input<CPUBackend>(0);
auto &output = ws->Output<CPUBackend>(0);
void ColorTwistBase<CPUBackend>::RunImpl(SampleWorkspace &ws) {
const auto &input = ws.Input<CPUBackend>(0);
auto &output = ws.Output<CPUBackend>(0);
const auto &input_shape = input.shape();

CheckParam(input, "Color augmentation");
Expand All @@ -125,7 +125,7 @@ void ColorTwistBase<CPUBackend>::RunImpl(SampleWorkspace *ws) {
float *m = reinterpret_cast<float *>(matrix);
IdentityMatrix(m);
for (size_t j = 0; j < augments_.size(); ++j) {
augments_[j]->Prepare(ws->data_idx(), spec_, ws);
augments_[j]->Prepare(ws.data_idx(), spec_, &ws);
(*augments_[j])(m);
}

Expand Down
12 changes: 6 additions & 6 deletions dali/pipeline/operators/color/color_twist.cu
Expand Up @@ -22,23 +22,23 @@ typedef NppStatus (*colorTwistFunc)(const Npp8u *pSrc, int nSrcStep, Npp8u *pDst
NppiSize oSizeROI, const Npp32f aTwist[3][4]);

template <>
void ColorTwistBase<GPUBackend>::RunImpl(DeviceWorkspace *ws) {
const auto &input = ws->Input<GPUBackend>(0);
void ColorTwistBase<GPUBackend>::RunImpl(DeviceWorkspace &ws) {
const auto &input = ws.Input<GPUBackend>(0);
DALI_ENFORCE(IsType<uint8_t>(input.type()),
"Color augmentations accept only uint8 tensors");
auto &output = ws->Output<GPUBackend>(0);
auto &output = ws.Output<GPUBackend>(0);
output.ResizeLike(input);

cudaStream_t old_stream = nppGetStream();
nppSetStream(ws->stream());
nppSetStream(ws.stream());

for (size_t i = 0; i < input.ntensor(); ++i) {
if (!augments_.empty()) {
float matrix[nDim][nDim];
float * m = reinterpret_cast<float*>(matrix);
IdentityMatrix(m);
for (size_t j = 0; j < augments_.size(); ++j) {
augments_[j]->Prepare(i, spec_, ws);
augments_[j]->Prepare(i, spec_, &ws);
(*augments_[j])(m);
}
NppiSize size;
Expand All @@ -57,7 +57,7 @@ void ColorTwistBase<GPUBackend>::RunImpl(DeviceWorkspace *ws) {
input.raw_tensor(i),
volume(input.tensor_shape(i)),
cudaMemcpyDefault,
ws->stream()));
ws.stream()));
}
}
nppSetStream(old_stream);
Expand Down
2 changes: 1 addition & 1 deletion dali/pipeline/operators/color/color_twist.h
Expand Up @@ -185,7 +185,7 @@ class ColorTwistBase : public Operator<Backend> {
return false;
}

void RunImpl(Workspace<Backend> *ws) override;
void RunImpl(Workspace<Backend> &ws) override;

std::vector<ColorAugment*> augments_;
const int C_;
Expand Down
6 changes: 3 additions & 3 deletions dali/pipeline/operators/color_space/color_space_conversion.cc
Expand Up @@ -31,9 +31,9 @@ DALI_SCHEMA(ColorSpaceConversion)
DALI_IMAGE_TYPE);

template <>
void ColorSpaceConversion<CPUBackend>::RunImpl(SampleWorkspace *ws) {
const auto &input = ws->Input<CPUBackend>(0);
auto &output = ws->Output<CPUBackend>(0);
void ColorSpaceConversion<CPUBackend>::RunImpl(SampleWorkspace &ws) {
const auto &input = ws.Input<CPUBackend>(0);
auto &output = ws.Output<CPUBackend>(0);
const auto &input_shape = input.shape();
auto output_shape = input_shape;

Expand Down
8 changes: 4 additions & 4 deletions dali/pipeline/operators/color_space/color_space_conversion.cu
Expand Up @@ -91,11 +91,11 @@ auto ConvertYCbCrToGray8uKernel = ConvertYCbCrToGrayKernel<uint8_t>;
} // namespace detail

template<>
void ColorSpaceConversion<GPUBackend>::RunImpl(DeviceWorkspace *ws) {
const auto &input = ws->Input<GPUBackend>(0);
void ColorSpaceConversion<GPUBackend>::RunImpl(DeviceWorkspace &ws) {
const auto &input = ws.Input<GPUBackend>(0);
DALI_ENFORCE(IsType<uint8_t>(input.type()),
"Color space conversion accept only uint8 tensors");
auto &output = ws->Output<GPUBackend>(0);
auto &output = ws.Output<GPUBackend>(0);

TensorList<CPUBackend> attr_output_cpu;

Expand All @@ -114,7 +114,7 @@ void ColorSpaceConversion<GPUBackend>::RunImpl(DeviceWorkspace *ws) {
output.set_type(input.type());

cudaStream_t old_stream = nppGetStream();
auto stream = ws->stream();
auto stream = ws.stream();
nppSetStream(stream);

if (input.GetLayout() == DALI_NHWC) {
Expand Down
Expand Up @@ -36,7 +36,7 @@ class ColorSpaceConversion : public Operator<Backend> {
return false;
}

void RunImpl(Workspace<Backend> *ws) override;
void RunImpl(Workspace<Backend> &ws) override;

USE_OPERATOR_MEMBERS();
using Operator<Backend>::RunImpl;
Expand Down
22 changes: 11 additions & 11 deletions dali/pipeline/operators/crop/bbox_crop.cc
Expand Up @@ -58,19 +58,19 @@ Default values disallow changes in aspect ratio.)code",

template <>
void RandomBBoxCrop<CPUBackend>::WriteCropToOutput(
SampleWorkspace *ws, const Crop &crop) const {
SampleWorkspace &ws, const Crop &crop) const {
const auto coordinates = crop.AsXywh();

// Copy the anchor to output
auto &anchor_out = ws->Output<CPUBackend>(0);
auto &anchor_out = ws.Output<CPUBackend>(0);
anchor_out.Resize({2});

auto *anchor_out_data = anchor_out.mutable_data<float>();
anchor_out_data[0] = coordinates[0];
anchor_out_data[1] = coordinates[1];

// Copy the offsets to output 1
auto &offsets_out = ws->Output<CPUBackend>(1);
auto &offsets_out = ws.Output<CPUBackend>(1);
offsets_out.Resize({2});

auto *offsets_out_data = offsets_out.mutable_data<float>();
Expand All @@ -80,8 +80,8 @@ void RandomBBoxCrop<CPUBackend>::WriteCropToOutput(

template <>
void RandomBBoxCrop<CPUBackend>::WriteBoxesToOutput(
SampleWorkspace *ws, const BoundingBoxes &bounding_boxes) const {
auto &bbox_out = ws->Output<CPUBackend>(2);
SampleWorkspace &ws, const BoundingBoxes &bounding_boxes) const {
auto &bbox_out = ws.Output<CPUBackend>(2);
bbox_out.Resize(
{static_cast<int64_t>(bounding_boxes.size()), static_cast<int64_t>(BoundingBox::kSize)});

Expand All @@ -99,8 +99,8 @@ void RandomBBoxCrop<CPUBackend>::WriteBoxesToOutput(

template <>
void RandomBBoxCrop<CPUBackend>::WriteLabelsToOutput(
SampleWorkspace *ws, const std::vector<int> &labels) const {
auto &labels_out = ws->Output<CPUBackend>(3);
SampleWorkspace &ws, const std::vector<int> &labels) const {
auto &labels_out = ws.Output<CPUBackend>(3);
labels_out.Resize({static_cast<Index>(labels.size()), 1});

auto *labels_out_data = labels_out.mutable_data<int>();
Expand All @@ -110,8 +110,8 @@ void RandomBBoxCrop<CPUBackend>::WriteLabelsToOutput(
}

template <>
void RandomBBoxCrop<CPUBackend>::RunImpl(SampleWorkspace *ws) {
const auto &boxes_tensor = ws->Input<CPUBackend>(0);
void RandomBBoxCrop<CPUBackend>::RunImpl(SampleWorkspace &ws) {
const auto &boxes_tensor = ws.Input<CPUBackend>(0);

BoundingBoxes bounding_boxes;
bounding_boxes.reserve(static_cast<size_t>(boxes_tensor.dim(0)));
Expand All @@ -125,7 +125,7 @@ void RandomBBoxCrop<CPUBackend>::RunImpl(SampleWorkspace *ws) {
bounding_boxes.emplace_back(box);
}

const auto &labels_tensor = ws->Input<CPUBackend>(1);
const auto &labels_tensor = ws.Input<CPUBackend>(1);

std::vector<int> labels;
labels.reserve(static_cast<size_t>(labels_tensor.dim(0)));
Expand All @@ -136,7 +136,7 @@ void RandomBBoxCrop<CPUBackend>::RunImpl(SampleWorkspace *ws) {
}

ProspectiveCrop prospective_crop;
int sample = ws->data_idx();
int sample = ws.data_idx();
while (!prospective_crop.success)
prospective_crop = FindProspectiveCrop(
bounding_boxes, labels, SelectMinimumOverlap(sample), sample);
Expand Down
8 changes: 4 additions & 4 deletions dali/pipeline/operators/crop/bbox_crop.h
Expand Up @@ -102,14 +102,14 @@ class RandomBBoxCrop : public Operator<Backend> {
return false;
}

void RunImpl(Workspace<Backend> *ws) override;
void RunImpl(Workspace<Backend> &ws) override;

void WriteCropToOutput(SampleWorkspace *ws, const Crop &crop) const;
void WriteCropToOutput(SampleWorkspace &ws, const Crop &crop) const;

void WriteBoxesToOutput(
SampleWorkspace *ws, const BoundingBoxes &bounding_boxes) const;
SampleWorkspace &ws, const BoundingBoxes &bounding_boxes) const;

void WriteLabelsToOutput(SampleWorkspace *ws, const std::vector<int> &labels) const;
void WriteLabelsToOutput(SampleWorkspace &ws, const std::vector<int> &labels) const;

const std::pair<float, bool> SelectMinimumOverlap(int sample) {
std::uniform_int_distribution<> sampler(
Expand Down
8 changes: 4 additions & 4 deletions dali/pipeline/operators/crop/crop.cc
Expand Up @@ -35,19 +35,19 @@ DALI_SCHEMA(Crop)
.AddParent("SliceBase");

template <>
void Crop<CPUBackend>::DataDependentSetup(SampleWorkspace *ws) {
const auto &input = ws->Input<CPUBackend>(0);
void Crop<CPUBackend>::DataDependentSetup(SampleWorkspace &ws) {
const auto &input = ws.Input<CPUBackend>(0);

const DALITensorLayout in_layout = input.GetLayout();
DALI_ENFORCE(in_layout == DALI_NHWC || in_layout == DALI_NCHW
|| in_layout == DALI_NFHWC || in_layout == DALI_NFCHW,
"Unexpected data layout");
DALITensorLayout out_layout = in_layout;

auto data_idx = ws->data_idx();
auto data_idx = ws.data_idx();
SetupSample(data_idx, in_layout, input.shape());

auto &output = ws->Output<CPUBackend>(0);
auto &output = ws.Output<CPUBackend>(0);
output.SetLayout(out_layout);
}

Expand Down
6 changes: 3 additions & 3 deletions dali/pipeline/operators/crop/crop.cu
Expand Up @@ -22,8 +22,8 @@
namespace dali {

template <>
void Crop<GPUBackend>::DataDependentSetup(DeviceWorkspace *ws) {
const auto &input = ws->Input<GPUBackend>(0);
void Crop<GPUBackend>::DataDependentSetup(DeviceWorkspace &ws) {
const auto &input = ws.Input<GPUBackend>(0);

const DALITensorLayout in_layout = input.GetLayout();
DALI_ENFORCE(in_layout == DALI_NHWC || in_layout == DALI_NCHW
Expand All @@ -34,7 +34,7 @@ void Crop<GPUBackend>::DataDependentSetup(DeviceWorkspace *ws) {
for (int i = 0; i < batch_size_; ++i) {
SetupSample(i, in_layout, input.tensor_shape(i));
}
auto &output = ws->Output<GPUBackend>(0);
auto &output = ws.Output<GPUBackend>(0);
output.SetLayout(out_layout);
}

Expand Down
6 changes: 3 additions & 3 deletions dali/pipeline/operators/crop/crop.h
Expand Up @@ -39,16 +39,16 @@ class Crop : public SliceBase<Backend>, protected CropAttr {
}

protected:
void RunImpl(Workspace<Backend> *ws) override {
void RunImpl(Workspace<Backend> &ws) override {
SliceBase<Backend>::RunImpl(ws);
}

void SetupSharedSampleParams(Workspace<Backend> *ws) override {
void SetupSharedSampleParams(Workspace<Backend> &ws) override {
CropAttr::ProcessArguments(ws);
SliceBase<Backend>::SetupSharedSampleParams(ws);
}

void DataDependentSetup(Workspace<Backend> *ws) override;
void DataDependentSetup(Workspace<Backend> &ws) override;

using SliceBase<Backend>::slice_anchors_;
using SliceBase<Backend>::slice_shapes_;
Expand Down
8 changes: 4 additions & 4 deletions dali/pipeline/operators/crop/crop_attr.h
Expand Up @@ -99,14 +99,14 @@ class CropAttr {
};
}

void ProcessArguments(const ArgumentWorkspace *ws) {
void ProcessArguments(const ArgumentWorkspace &ws) {
for (std::size_t data_idx = 0; data_idx < batch_size__; data_idx++) {
ProcessArguments(ws, data_idx);
ProcessArguments(&ws, data_idx);
}
}

void ProcessArguments(const SampleWorkspace *ws) {
ProcessArguments(ws, ws->data_idx());
void ProcessArguments(const SampleWorkspace &ws) {
ProcessArguments(&ws, ws.data_idx());
}

const CropWindowGenerator& GetCropWindowGenerator(std::size_t data_idx) const {
Expand Down
12 changes: 6 additions & 6 deletions dali/pipeline/operators/crop/slice.cc
Expand Up @@ -38,20 +38,20 @@ DALI_SCHEMA(Slice)
.AddParent("SliceBase");

template <>
void Slice<CPUBackend>::DataDependentSetup(SampleWorkspace *ws) {
const auto &images = ws->Input<CPUBackend>(kImagesInId);
const auto &anchor_tensor = ws->Input<CPUBackend>(kAnchorsInId);
const auto &slice_shape_tensor = ws->Input<CPUBackend>(kSliceShapesInId);
void Slice<CPUBackend>::DataDependentSetup(SampleWorkspace &ws) {
const auto &images = ws.Input<CPUBackend>(kImagesInId);
const auto &anchor_tensor = ws.Input<CPUBackend>(kAnchorsInId);
const auto &slice_shape_tensor = ws.Input<CPUBackend>(kSliceShapesInId);
const auto img_shape = images.shape();
const auto args_ndim = anchor_tensor.shape()[0];
const float* anchor_norm = anchor_tensor.template data<float>();
const float* slice_shape_norm = slice_shape_tensor.template data<float>();
SetupSample(ws->data_idx(), images.GetLayout(), img_shape, args_ndim,
SetupSample(ws.data_idx(), images.GetLayout(), img_shape, args_ndim,
anchor_norm, slice_shape_norm);
}

template <>
void Slice<CPUBackend>::RunImpl(SampleWorkspace *ws) {
void Slice<CPUBackend>::RunImpl(SampleWorkspace &ws) {
SliceBase<CPUBackend>::RunImpl(ws);
}

Expand Down
10 changes: 5 additions & 5 deletions dali/pipeline/operators/crop/slice.cu
Expand Up @@ -18,10 +18,10 @@
namespace dali {

template <>
void Slice<GPUBackend>::DataDependentSetup(DeviceWorkspace *ws) {
const auto &images = ws->Input<GPUBackend>(kImagesInId);
const auto &anchor_tensor = ws->Input<CPUBackend>(kAnchorsInId);
const auto &slice_shape_tensor = ws->Input<CPUBackend>(kSliceShapesInId);
void Slice<GPUBackend>::DataDependentSetup(DeviceWorkspace &ws) {
const auto &images = ws.Input<GPUBackend>(kImagesInId);
const auto &anchor_tensor = ws.Input<CPUBackend>(kAnchorsInId);
const auto &slice_shape_tensor = ws.Input<CPUBackend>(kSliceShapesInId);
for (int sample_idx = 0; sample_idx < batch_size_; sample_idx++) {
const auto img_shape = images.tensor_shape(sample_idx);
const auto args_ndims = anchor_tensor.tensor_shape(sample_idx)[0];
Expand All @@ -33,7 +33,7 @@ void Slice<GPUBackend>::DataDependentSetup(DeviceWorkspace *ws) {
}

template <>
void Slice<GPUBackend>::RunImpl(DeviceWorkspace *ws) {
void Slice<GPUBackend>::RunImpl(DeviceWorkspace &ws) {
SliceBase<GPUBackend>::RunImpl(ws);
}

Expand Down

0 comments on commit a9989e0

Please sign in to comment.