擅长:python、mysql、java
<p>Buffers是CL的版本<code>malloc</code>,而{<cd2>}是计算设备上numpy数组的工作方式。在</p>
<p>因此,对于问题第一部分的第二个版本,您可以编写<code>a_gpu + 2</code>来获得一个新数组,该数组中的每个数字都有2个加法,而在{<cd4>}的情况下,PyOpenCL只看到一包字节,不能执行任何这样的操作。在</p>
<p>问题的第二部分与此相反:如果您有一个PyOpenCL数组,<code>.get()</code>将数据复制回并转换为(基于主机的)numpy数组。由于numpy数组是在Python中获取连续内存的一种更方便的方法,第二个带有<code>enqueue_copy</code>的变量也以numpy数组结尾,但请注意,您可以将此数据复制到任何大小的数组中(只要它足够大),并且任何类型的复制都是以字节包的形式执行的,而<code>.get()</code>则确保在主机上获得相同的大小和类型。在</p>
<p>额外的事实:当然每个PyOpenCL数组都有一个缓冲区。您可以从<code>.data</code>属性获取它。在</p>