- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
CUDA 文档并不清楚 CUDA 应用程序抛出异常后内存数据如何变化。
例如,内核启动(动态)遇到异常(例如 Warp Out-of-range Address),当前内核启动将停止。在此之后,设备上的数据(例如 __device__ 变量)是否仍会保留或与异常一起被删除?
一个具体的例子是这样的:
有人可以说明这背后的理由吗?
最佳答案
如果发生破坏 CUDA 上下文的 CUDA 错误,则行为未定义。
这种类型的错误很明显,因为它是“粘性的”,这意味着一旦发生,每个 CUDA API 调用都会返回该错误,直到上下文被破坏。
非粘性错误在由 cuda API 调用返回后会自动清除(cudaPeekAtLastError
除外)。任何“内核崩溃”类型的错误(无效访问、未指定的启动失败等)都将是一个粘性错误。在您的示例中,第 3 步将(始终)在 cudaMemcpy
调用的结果上返回 API 错误,以将 variableA 从设备传输到主机,因此 cudaMemcpy
操作的结果是未定义且不可靠的——就好像 cudaMemcpy
操作也以某种未指定的方式失败了。
由于损坏的 CUDA 上下文的行为是未定义的,因此没有定义任何分配的内容,或者通常是发生此类错误后的机器状态。
非粘性错误的一个示例可能是尝试cudaMalloc
比设备内存中可用的更多数据。这样的操作会返回一个内存不足的错误,但是该错误在返回后会被清除,并且后续(有效的)cuda API调用可以成功完成,而不会返回错误。非粘性错误不会破坏 CUDA 上下文,并且 cuda 上下文的行为与从未请求过无效操作完全相同。
在许多记录的错误代码 descriptions 中都提到了粘性错误和非粘性错误之间的区别。 ,例如:
非粘性、非 cuda-context-corrupting:
cudaErrorMemoryAllocation = 2 The API call failed because it was unable to allocate enough memory to perform the requested operation.
粘性,cuda-context-corrupting:
cudaErrorMisalignedAddress = 74 The device encountered a load or store instruction on a memory address which is not aligned. The context cannot be used, so it must be destroyed (and a new one should be created). All existing device memory allocations from this context are invalid and must be reconstructed if the program is to continue using CUDA.
请注意,cudaDeviceReset()
本身不足以将 GPU 恢复到正确的功能行为。为了实现这一点,“拥有”过程也必须终止。见 here .
关于exception-handling - cuda 异常后的内存数据状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31642520/
我想使用foreach 来等待线程终止。但是,出现以下错误,没有实现。请告诉我。 cannot move out of `*handle` which is behind a shared refer
如果在TypoScript中未配置给定的typeNum,则TYPO3将抛出Exception/CMS/1294587217。 背景:从另一个系统迁移到TYPO3后,我们遇到了许多此类异常,因为在那里使
我需要一个带有 2 个 handle 的 slider ,一个可拖动,另一个固定。我正在使用 Jquery UI slider 。这是我到目前为止尝试过的:http://jsfiddle.net/8K
给定文件的HANDLE(例如C:\\FolderA\\file.txt),我想要一个函数,该函数会将HANDLE返回到包含的目录(在前面的示例中,它将是C:\\FolderA的HANDLE)。例如:
我想通过Automic在Unix中检查文件。如果该文件不存在,则应切换主机并检查文件是否存在。 问题是,我现在不执行错误处理。 每当脚本对象正在处理并且找不到文件时,skript都会中止。我在skri
鉴于: fruitid('Apple', 'Granny Smith', 1). fruitid('Apple', 'Cox', 2). fruitid('Pear', 'Bartlett', 3).
我有一个基于Spring的Wicket应用程序。 有一个池化的数据源bean。 现在,当MySQL死了时,我得到了带有堆栈跟踪的默认Wicket错误页面。 我想处理这种情况,只允许某些页面完全显示(静
我希望能够一次查询多个句柄,其中表格具有相同的格式,例如: 句柄:8000,8001,8003表:foo 想要做这样的事情: x:hopen `8000`8001`8003 x select from
我对在Swift 3中引发自定义异常有些困惑。 在C++中,我可以执行此操作以立即停止方法中的进程,抛出错误并进行处理,而无需进一步进行操作。 void foo() { try {
我一直在阅读MSDN开发人员COM指南。但是this page上的代码令人困惑。在此处复制: The following code sample shows the recommended way o
我有一个计划的批处理文件每天都会启动的过程。如果有错误,我需要内置错误处理才能重启进程。所有这些在大多数情况下都有效,但是我每个月都会收到一次超时错误,所以这是不可避免的。该进程不会将错误级别输出到b
我正在尝试从 chartlyrics API 获取歌词。我编写了一个可以运行但不能在循环内运行的 R 函数。我的脚本是: library(httr) library(RCurl) library(XM
在libuv事件循环中调用prepare handle callback和check handle callback的原因是什么? 最佳答案 I/O 操作发生在这两者之间,因此您可能希望在阻塞 I/O
我正在尝试在 R 中安装 BTYplus 包。 devtools::install_github("mplatzer/BTYDplus", dependencies=TRUE) library(BTY
我有一个Arduino,可以使用pySerialTransfer库通过串行与Mac正常通信,并且可以运行数小时。然后是某种形式的串行中断-尽管一夜间发生时我一直无法确定原因,但只要从笔记本电脑上拔下A
我是hooks和async/await的新手。我正在尝试处理Axios调用中的错误,并且不确定如何使用then/catch或try/catch处理我的API调用中的错误。 在基于类的React中,我将
我正在尝试向脚本中添加一些内容,以便让我知道我复制的文件是否已被完全复制。 基本上,我要压缩一堆文件,然后将它们发送到网络上的映射驱动器。然后,一旦文件被成功复制,我将脚本删除原始位置的文件。该脚本可
我有一个圆形 slider ,其中绘制了一条贝塞尔弧,一个圆弧在 slider 的起点和终点有两个 handle ,圆弧是在圆形 slider 中绘制的。 借助开始和结束 handle ,我可以沿着圆
删除 NULL 指针是安全的。 int* p = NULL; delete p; // ok, secure 句柄是什么? HANDLE h = NULL; CloseHandle(h
如果您没有在 dojo.connect 期间返回的“句柄”,您如何删除 dojo 连接事件? 我的示例涉及将一组事件动态分配给一组对象。 (为简单起见,事件是 onclick 和 ondblclick
我是一名优秀的程序员,十分优秀!