提交 fe4cefd1 编写于 作者: L liuqi

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

上级 9e305d67
......@@ -161,7 +161,47 @@ void OpenCLPrintfCallback(const char *buffer,
void *user_data) {
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() {}
......@@ -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<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,
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<cl_context_properties> 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<cl::Context>(
new cl::Context({*device_}, context_properties.data(),
nullptr, nullptr, &err));
......
......@@ -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;
......
......@@ -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<index_t> buffer_shape = {batch, height, width, channels};
Workspace ws;
Tensor *buffer = ws.CreateTensor("Buffer",
GetDeviceAllocator(DeviceType::OPENCL),
DataTypeToEnum<float>::v());
buffer->Resize(buffer_shape);
std::vector<size_t> image_shape;
Tensor *image = ws.CreateTensor("Image",
GetDeviceAllocator(DeviceType::OPENCL),
DataTypeToEnum<float>::v());
CalImage2DShape(buffer->shape(), IN_OUT_CHANNEL, &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) {
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<index_t> buffer_shape = {batch, height, width, channels};
Workspace ws;
Tensor *buffer = ws.CreateTensor("Buffer",
GetDeviceAllocator(DeviceType::OPENCL),
DataTypeToEnum<float>::v());
buffer->Resize(buffer_shape);
std::vector<size_t> image_shape;
Tensor *image = ws.CreateTensor("Image",
GetDeviceAllocator(DeviceType::OPENCL),
DataTypeToEnum<float>::v());
CalImage2DShape(buffer->shape(), IN_OUT_CHANNEL, &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) {
overflow_image_shape[i] += 1;
}
ASSERT_TRUE(BufferToImageOpImpl(buffer, image, overflow_image_shape));
}
} // namespace kernels
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册