c++ - 是什么导致代码在 GPU 中运行?

标签 c++ c++-amp

我知道我的代码正在 GPU 中运行,因为性能分析器是这么说的,但我得到了关于实际导致它在 GPU 中运行的原因的混合信息。 This著名的微软开发人员说parallel_for是CPU,parallel_for_each是GPU。 This著名的 Microsoft 开发人员暗示 parallel_for 和 parallel_for_each 是可以互换的(在使用方式上略有变化),但甚至没有提及 GPU 或 C++amp,尽管他确实将两者与 OpenMP 进行了比较。 MSDN 也有各方面的文章。是使用哪一个“限制”子句吗?我想我可以做一些实验,但这不是官方说法。如有任何意见,我们将不胜感激。

最佳答案

如果您想确保在 GPU 上运行,请选择要运行代码的 GPU。

std::vector<accelerator> accs = accelerator::get_all();


//std::wcout << "Found " << accs.size() << " C++ AMP accelerator(s):" << std::endl;
//std::for_each(accs.cbegin(), accs.cend(), [](const accelerator& a)
//{
//  if (a.get_is_emulated() == false)
//  {
//      std::wcout << "  " << a.device_path << std::endl
//          << " description   " << a.description
//          << " device_path   " << a.device_path
//          << " is_emulated   " << a.get_is_emulated()
//          << std::endl << std::endl;
//  }
//});

但更具体地说,限制关键字将尝试在加速器上运行(如果可用)。如果不是相同的代码将自己在CPU上运行。在我们的一些项目中,我们检测具有最多内存的加速器(GPU),并将其设为“选择的”加速器。

希望这有帮助。

关于c++ - 是什么导致代码在 GPU 中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43679131/

相关文章:

c++ - 在 C++ 11 中使用 free(const char *)

c++ - 单独的类文件错误?

c++ - 关于作用域和生命周期

c++ - parallel_for_each 上下文中的数组复制

c++ - 使用 D3D/D2D 将设备定位的像素数组(来自 C++ AMP)发送到窗口

c++ - Visual Studio 2015 不会抑制错误 C4996

c++ - Qt 和 Gstreamer 交互的问题

c++ - 我可以将多少内存声明为tile_static?

c++ - 如何同时在 CPU 和 GPU 设备上运行任务?