kernel总是串行执行的,所以如果需要在设备端, 通过动态并行启动多个能同时执行的kernel, 则必须在设备端使用多流.这也是论坛上面, 为何很多"我只想使用同一个流, 却需要让里面的多个kernel...而OpenCL则需要单独的通过事件(实际上是barrier)进行约束,用户可以分别理解成, CUDA的动态并行, 默认提供的功能较少, 但用起来简单。...我分别说一下这三点:
Host上对流的创建, 可以创建一个普通流, 也可以创建一个非阻塞流.后者这种流, 不对默认流进行隐式的自动同步.而Host上的默认流, 目前也有两种, 一种是经典默认流, 另外一种是新型的...和这个相反的是, OpenCL的"设备端"可以同时指GPU和CPU, 也就是可能存在OpenCL上, CPU同时要负责执行kernel, 还要负责调度的情况。
此时就很尴尬了。...特别的, 还影响UI交互的实时性.所以OpenCL用户经常不知道为何, 性能就剧烈下降了("我似乎也没有执行神马操作啊, 怎么会这样")。