在(C ++ - AMP)中处理异构向量

时间:2013-06-20 02:10:46

标签: c++ c++11 c++-amp

我编写的代码可以读取和解析可变数量的.dat文件,并将它们存储到2D向量中,每个文件都用分开的向量。现在,我正在尝试利用并行处理(GPU)来对这些向量执行一些计算。然而,许多询问对我来说仍然含糊不清,如果你能向我澄清,我会很感激。

  1. 我申报时是否必须定义extent尺寸?因为我有基于文件的可变维数。或者我可以声明extent而不声明concurrency::extent<2> eA;这样的维度,如果没有,那么什么是替代选项?
  2. 当我宣布array<T,N>时;我可以使用T作为通用类型(例如使用boost::any),因为我的向量是异构的(某些数字和某些文本)?

1 个答案:

答案 0 :(得分: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

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