我编写了读取和解析可变数量的 .dat 文件并将它们存储到 2D vector 中的代码,每个文件都位于单独的 vector 中。现在,我尝试利用并行处理 (GPU) 对这些 vector 执行一些计算。然而,许多询问对我来说仍然不明确,如果您能为我澄清这些问题,我将不胜感激。
- 我必须定义
extent
我申报时的尺寸?因为我有基于文件的可变维数。或者我可以声明extent
没有声明尺寸,如concurrency::extent<2> eA;
如果没有,还有什么替代选择? - 当我声明
array<T,N>
时;我可以使用T
作为通用类型(例如使用boost::any
),因为我的 vector 是异构的(一些数字和一些文本)?
最佳答案
1) 不,无法在运行时设置范围的尺寸。它是一个模板参数,必须在编译时设置。您只能在运行时设置每个维度的大小。
另一种方法是声明一个一维数组,然后使用 C++ AMP lambda 中的索引偏移数学手动解压各个维度。
2) 不行。C++ AMP 仅限于 GPU 可以处理的类型子集。您不能使用 boost::any。
A C++ AMP-compatible function or lambda can only use C++ AMP-compatible types, which include the following:
- int
- unsigned int
- float
- double
- C-style arrays of int, unsigned int, float, or double
- concurrency::array_view or references to concurrency::array
如果没有进一步描述您的问题,很难提供更多建议。
关于c++ - 在 (C++-AMP) 中处理异构 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17204239/