Created by: ysh329
状态:等待review
主要内容
修正OpenCL的预判API导致的初始化顺序问题。先前的预判API会让CLRuntime调用CLWrapper去检查库是否找到,符号加载是否正常。但因为该顺序问题导致后续segfault bug(如加载cpu+gpu库,但加载cpu模型,在不支持gpu的手机上面会挂的问题)。
因先初始化CLRuntime会初始化相关平台设备等等,二者存在交叉依赖的问题。现改为,预判API先不调用CLRuntime,而是先通过CLWrapper获取是否找到lib和符号方法,在做CLRuntime层面的检查(fp16的支持等等)。
再就是RuntimeProgram创建的时候,有针对opencl设置每个kernel的kernelContext,这部分之前咱们是每个kernel共用一个kernelContext,因为cl::Context
是唯一的。这里也需要考虑到当跑CPU模型时,遇到这里需要预判是否硬件支持opencl。否则出现segfault(gdb定位到这里),因而这里加上了预判再去setContext。