diff --git a/mace/core/runtime/opencl/opencl_runtime.cc b/mace/core/runtime/opencl/opencl_runtime.cc index fda211d4860a32fc3bec56152b06eefb6b3a386f..dd478f071e77fec5d8d9cc645b5964a807054a9f 100644 --- a/mace/core/runtime/opencl/opencl_runtime.cc +++ b/mace/core/runtime/opencl/opencl_runtime.cc @@ -161,7 +161,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() {} @@ -193,7 +233,7 @@ GPUPriorityHint OpenCLRuntime::kGPUPriorityHint = GPUPriorityHint::PRIORITY_DEFAULT; OpenCLRuntime *OpenCLRuntime::Global() { - static OpenCLRuntime runtime(kGPUPerfHint, kGPUPriorityHint); + static OpenCLRuntime runtime; return &runtime; } @@ -203,48 +243,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(); @@ -302,8 +302,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 35a20bff198fc52f0859f935663118bbde3b45ec..28d80e9b6bc93d38bfe6bd93a2f50e8073298f74 100644 --- a/mace/core/runtime/opencl/opencl_runtime.h +++ b/mace/core/runtime/opencl/opencl_runtime.h @@ -80,7 +80,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 ca0a0cebd83fc320defc03d8f74b0d18f76beae0..658397a0f4ce3e623e7ee9eec97dcf8382acfaf2 100644 --- a/mace/kernels/opencl/out_of_range_check_test.cc +++ b/mace/kernels/opencl/out_of_range_check_test.cc @@ -118,34 +118,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