From 2a72ad4071b3b5612492f85ee6bd50e35c90128b Mon Sep 17 00:00:00 2001 From: "A. Unique TensorFlower" Date: Mon, 27 Apr 2020 20:10:17 -0700 Subject: [PATCH] TFLite Metal delegate: Memory leak when aggressive wait mode is used has been fixed. PiperOrigin-RevId: 308749950 Change-Id: I5786e1673984df9c22399726b2b638670f9b1d5c --- .../lite/delegates/gpu/metal_delegate.mm | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/tensorflow/lite/delegates/gpu/metal_delegate.mm b/tensorflow/lite/delegates/gpu/metal_delegate.mm index 47155e045d7..8b8bfe147c3 100644 --- a/tensorflow/lite/delegates/gpu/metal_delegate.mm +++ b/tensorflow/lite/delegates/gpu/metal_delegate.mm @@ -120,19 +120,21 @@ class GpuAlarmClock { alarm_thread_ = std::thread([this]() { id prev_command_buffer; while (!release_thread_) { - if (active_alarms_ == total_alarms_) { - id command_buffer = [command_queue_ commandBuffer]; - id encoder = [command_buffer computeCommandEncoder]; - [encoder setComputePipelineState:stub_program_]; - [encoder setBuffer:stub_buffer_ offset:0 atIndex:0]; - [encoder dispatchThreadgroups:MTLSizeMake(1, 1, 1) - threadsPerThreadgroup:MTLSizeMake(1, 1, 1)]; - [encoder endEncoding]; - [command_buffer commit]; - if (prev_command_buffer != nil) [prev_command_buffer waitUntilScheduled]; - prev_command_buffer = command_buffer; - } else { - std::this_thread::sleep_for(std::chrono::milliseconds(1)); + @autoreleasepool { + if (active_alarms_ == total_alarms_) { + id command_buffer = [command_queue_ commandBuffer]; + id encoder = [command_buffer computeCommandEncoder]; + [encoder setComputePipelineState:stub_program_]; + [encoder setBuffer:stub_buffer_ offset:0 atIndex:0]; + [encoder dispatchThreadgroups:MTLSizeMake(1, 1, 1) + threadsPerThreadgroup:MTLSizeMake(1, 1, 1)]; + [encoder endEncoding]; + [command_buffer commit]; + if (prev_command_buffer != nil) [prev_command_buffer waitUntilScheduled]; + prev_command_buffer = command_buffer; + } else { + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + } } } });