Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencl 对于相同的CL缓冲区,ClenqueueEmapBuffer是否总是返回相同的地址?_Opencl - Fatal编程技术网

Opencl 对于相同的CL缓冲区,ClenqueueEmapBuffer是否总是返回相同的地址?

Opencl 对于相同的CL缓冲区,ClenqueueEmapBuffer是否总是返回相同的地址?,opencl,Opencl,如果我使用clEnqueueMapBuffer多次映射相同的CL缓冲区,它能保证返回相同的地址吗?例如,如果我有: ptr1 = (float *) clEnqueueMapBuffer(commandQueue, buffer, CL_TRUE, CL_MAP_WRITE, 0, bufferSize, 0, NULL, NULL, &errorNumber); // do something here ptr2 = (float *) clEnqueueMapBuffer(comma

如果我使用clEnqueueMapBuffer多次映射相同的CL缓冲区,它能保证返回相同的地址吗?例如,如果我有:

ptr1 = (float *) clEnqueueMapBuffer(commandQueue, buffer, CL_TRUE, CL_MAP_WRITE, 0, bufferSize, 0, NULL, NULL, &errorNumber);
// do something here
ptr2 = (float *) clEnqueueMapBuffer(commandQueue, buffer, CL_TRUE, CL_MAP_WRITE, 0, bufferSize, 0, NULL, NULL, &errorNumber);
ptr1和ptr2是否始终相同


如果不是,有没有办法测试两个指针(即ptr1和ptr2)是否从同一CL缓冲区映射?

否,它们不一定相同,尽管取决于实现,并且您重复映射同一区域,如果您在此期间没有映射任何其他缓冲区,它们很可能会相同。注意,这已经意味着他们不能有相同的地址:

多个命令队列可以映射内存对象的一个区域或重叠区域以进行读取,即map_flags=CL_map_READ

要比较指针,只需测试它们是否相等,但请注意,您只能同时有多个用于读取的缓冲区映射-用于写入的主机映射或来自内核的写入访问是独占操作,来自主机或其他内核的任何并发读或写访问都是未定义的。因此,当您使用CL_MAP_WRITE时,代码中的do something必须包含对ptr1的clenqueunmapmemobject调用