diff --git a/mace/core/runtime/opencl/opencl_runtime.cc b/mace/core/runtime/opencl/opencl_runtime.cc index baec40b2dc9c3690f4e237788e8a8c081e8fa475..3477664fbd5952ecf486dc9fa7ce015170b53bd2 100644 --- a/mace/core/runtime/opencl/opencl_runtime.cc +++ b/mace/core/runtime/opencl/opencl_runtime.cc @@ -178,7 +178,47 @@ void OpenCLPrintfCallback(const char *buffer, void *user_data) { fwrite(buffer, 1, length, stdout); } + +void GetAdrenoContextProperties(std::vector *properties, + GPUPerfHint gpu_perf_hint, + GPUPriorityHint gpu_priority_hint) { + MACE_CHECK_NOTNULL(properties); + switch (gpu_perf_hint) { + case GPUPerfHint::PERF_LOW: + properties->push_back(CL_CONTEXT_PERF_HINT_QCOM); + properties->push_back(CL_PERF_HINT_LOW_QCOM); + break; + case GPUPerfHint::PERF_NORMAL: + properties->push_back(CL_CONTEXT_PERF_HINT_QCOM); + properties->push_back(CL_PERF_HINT_NORMAL_QCOM); + break; + case GPUPerfHint::PERF_HIGH: + properties->push_back(CL_CONTEXT_PERF_HINT_QCOM); + properties->push_back(CL_PERF_HINT_HIGH_QCOM); + break; + default: + break; + } + switch (gpu_priority_hint) { + case GPUPriorityHint::PRIORITY_LOW: + properties->push_back(CL_CONTEXT_PRIORITY_HINT_QCOM); + properties->push_back(CL_PRIORITY_HINT_LOW_QCOM); + break; + case GPUPriorityHint::PRIORITY_NORMAL: + properties->push_back(CL_CONTEXT_PRIORITY_HINT_QCOM); + properties->push_back(CL_PRIORITY_HINT_NORMAL_QCOM); + break; + case GPUPriorityHint::PRIORITY_HIGH: + properties->push_back(CL_CONTEXT_PRIORITY_HINT_QCOM); + properties->push_back(CL_PRIORITY_HINT_HIGH_QCOM); + break; + default: + break; + } + // The properties list should be terminated with 0 + properties->push_back(0); } +} // namespace void OpenCLProfilingTimer::StartTiming() {} @@ -210,7 +250,7 @@ GPUPriorityHint OpenCLRuntime::kGPUPriorityHint = GPUPriorityHint::PRIORITY_DEFAULT; OpenCLRuntime *OpenCLRuntime::Global() { - static OpenCLRuntime runtime(kGPUPerfHint, kGPUPriorityHint); + static OpenCLRuntime runtime; return &runtime; } @@ -220,48 +260,8 @@ void OpenCLRuntime::Configure(GPUPerfHint gpu_perf_hint, OpenCLRuntime::kGPUPriorityHint = gpu_priority_hint; } -void GetAdrenoContextProperties(std::vector *properties, - GPUPerfHint gpu_perf_hint, - GPUPriorityHint gpu_priority_hint) { - MACE_CHECK_NOTNULL(properties); - switch (gpu_perf_hint) { - case GPUPerfHint::PERF_LOW: - properties->push_back(CL_CONTEXT_PERF_HINT_QCOM); - properties->push_back(CL_PERF_HINT_LOW_QCOM); - break; - case GPUPerfHint::PERF_NORMAL: - properties->push_back(CL_CONTEXT_PERF_HINT_QCOM); - properties->push_back(CL_PERF_HINT_NORMAL_QCOM); - break; - case GPUPerfHint::PERF_HIGH: - properties->push_back(CL_CONTEXT_PERF_HINT_QCOM); - properties->push_back(CL_PERF_HINT_HIGH_QCOM); - break; - default: - break; - } - switch (gpu_priority_hint) { - case GPUPriorityHint::PRIORITY_LOW: - properties->push_back(CL_CONTEXT_PRIORITY_HINT_QCOM); - properties->push_back(CL_PRIORITY_HINT_LOW_QCOM); - break; - case GPUPriorityHint::PRIORITY_NORMAL: - properties->push_back(CL_CONTEXT_PRIORITY_HINT_QCOM); - properties->push_back(CL_PRIORITY_HINT_NORMAL_QCOM); - break; - case GPUPriorityHint::PRIORITY_HIGH: - properties->push_back(CL_CONTEXT_PRIORITY_HINT_QCOM); - properties->push_back(CL_PRIORITY_HINT_HIGH_QCOM); - break; - default: - break; - } - // The properties list should be terminated with 0 - properties->push_back(0); -} -OpenCLRuntime::OpenCLRuntime(GPUPerfHint gpu_perf_hint, - GPUPriorityHint gpu_priority_hint): +OpenCLRuntime::OpenCLRuntime(): storage_(nullptr), is_profiling_enabled_(false) { LoadOpenCLLibrary(); @@ -319,8 +319,9 @@ OpenCLRuntime::OpenCLRuntime(GPUPerfHint gpu_perf_hint, if (gpu_type_ == GPUType::QUALCOMM_ADRENO) { std::vector context_properties; context_properties.reserve(5); - GetAdrenoContextProperties(&context_properties, gpu_perf_hint, - gpu_priority_hint); + GetAdrenoContextProperties(&context_properties, + OpenCLRuntime::kGPUPerfHint, + OpenCLRuntime::kGPUPriorityHint); context_ = std::shared_ptr( new cl::Context({*device_}, context_properties.data(), nullptr, nullptr, &err)); diff --git a/mace/core/runtime/opencl/opencl_runtime.h b/mace/core/runtime/opencl/opencl_runtime.h index 2ca62e7a138db41b1a0991fb7c0c58d59dace7c8..8228324c04ea0a000dadeb152b9bb6b49b1427e9 100644 --- a/mace/core/runtime/opencl/opencl_runtime.h +++ b/mace/core/runtime/opencl/opencl_runtime.h @@ -90,7 +90,7 @@ class OpenCLRuntime { const bool is_profiling_enabled() const; private: - OpenCLRuntime(GPUPerfHint, GPUPriorityHint); + OpenCLRuntime(); ~OpenCLRuntime(); OpenCLRuntime(const OpenCLRuntime &) = delete; OpenCLRuntime &operator=(const OpenCLRuntime &) = delete; diff --git a/mace/kernels/opencl/out_of_range_check_test.cc b/mace/kernels/opencl/out_of_range_check_test.cc index a9d06fd7d9d5dcaa40a1f006baaaa1d5d133aa83..b310a93afea4bff99053347864ee7695329d3ded 100644 --- a/mace/kernels/opencl/out_of_range_check_test.cc +++ b/mace/kernels/opencl/out_of_range_check_test.cc @@ -128,34 +128,31 @@ class OutOfRangeCheckTest : public ::testing::Test { }; TEST(OutOfRangeCheckTest, RandomTest) { - static unsigned int seed = time(NULL); - for (int round = 0; round < 10; ++round) { - index_t batch = 11 + rand_r(&seed) % 10; - index_t height = 12 + rand_r(&seed) % 100; - index_t width = 13 + rand_r(&seed) % 100; - index_t channels = 14 + rand_r(&seed) % 50; - - std::vector buffer_shape = {batch, height, width, channels}; - Workspace ws; - Tensor *buffer = ws.CreateTensor("Buffer", - GetDeviceAllocator(DeviceType::OPENCL), - DataTypeToEnum::v()); - buffer->Resize(buffer_shape); - - std::vector image_shape; - Tensor *image = ws.CreateTensor("Image", - GetDeviceAllocator(DeviceType::OPENCL), - DataTypeToEnum::v()); - CalImage2DShape(buffer->shape(), IN_OUT_CHANNEL, &image_shape); - image->ResizeImage(buffer->shape(), image_shape); - ASSERT_FALSE(BufferToImageOpImpl(buffer, image, image_shape)); - - std::vector overflow_image_shape = image_shape; - for (int i = 0; i < overflow_image_shape.size(); ++i) { - overflow_image_shape[i] += 1; - } - ASSERT_TRUE(BufferToImageOpImpl(buffer, image, overflow_image_shape)); + index_t batch = 3; + index_t height = 5; + index_t width = 7; + index_t channels = 11; + + std::vector buffer_shape = {batch, height, width, channels}; + Workspace ws; + Tensor *buffer = ws.CreateTensor("Buffer", + GetDeviceAllocator(DeviceType::OPENCL), + DataTypeToEnum::v()); + buffer->Resize(buffer_shape); + + std::vector image_shape; + Tensor *image = ws.CreateTensor("Image", + GetDeviceAllocator(DeviceType::OPENCL), + DataTypeToEnum::v()); + CalImage2DShape(buffer->shape(), IN_OUT_CHANNEL, &image_shape); + image->ResizeImage(buffer->shape(), image_shape); + ASSERT_FALSE(BufferToImageOpImpl(buffer, image, image_shape)); + + std::vector overflow_image_shape = image_shape; + for (int i = 0; i < overflow_image_shape.size(); ++i) { + overflow_image_shape[i] += 1; } + ASSERT_TRUE(BufferToImageOpImpl(buffer, image, overflow_image_shape)); } } // namespace kernels