Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.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中的平方根与结构_Opencl - Fatal编程技术网

opencl中的平方根与结构

opencl中的平方根与结构,opencl,Opencl,我想在我的OpenCL内核中使用两个东西,我不知道如何实现/使用它们。我想最简单的答案是如何使用平方根。我发现的唯一有用的东西是,但我没有从中得到更多的智慧。我可以输入hypot(A,B),然后它根据A²+B²计算平方根吗?如果我想用双打怎么办?它说我必须使用一个扩展,但是我如何使用它呢 第二个问题是如何在OpenCL中使用typedef结构,更好的是,如何传递它? 要使其“可视化”: 我有一个非常简单的结构: typedef struct { double x; double

我想在我的OpenCL内核中使用两个东西,我不知道如何实现/使用它们。我想最简单的答案是如何使用平方根。我发现的唯一有用的东西是,但我没有从中得到更多的智慧。我可以输入hypot(A,B),然后它根据A²+B²计算平方根吗?如果我想用双打怎么办?它说我必须使用一个扩展,但是我如何使用它呢

第二个问题是如何在OpenCL中使用typedef结构,更好的是,如何传递它? 要使其“可视化”:

我有一个非常简单的结构:

typedef struct {
    double x;
    double y;
}Coord;
我想把这些数组传递给我的内核。每个线程都必须使用其获得的全局id获得自己的x和y

那么如何确保线程能够做到这一点呢?:)


提前谢谢

要使用双精度,正如您已经指出的,您必须在OpenCL代码的开头指定要使用的扩展名(即
\uu内核的位置):


完成此操作后,您应该能够使用
double2
数据类型,它与
Coord
结构相同,但编译器可以理解,因此可以更好地进行优化。和
hypot
也将能够使用double。

OpenCL包括一个平方根内置函数“sqrt”(参见OpenCL规范第6.11.2节,这是一个重载函数,用于获取和返回浮点,以及浮点类型向量(float2,3,4,8.16),如果通过pragma启用了
cl\u chr\u fp64
扩展,则它也接受双类型和双类型的向量

typedef既可以在OpenCL代码中使用,也可以在宿主代码中使用,即在OpenCL中,您可以像在C中一样拥有结构数组。您需要在宿主代码中将结构数组用作内核的输入,并在内核中声明类型为
global Coord*array
的内核参数(假设您的阵列将驻留在OpenCL全局内存中

要使用全局\u id作为数组的索引,可以使用
get\u global\u id

size_t i = get_global_id(0);
array[i].x = ... 

如果参考卡没有足够的信息,您可以尝试读取。因此,如果我理解正确,我可以将一个坐标数组传递给内核,而不做任何额外的工作?为什么它不工作,会给出非常奇怪的结果?我已经编写了一个非常简单的代码来测试typedef结构,但它并没有按照预期的方式获得结果。有人能告诉我为什么吗?老实说,我现在觉得有点傻…:P main:kernel:
size_t i = get_global_id(0);
array[i].x = ...