【发布时间】:2015-05-12 09:04:47
【问题描述】:
我有两个文件,每个文件有 10000 个点,每个点有两个双数 X 和 Y。 我们需要的是对所有这些点进行操作,所以我们有 10000 0000 次操作 (10000 X 10000)。
第一个问题: 你推荐什么结构?我的意思是我应该将哪个变量传递给内核文件?
我已经编写了这个脚本并为 1000 个点文件(1000000 次操作)执行了它,我已将所有点放在一个数组中(1000000 X 4) - 4 来自第一个文件的 X、Y 和另一个文件的 X、Y文件 - 并将其传递给内核,因此我有 1000000 个并行线程。
local_item_size = 125
global_item_size = 1000000
第二个问题: 你认为我可以改进这个结构吗?如何改进?
第三个问题: 我编写的脚本对于 1000 个点文件可以正常工作,但是当我为 10000 个点文件运行它时,我遇到了 CL_CREATEBUFFER 错误(100000000 * 4double 输入数组的 CL_INVALID_BUFFER_SIZE)。我认为(但我不确定)原因是生成的线程数量巨大(100000000)!!
更新: - 硬件是(Intel(R) Core(TM) i5-4570 CPU @ 3.20GHz,NVIDIA Corporation GM204 [GeForce GTX 980])。 - 我们有 for 循环,每个点有 1000 个(3 个 ifs)操作,这些操作在内核中完成,每个点的结果完全独立于所有其他点。
更新2:简化问题 - 我们需要将两个矩阵 A 和 B 相乘,A 有 10000 行 2 列,B 有 2 行 10000 列 最好的结构是什么?
提前致谢,
【问题讨论】:
-
您使用的是什么硬件?每个点的计算量有多大?它只是几个操作还是更大的东西?每个点的操作是否完全独立于所有其他点? (平凡的并行任务)?
-
在这个stackoverflow.com/questions/8520421/… 问题上,这实际上可能是一个问题,您可以看到您超过了最大大小。可能有帮助的是创建一个多维指针数组。喜欢这里:cplusplus.com/forum/articles/7459
-
此外,我同意@Krystian 的观点,请向我们提供更多详细信息,说明您现在如何布置您的清单。以及您执行哪些操作。
-
@Krystian @Laurisvr,我更新了问题并添加了所需的详细信息
-
一个简单的建议:使用矢量数据类型。对于 x 和 y 坐标,您可以使用 float2 而不是两个浮点数。