2

我已经编写了读取和解析可变数量的 .dat 文件并将它们存储到 2D 向量中的代码,每个文件都在单独的向量中。现在,我正在尝试利用并行处理 (GPU) 来对这些向量执行一些计算。但是,许多询问对我来说仍然模棱两可,如果您能向我澄清,我将不胜感激。

  1. 声明时是否必须定义extents 尺寸?因为我有基于文件的可变维数。或者我可以extent在不声明尺寸的情况下声明,concurrency::extent<2> eA;如果没有,还有什么替代选择?
  2. 当我宣布array<T,N>;由于我的向量是异构的(一些数字和一些文本),我可以T用作通用类型(例如使用boost::any)吗?
4

1 回答 1

3

1) 不可以在运行时设置范围的尺寸。它是一个模板参数,必须在编译时设置。您只能在运行时设置每个维度的大小。

另一种方法是声明一维数组,然后使用 C++ AMP lambda 中的索引偏移数学手动解压缩各种维度。

2) 不能。C++ AMP 仅限于 GPU 可以处理的类型子集。你不能使用 boost::any。

C++ AMP 兼容函数或 lambda 只能使用 C++ AMP 兼容类型,包括以下内容:

- int
- unsigned int
- float
- double
- C-style arrays of int, unsigned int, float, or double
- concurrency::array_view or references to concurrency::array

如果没有进一步描述您的问题,很难提供更多建议。

于 2013-09-04T07:47:14.937 回答