Skip to content

Commit 385073e

Browse files
authored
Fix DmlCopyTensor test (#3923)
* Fix heap corruption * Cleanup
1 parent eab61e8 commit 385073e

File tree

2 files changed

+11
-20
lines changed

2 files changed

+11
-20
lines changed

‎cmake/winml.cmake‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ target_cppwinrt(winml_api
8181
${sdk_folder} # location of sdk folder
8282
${sdk_version} # sdk version
8383
${target_folder} # the folder this target will be placed under
84-
${winml_midl_defines} # the midl compiler defines
84+
"${winml_midl_defines}" # the midl compiler defines
8585
${winml_api_use_ns_prefix} # set ns_prefix
8686
)
8787

@@ -91,7 +91,7 @@ target_midl(winml_api_native
9191
${sdk_folder} # location of sdk folder
9292
${sdk_version} # sdk version
9393
${target_folder} # the folder this target will be placed under
94-
${winml_midl_defines} # the midl compiler defines
94+
"${winml_midl_defines}" # the midl compiler defines
9595
)
9696

9797
target_midl(winml_api_native_internal
@@ -100,7 +100,7 @@ target_midl(winml_api_native_internal
100100
${sdk_folder} # location of sdk folder
101101
${sdk_version} # sdk version
102102
${target_folder} # the folder this target will be placed under
103-
${winml_midl_defines} # the midl compiler defines
103+
"${winml_midl_defines}" # the midl compiler defines
104104
)
105105

106106
###########################

‎winml/test/adapter/AdapterDmlEpTest.cpp‎

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,12 @@ void DmlExecutionProviderReleaseCompletedReferences() {
9999
THROW_IF_NOT_OK_MSG(winml_adapter_api->DmlExecutionProviderReleaseCompletedReferences(ort_provider), ort_api);
100100
}
101101

102+
constexpr std::array<int64_t, 4> dimensions{1, 3, 720, 720};
103+
constexpr uint64_t tensor_size = 3 * 720 * 720;
104+
std::array<float, tensor_size> tensor_values = {};
105+
102106
winrt::com_ptr<ID3D12Resource> CreateD3D12Resource(ID3D12Device& device) {
103-
constexpr uint64_t buffer_size = 720 * 720 * 3 * sizeof(float);
107+
constexpr uint64_t buffer_size = tensor_size * sizeof(float);
104108
constexpr D3D12_HEAP_PROPERTIES heap_properties = {
105109
D3D12_HEAP_TYPE_DEFAULT,
106110
D3D12_CPU_PAGE_PROPERTY_UNKNOWN,
@@ -163,12 +167,8 @@ void DmlGetD3D12ResourceFromAllocation() {
163167
}
164168

165169
UniqueOrtValue CreateTensorFromMemoryInfo(OrtMemoryInfo* memory_info) {
166-
constexpr std::array<int64_t, 4> dimensions{1, 3, 720, 720};
167-
auto input_tensor_size = std::accumulate(begin(dimensions), end(dimensions), static_cast<int64_t>(1), std::multiplies<int64_t>());
168-
std::vector<float> input_tensor_values(input_tensor_size);
169-
170170
OrtValue* tensor;
171-
THROW_IF_NOT_OK_MSG(ort_api->CreateTensorWithDataAsOrtValue(memory_info, input_tensor_values.data(), input_tensor_size * sizeof(float), dimensions.data(), dimensions.size(), ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT, &tensor), ort_api);
171+
THROW_IF_NOT_OK_MSG(ort_api->CreateTensorWithDataAsOrtValue(memory_info, tensor_values.data(), tensor_size * sizeof(float), dimensions.data(), dimensions.size(), ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT, &tensor), ort_api);
172172
return UniqueOrtValue(tensor, ort_api->ReleaseValue);
173173
}
174174

@@ -246,7 +246,7 @@ void DmlCopyTensor() {
246246

247247
// CPU to CPU is not supported
248248
OrtMemoryInfo* cpu_memory_info;
249-
THROW_IF_NOT_OK_MSG(ort_api->CreateCpuMemoryInfo(OrtArenaAllocator, OrtMemTypeDefault, &cpu_memory_info), ort_api);
249+
THROW_IF_NOT_OK_MSG(ort_api->CreateCpuMemoryInfo(OrtDeviceAllocator, OrtMemTypeDefault, &cpu_memory_info), ort_api);
250250
auto cpu_tensor = CreateTensorFromMemoryInfo(cpu_memory_info);
251251
auto dst_cpu_tensor = CreateTensorFromMemoryInfo(cpu_memory_info);
252252
WINML_EXPECT_NOT_EQUAL(nullptr, winml_adapter_api->DmlCopyTensor(dml_provider, cpu_tensor.get(), dst_cpu_tensor.get()));
@@ -271,18 +271,9 @@ void DmlCopyTensor() {
271271
ONNXTensorElementDataType::ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT,
272272
&gpu_value),
273273
ort_api);
274-
// Create DML tensor data interface
275-
Microsoft::WRL::ComPtr<_winml::OnnxruntimeValue> data_value;
276-
WINML_EXPECT_HRESULT_SUCCEEDED(Microsoft::WRL::MakeAndInitialize<_winml::OnnxruntimeValue>(
277-
&data_value,
278-
nullptr,
279-
UniqueOrtValue(gpu_value, ort_api->ReleaseValue),
280-
UniqueOrtAllocator(nullptr, nullptr)));
281274
dst_cpu_tensor = CreateTensorFromMemoryInfo(cpu_memory_info);
282275
THROW_IF_NOT_OK_MSG(winml_adapter_api->DmlCopyTensor(dml_provider, gpu_value, dst_cpu_tensor.get()), ort_api);
283276

284-
// Free the tensor before the allocator
285-
data_value = nullptr;
286277
THROW_IF_NOT_OK_MSG(winml_adapter_api->DmlFreeGPUAllocation(dml_allocator_resource), ort_api);
287278
}
288279

@@ -306,7 +297,7 @@ void ValueGetDeviceId() {
306297
THROW_IF_NOT_OK_MSG(winml_adapter_api->ValueGetDeviceId(gpu_tensor.get(), &device_id), ort_api);
307298

308299
OrtMemoryInfo* cpu_memory_info;
309-
THROW_IF_NOT_OK_MSG(ort_api->CreateCpuMemoryInfo(OrtArenaAllocator, OrtMemTypeDefault, &cpu_memory_info), ort_api);
300+
THROW_IF_NOT_OK_MSG(ort_api->CreateCpuMemoryInfo(OrtDeviceAllocator, OrtMemTypeDefault, &cpu_memory_info), ort_api);
310301
auto unique_cpu_memory_info = UniqueOrtMemoryInfo(memory_info, ort_api->ReleaseMemoryInfo);
311302
auto cpu_tensor = CreateTensorFromMemoryInfo(unique_cpu_memory_info.get());
312303
THROW_IF_NOT_OK_MSG(winml_adapter_api->ValueGetDeviceId(cpu_tensor.get(), &device_id), ort_api);

0 commit comments

Comments
 (0)