MCPcopy Create free account
hub / github.com/DeepRec-AI/DeepRec / MaybeTransformLayout

Function MaybeTransformLayout

tensorflow/stream_executor/rocm/rocm_dnn.cc:2826–2861  ·  view source on GitHub ↗

NOTE(keveman): Temporary data layout transformation until MIOpen supports kBatchYXDepth for backward pass. This function allocates temporary memory, lays out the source data into the temporary but in the kBatchDepthXY layout, and returns the temporary memory. The caller is responsible for deallocating the temporary. Since the allocation is done using Stream's AllocateTemporaryMemory, a later Block

Source from the content-addressed store, hash-verified

2824// transform_scratch is populated with a legitimate temporary allocation iff
2825// the original output data needs to be transformed.
2826static DeviceMemoryBase MaybeTransformLayout(
2827 Stream* stream, miopenHandle_t handle_,
2828 int miopen_type, // Actually miopenDataType_t.
2829 BatchDescriptor* output_descriptor, DeviceMemoryBase backward_output_data,
2830 std::unique_ptr<TemporaryDeviceMemory<uint8>>* transform_scratch) {
2831 if (output_descriptor->layout() == dnn::DataLayout::kBatchDepthYX) {
2832 return backward_output_data;
2833 }
2834 CHECK(output_descriptor->layout() == dnn::DataLayout::kBatchYXDepth);
2835 *transform_scratch =
2836 stream->AllocateTemporaryArray<uint8>(backward_output_data.size())
2837 .ConsumeValueOrDie();
2838 BatchDescriptor transformed_output_descriptor;
2839 transformed_output_descriptor.CloneFrom(*output_descriptor);
2840 transformed_output_descriptor.set_layout(dnn::DataLayout::kBatchDepthYX);
2841 ScopedTensorDescriptor orig_out_back_nd{
2842 *output_descriptor, static_cast<miopenDataType_t>(miopen_type)};
2843 ScopedTensorDescriptor transformed_out_back_nd{
2844 transformed_output_descriptor,
2845 static_cast<miopenDataType_t>(miopen_type)};
2846
2847 float alpha1 = 1.0f;
2848 float alpha2 = 0.0f;
2849 float beta = 0.0f;
2850 auto status = wrap::miopenOpTensor(
2851 handle_, miopenTensorOpAdd, &alpha1, orig_out_back_nd.handle(),
2852 backward_output_data.opaque(), &alpha2, orig_out_back_nd.handle(),
2853 backward_output_data.opaque(), &beta, transformed_out_back_nd.handle(),
2854 (*transform_scratch)->mutable_device_memory()->opaque());
2855
2856 if (status != miopenStatusSuccess) {
2857 LOG(FATAL) << "Failed to transform the data layout.";
2858 }
2859 output_descriptor->set_layout(dnn::DataLayout::kBatchDepthYX);
2860 return (*transform_scratch)->device_memory();
2861}
2862
2863port::Status MIOpenSupport::DoConvolve(
2864 dnn::ConvolutionKind kind, dnn::DataType element_type,

Callers 1

DoConvolveMethod · 0.85

Calls 8

ConsumeValueOrDieMethod · 0.80
CloneFromMethod · 0.80
opaqueMethod · 0.80
layoutMethod · 0.45
sizeMethod · 0.45
handleMethod · 0.45
mutable_device_memoryMethod · 0.45
device_memoryMethod · 0.45

Tested by

no test coverage detected