提交 971a0bc4 编写于 作者: 叶剑武

Merge branch 'out-of-range' into 'master'

Use small input for out of range test for mali gpu.

See merge request !395
...@@ -178,7 +178,47 @@ void OpenCLPrintfCallback(const char *buffer, ...@@ -178,7 +178,47 @@ void OpenCLPrintfCallback(const char *buffer,
void *user_data) { void *user_data) {
fwrite(buffer, 1, length, stdout); fwrite(buffer, 1, length, stdout);
} }
void GetAdrenoContextProperties(std::vector<cl_context_properties> *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() {} void OpenCLProfilingTimer::StartTiming() {}
...@@ -210,7 +250,7 @@ GPUPriorityHint OpenCLRuntime::kGPUPriorityHint = ...@@ -210,7 +250,7 @@ GPUPriorityHint OpenCLRuntime::kGPUPriorityHint =
GPUPriorityHint::PRIORITY_DEFAULT; GPUPriorityHint::PRIORITY_DEFAULT;
OpenCLRuntime *OpenCLRuntime::Global() { OpenCLRuntime *OpenCLRuntime::Global() {
static OpenCLRuntime runtime(kGPUPerfHint, kGPUPriorityHint); static OpenCLRuntime runtime;
return &runtime; return &runtime;
} }
...@@ -220,48 +260,8 @@ void OpenCLRuntime::Configure(GPUPerfHint gpu_perf_hint, ...@@ -220,48 +260,8 @@ void OpenCLRuntime::Configure(GPUPerfHint gpu_perf_hint,
OpenCLRuntime::kGPUPriorityHint = gpu_priority_hint; OpenCLRuntime::kGPUPriorityHint = gpu_priority_hint;
} }
void GetAdrenoContextProperties(std::vector<cl_context_properties> *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, OpenCLRuntime::OpenCLRuntime():
GPUPriorityHint gpu_priority_hint):
storage_(nullptr), is_profiling_enabled_(false) { storage_(nullptr), is_profiling_enabled_(false) {
LoadOpenCLLibrary(); LoadOpenCLLibrary();
...@@ -319,8 +319,9 @@ OpenCLRuntime::OpenCLRuntime(GPUPerfHint gpu_perf_hint, ...@@ -319,8 +319,9 @@ OpenCLRuntime::OpenCLRuntime(GPUPerfHint gpu_perf_hint,
if (gpu_type_ == GPUType::QUALCOMM_ADRENO) { if (gpu_type_ == GPUType::QUALCOMM_ADRENO) {
std::vector<cl_context_properties> context_properties; std::vector<cl_context_properties> context_properties;
context_properties.reserve(5); context_properties.reserve(5);
GetAdrenoContextProperties(&context_properties, gpu_perf_hint, GetAdrenoContextProperties(&context_properties,
gpu_priority_hint); OpenCLRuntime::kGPUPerfHint,
OpenCLRuntime::kGPUPriorityHint);
context_ = std::shared_ptr<cl::Context>( context_ = std::shared_ptr<cl::Context>(
new cl::Context({*device_}, context_properties.data(), new cl::Context({*device_}, context_properties.data(),
nullptr, nullptr, &err)); nullptr, nullptr, &err));
......
...@@ -90,7 +90,7 @@ class OpenCLRuntime { ...@@ -90,7 +90,7 @@ class OpenCLRuntime {
const bool is_profiling_enabled() const; const bool is_profiling_enabled() const;
private: private:
OpenCLRuntime(GPUPerfHint, GPUPriorityHint); OpenCLRuntime();
~OpenCLRuntime(); ~OpenCLRuntime();
OpenCLRuntime(const OpenCLRuntime &) = delete; OpenCLRuntime(const OpenCLRuntime &) = delete;
OpenCLRuntime &operator=(const OpenCLRuntime &) = delete; OpenCLRuntime &operator=(const OpenCLRuntime &) = delete;
......
...@@ -128,34 +128,31 @@ class OutOfRangeCheckTest : public ::testing::Test { ...@@ -128,34 +128,31 @@ class OutOfRangeCheckTest : public ::testing::Test {
}; };
TEST(OutOfRangeCheckTest, RandomTest) { TEST(OutOfRangeCheckTest, RandomTest) {
static unsigned int seed = time(NULL); index_t batch = 3;
for (int round = 0; round < 10; ++round) { index_t height = 5;
index_t batch = 11 + rand_r(&seed) % 10; index_t width = 7;
index_t height = 12 + rand_r(&seed) % 100; index_t channels = 11;
index_t width = 13 + rand_r(&seed) % 100;
index_t channels = 14 + rand_r(&seed) % 50; std::vector<index_t> buffer_shape = {batch, height, width, channels};
Workspace ws;
std::vector<index_t> buffer_shape = {batch, height, width, channels}; Tensor *buffer = ws.CreateTensor("Buffer",
Workspace ws; GetDeviceAllocator(DeviceType::OPENCL),
Tensor *buffer = ws.CreateTensor("Buffer", DataTypeToEnum<float>::v());
GetDeviceAllocator(DeviceType::OPENCL), buffer->Resize(buffer_shape);
DataTypeToEnum<float>::v());
buffer->Resize(buffer_shape); std::vector<size_t> image_shape;
Tensor *image = ws.CreateTensor("Image",
std::vector<size_t> image_shape; GetDeviceAllocator(DeviceType::OPENCL),
Tensor *image = ws.CreateTensor("Image", DataTypeToEnum<float>::v());
GetDeviceAllocator(DeviceType::OPENCL), CalImage2DShape(buffer->shape(), IN_OUT_CHANNEL, &image_shape);
DataTypeToEnum<float>::v()); image->ResizeImage(buffer->shape(), image_shape);
CalImage2DShape(buffer->shape(), IN_OUT_CHANNEL, &image_shape); ASSERT_FALSE(BufferToImageOpImpl(buffer, image, image_shape));
image->ResizeImage(buffer->shape(), image_shape);
ASSERT_FALSE(BufferToImageOpImpl(buffer, image, image_shape)); std::vector<size_t> overflow_image_shape = image_shape;
for (int i = 0; i < overflow_image_shape.size(); ++i) {
std::vector<size_t> overflow_image_shape = image_shape; overflow_image_shape[i] += 1;
for (int i = 0; i < overflow_image_shape.size(); ++i) {
overflow_image_shape[i] += 1;
}
ASSERT_TRUE(BufferToImageOpImpl(buffer, image, overflow_image_shape));
} }
ASSERT_TRUE(BufferToImageOpImpl(buffer, image, overflow_image_shape));
} }
} // namespace kernels } // namespace kernels
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册