Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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 在clCreateContext中,“property”参数的含义和目的是什么_Opencl - Fatal编程技术网

Opencl 在clCreateContext中,“property”参数的含义和目的是什么

Opencl 在clCreateContext中,“property”参数的含义和目的是什么,opencl,Opencl,我正在为openCL应用程序实现一个小的模板应用程序,更具体地说,我现在正在创建一个上下文 我正在通读文件 我引述: 指定上下文属性名称及其相应值的列表。每个特性名称后面紧跟着相应的所需值。列表以0结尾。属性可以为NULL,在这种情况下,所选平台是实现定义的。下表中描述了支持的属性列表 然后是名单 然而,我不知道这些房产的用途是什么,它们究竟是如何使用的?指定这些属性如何影响程序执行或仅影响设计?我见过几个例子,其中这个参数只是设置为0或nullptr 您能澄清一下吗?CL_CONTEXT_PL

我正在为openCL应用程序实现一个小的模板应用程序,更具体地说,我现在正在创建一个上下文

我正在通读文件

我引述:

指定上下文属性名称及其相应值的列表。每个特性名称后面紧跟着相应的所需值。列表以0结尾。属性可以为NULL,在这种情况下,所选平台是实现定义的。下表中描述了支持的属性列表

然后是名单

然而,我不知道这些房产的用途是什么,它们究竟是如何使用的?指定这些属性如何影响程序执行或仅影响设计?我见过几个例子,其中这个参数只是设置为0或nullptr

您能澄清一下吗?

CL_CONTEXT_PLATFORM属性允许您选择特定的平台ID。对于clCreateContext,这并不十分有用,因为平台将通过设备列表隐式选择。但是,对于clCreateContextFromType,这允许您为系统中使用AMD实现而不是Intel实现的所有GPU创建上下文

其他属性有助于OpenCL与其他图形或计算库(如OpenGL、DirectX等)之间的互操作。因此,如果您想在OpenCL和OpenGL之间共享纹理,这会告诉您的OpenCL实现您将为哪个OpenGL上下文提供纹理名称,这些名称只是整数句柄,在整个OpenGL上下文中是非唯一的

从实际的角度来看,可以将属性作为以0结尾的数组传递,例如:

cl_context_properties properties[] =
  {
    CL_CONTEXT_PLATFORM, selected_platform_id,
    0 // signals end of property list
  };
cl_int error = 0;
cl_context context = clCreateContextFromType(properties, CL_DEVICE_TYPE_GPU, NULL, NULL, &error);
CL_CONTEXT_PLATFORM属性允许您选择特定的平台ID。对于clCreateContext,这并不十分有用,因为平台将通过设备列表隐式选择。但是,对于clCreateContextFromType,这允许您为系统中使用AMD实现而不是Intel实现的所有GPU创建上下文

其他属性有助于OpenCL与其他图形或计算库(如OpenGL、DirectX等)之间的互操作。因此,如果您想在OpenCL和OpenGL之间共享纹理,这会告诉您的OpenCL实现您将为哪个OpenGL上下文提供纹理名称,这些名称只是整数句柄,在整个OpenGL上下文中是非唯一的

从实际的角度来看,可以将属性作为以0结尾的数组传递,例如:

cl_context_properties properties[] =
  {
    CL_CONTEXT_PLATFORM, selected_platform_id,
    0 // signals end of property list
  };
cl_int error = 0;
cl_context context = clCreateContextFromType(properties, CL_DEVICE_TYPE_GPU, NULL, NULL, &error);

你说选择一个特定的平台ID。那么clGetPlatformIDs有什么区别呢?我的最后一个评论是指你查询平台,你得到一个平台ID数组,然后使用你想要的。是的,你会用clGetPlatformIDs列出ID,当你的代码决定使用哪个可用平台时,您可以使用Cl_CONTEXT_PLATFORM属性指定该意图。这可能是我仍然缺少的意图位。在中,在可用的平台中,您需要选择要使用的一个。或者你可以选择一个可用的设备,它直接绑定到一个特定的平台,所以你不需要显式地设置平台。你可以说选择一个特定的平台ID。那么与CLGetPlatformID有什么区别呢?我的最后一个评论是指你查询平台,你得到一个平台ID数组,然后使用你想要的。是的,您可以使用CLGetPlatformID列出ID,当代码决定使用哪个可用平台时,您可以使用Cl_CONTEXT_platform属性指定该意图。这可能是我仍然缺少的意图位。在可用平台中,您需要选择要使用的一个。或者,您可以选择直接绑定到特定平台的可用设备,因此无需显式设置平台。