c++ - 在 (C++-AMP) 中处理异构 vector

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

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

  1. 我必须定义 extent我申报时的尺寸?因为我有基于文件的可变维数。或者我可以声明extent没有声明尺寸,如 concurrency::extent<2> eA;如果没有,还有什么替代选择?
  2. 当我声明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/

相关文章:

c++ - 限制(放大器)功能的默认参数

visual-c++ - DirectX 11.1 尝试创 build 备以不触发超时检测恢复

c++ - Visual Studio 2015 更新 1 C++ "The breakpoint failed to bind"

c++ - 我想复制 (wchar_t *)buffer 中的数据,但我无法这样做,因为还有其他不兼容的类型,类型转换但没有得到结果?

c++ - C++11 中带有可变参数模板的 bindParameter 函数

c++ - iostream 迭代器如何工作?

language-agnostic - 并发和内存模型

c++ - 对 `TextOutA@20' 的 undefined reference

c++ - 命名管道无法第二次连接

c++ - Qt GUI 不能像我预期的那样与 std::thread 一起工作