diff --git a/src/framework/cl/cl_engine.h b/src/framework/cl/cl_engine.h index 0f8046f8f151d53480cf8054763c4a4ec9209ec1..dc5e8aa60eea33d63df5b024ff0383d2414ce1dc 100644 --- a/src/framework/cl/cl_engine.h +++ b/src/framework/cl/cl_engine.h @@ -18,6 +18,7 @@ limitations under the License. */ #include #include "CL/cl.h" +#include "common/log.h" #include "common/enforce.h" #include "framework/cl/cl_deleter.h" #include "framework/cl/cl_tool.h" @@ -66,8 +67,14 @@ class CLEngine { const char *source = data; size_t sourceSize[] = {strlen(source)}; cl_program p = - clCreateProgramWithSource(context, 1, &source, sourceSize, NULL); + clCreateProgramWithSource(context, 1, &source, sourceSize, &status_); + + DLOG << " cl kernel file name: " << file_name; + DLOG << " source size: " << sourceSize[0]; + CL_CHECK_ERRORS(status_); + std::unique_ptr<_cl_program, CLProgramDeleter> program_ptr(p); + return std::move(program_ptr); } @@ -91,6 +98,8 @@ class CLEngine { cl_device_id *devices_; + cl_int status_; + std::unique_ptr<_cl_context, CLContextDeleter> context_; std::unique_ptr<_cl_command_queue, CLCommQueueDeleter> command_queue_; diff --git a/src/framework/cl/cl_scope.h b/src/framework/cl/cl_scope.h index 5fb400ca9aa9c6238bfbccb4531f88d48d28bab8..789ea548b576fa6e5ea57225d036f9fee08a8dd4 100644 --- a/src/framework/cl/cl_scope.h +++ b/src/framework/cl/cl_scope.h @@ -55,10 +55,12 @@ class CLScope { auto program = CLEngine::Instance()->CreateProgramWith( context_.get(), "./cl_kernel/" + file_name); - programs_[file_name] = std::move(program); - status_ = clBuildProgram(program.get(), 0, 0, 0, 0, 0); + status_ = clBuildProgram(program.get(), 0, 0, "-cl-fast-relaxed-math", 0, 0); CL_CHECK_ERRORS(status_); + + programs_[file_name] = std::move(program); + return program.get(); } diff --git a/src/operators/kernel/cl/conv_add_kernel.cpp b/src/operators/kernel/cl/conv_add_kernel.cpp index 32466dc17d1a4720071f796d17ed2a08790aea8e..696ae01bcc24f180ff26d10c13ecc81da51bb10e 100644 --- a/src/operators/kernel/cl/conv_add_kernel.cpp +++ b/src/operators/kernel/cl/conv_add_kernel.cpp @@ -55,7 +55,7 @@ void ConvAddKernel::Compute( auto input = param.Input()->GetCLImage(); auto filter = param.Filter()->GetCLImage(); auto biase = param.Bias()->GetCLImage(); - auto output = param.Output(); + auto output = param.Output()->GetCLImage(); int stride = param.Strides()[0]; int offset = param.Offset(); int input_c = param.Input()->CBlock(); diff --git a/src/operators/kernel/cl/feed_kernel.cpp b/src/operators/kernel/cl/feed_kernel.cpp index 8703518322aedc22b8598ae311d7b4503ebd7093..13873c1612380e5f98c93ca81b30be74bd962e33 100644 --- a/src/operators/kernel/cl/feed_kernel.cpp +++ b/src/operators/kernel/cl/feed_kernel.cpp @@ -12,7 +12,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ - +#include "common/log.h" #include "operators/kernel/feed_kernel.h" namespace paddle_mobile { @@ -20,7 +20,7 @@ namespace paddle_mobile { template <> bool FeedKernel::Init(FeedParam *param) { - DLOG<<"Init feed"; + DLOG<<"Init feed"; this->cl_helper_.AddKernel("feed", "feed_kernel.cl"); return true; }