- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在编写一些 C++ AMP 代码时遇到了问题。我已经包含了一个样本。它在模拟加速器上运行良好,但在我的硬件(Windows 7、NVIDIA GeForce GTX 660、最新驱动程序)上使显示驱动程序崩溃,但我看不出我的代码有任何问题。
我的代码有问题还是硬件/驱动程序/编译器问题?
#include "stdafx.h"
#include <vector>
#include <iostream>
#include <amp.h>
int _tmain(int argc, _TCHAR* argv[])
{
// Prints "NVIDIA GeForce GTX 660"
concurrency::accelerator_view target_view = concurrency::accelerator().create_view();
std::wcout << target_view.accelerator.description << std::endl;
// lower numbers do not cause the issue
const int x = 2000;
const int y = 30000;
// 1d array for storing result
std::vector<unsigned int> resultVector(y);
Concurrency::array_view<unsigned int, 1> resultsArrayView(resultVector.size(), resultVector);
// 2d array for data for processing
std::vector<unsigned int> dataVector(x * y);
concurrency::array_view<unsigned int, 2> dataArrayView(y, x, dataVector);
parallel_for_each(
// Define the compute domain, which is the set of threads that are created.
resultsArrayView.extent,
// Define the code to run on each thread on the accelerator.
[=](concurrency::index<1> idx) restrict(amp)
{
concurrency::array_view<unsigned int, 1> buffer = dataArrayView[idx[0]];
unsigned int bufferSize = buffer.get_extent().size();
// needs both loops to cause crash
for (unsigned int outer = 0; outer < bufferSize; outer++)
{
for (unsigned int i = 0; i < bufferSize; i++)
{
// works without this line, also if I change to buffer[0] it works?
dataArrayView[idx[0]][0] = 0;
}
}
// works without this line
resultsArrayView[0] = 0;
});
std::cout << "chash on next line" << std::endl;
resultsArrayView.synchronize();
std::cout << "will never reach me" << std::endl;
system("PAUSE");
return 0;
}
最佳答案
很可能您的计算超出了允许的量子时间(默认 2 秒)。在那之后操作系统进入并强制重启 GPU,这称为 Timeout Detection and Recovery (TDR) .软件适配器(引用设备)未启用 TDR,这就是计算可能超过允许的量子时间的原因。
您的计算是否真的需要 3000 个线程(变量 x),每个线程执行 2000 * 3000 (x * y) 次循环迭代?您可以对计算进行分块,这样每个分块的计算时间都不到 2 秒。您还可以考虑禁用 TDR 或超过允许的量子时间以满足您的需要。
我强烈推荐阅读一篇关于如何在 C++ AMP 中处理 TDR 的博文,其中详细解释了 TDR:http://blogs.msdn.com/b/nativeconcurrency/archive/2012/03/07/handling-tdrs-in-c-amp.aspx
此外,这是一篇关于如何在 Windows 8 上禁用 TDR 的单独博客文章: http://blogs.msdn.com/b/nativeconcurrency/archive/2012/03/06/disabling-tdr-on-windows-8-for-your-c-amp-algorithms.aspx
关于C++ AMP 在硬件上崩溃 (GeForce GTX 660),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15417583/
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 9年前关闭。 Improve this q
GeForce 6xx 系列 GPU 是否使用 RISC、CISC 或 VLIW 风格的指令? 在一个来源中,在 http://www.motherboardpoint.com/risc-cisc-t
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 5年前关闭。 Improve thi
采用 TCC 模式的 Tesla(Fermi 或 Kepler)与采用 WDDM 的 Geforce(同代)相比? 我编写的程序在内核开销方面存在一些非常严重的问题,因为它必须重复启动内核,开销如此之
如何检查 OpenGL 上下文是否在 Geforce 卡上运行?我需要运行不同的代码,具体取决于它是在 Geforce 卡、Quadro 还是 AMD 卡上运行,并且需要一种检测方法。 最佳答案 我认
我在编写一些 C++ AMP 代码时遇到了问题。我已经包含了一个样本。它在模拟加速器上运行良好,但在我的硬件(Windows 7、NVIDIA GeForce GTX 660、最新驱动程序)上使显示驱
On this page ,它说支持“GeForce” HW accelerated encode and decode are supported on NVIDIA GeForce, Quadro
我在运行 Nvidia 在他们的 GPU 计算 SDK 中提供的示例时遇到问题(有一个已编译示例代码库)。 对于 cuda,我收到消息“未检测到支持 CUDA 的设备”,对于 OpenCL,应该找到支
我在 Windows 7 机器上有 4 个 GTX 570。根据编程指南,点对点内存复制应该在 Geforce 和 Quadro 以及 Tesla 上工作 Memory copies can be p
我正在 build 一个工作站,并想进行一些繁重的 CUDA 编程。我不想全力以赴地获得 Tesla 卡,并且几乎将其缩小到 Quadro 4000 和 GeForce 480,但我并不真正理解其中的
我使用 CheckMultisampleQualityLevels(...) 在我的硬件上建立 MSAA 支持。我按照这个顺序做: D3D11CreateDevice(...) 给我 device d
我在配备 16 GB 内存、1 TB 硬盘和专用 NVIDIA GeForce GTX 1070 的英特尔酷睿 i7-8700 CPU 上运行 Windows 10显卡。 我计划启动 3 个由我的 W
当我尝试使用标志 DXGI_CREATE_FACTORY_DEBUG 调用 D3D12GetDebugInterface 或 CreateDXGIFactory2 时,调用在我的笔记本电脑上失败,但在
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为
我在 Windows 10 中同时安装了 CPU 和 GPU 版本的 tensorflow。 conda list t.*flow # packages in environment at C:\Us
Geforce 9500 GT 可以运行 CUDA Toolkit 5.0 吗? 首页:https://developer.nvidia.com/cuda-gpus Geforce 9500 GT 有
我正在使用 tf-seq2seq 训练 NMT 模型GEFORCE GTX 1080 ti (11GB) 的封装。在训练模型期间,执行 nvidia-smi显示当所有 CPU 内核都忙时,GPU vo
如果使用 Quadro GPU 与 GeForce GPU,TensorFlow 性能是否有明显差异? 例如它是否使用 double 运算或其他会导致 GeForce 卡性能下降的因素? 我即将购买一
我有一台配备 GeForce 9400 显卡的 MacBook Pro。维基百科说这张卡支持OpenGL 3。 但是 OS X 10.6 附带的头文件和库似乎只是 OpenGL 2(我检查了 /usr
使用 OpenGL 3.3 核心配置文件,我正在通过 渲染全屏“四边形”(作为单个超大三角形) gl.DrawArrays(gl.TRIANGLES, 0, 3) 使用以下着色器。 顶点着色器: #v
我是一名优秀的程序员,十分优秀!