gpt4 book ai didi

OpenCL 计算卡住屏幕

转载 作者:行者123 更新时间:2023-12-04 23:24:08 25 4
gpt4 key购买 nike

正如标题所说,当我运行我的 OpenCL 时内核整个屏幕停止重绘(显示器上显示的图像保持不变,直到我的程序完成计算。即使我从笔记本上拔下它再插回去也是如此 - 总是显示相同的图像)和计算机似乎也没有对鼠标移动使用react - 光标停留在同一位置。

我不确定为什么会发生这种情况。这可能是我的程序中的错误,还是标准行为?

在 Google 上搜索时,我找到了 this AMD 论坛上的线程和那里的一些人建议这是正常的,因为 GPU 在忙于计算时无法刷新屏幕。

如果这是真的,还有什么办法可以解决这个问题吗?

我的内核计算可能需要长达几分钟的时间,让我的计算机在整个时间里几乎无法使用真的很痛苦。

EDIT1:这是我当前的设置:

  • 显卡是 ATI Mobility Radeon HD 5650,具有 512 MB 内存和来自 AMD 网站的最新 Catalyst beta 驱动程序
  • 图形是可切换的 - Intel 集成/ATI 专用卡,但
    我在 BIOS 中禁用了切换,否则我无法获得
    在 Ubuntu 上工作的驱动程序。
  • 操作系统是 Ubuntu 12.10(64 位),但这也发生在 Windows 7(64 位)上。
  • 我的显示器通过 HDMI 连接(但笔记本屏幕卡住
    也是,所以这应该不是问题)

  • EDIT2:所以在玩了一天的代码之后,我从你的回复中得到了建议,并将我的算法更改为这样的(伪代码):
    for (cl_ulong chunk = 0; chunk < num_chunks; chunk += chunk_size)
    {
    /* set kernel arguments that are different for each chunk */
    clSetKernelArg(/* ... */);

    /* schedule kernel for next execution */
    clEnqueueNDRangeKernel(cmd_queue, kernel, 1, NULL, &global_work_size, NULL, 0, NULL, NULL);

    /* read out the results from kernel and append them to output array on host */
    clEnqueueReadBuffer(cmd_queue, of_buf, CL_TRUE, 0, chunk_size, output + chunk, 0, NULL, NULL);
    }

    所以现在我在主机上拆分整个工作负载并将其分块发送到 GPU。对于每个数据块,我将一个新内核加入队列,并将从中获得的结果以正确的偏移量附加到输出数组中。

    这就是你的意思应该分开计算吗?

    这似乎是解决卡住问题的方法,现在我能够处理比可用 GPU 内存大得多的数据,但我还必须进行一些良好的性能测量,看看什么是好的块大小。 .

    最佳答案

    每当 GPU 运行 OpenCL 内核时,它就完全专用于 OpenCL。一些现代 Nvidia GPU 是异常(exception),我认为从 GeForce GTX 500 系列开始,如果这些内核没有使用所有可用的计算单元,它们可以运行多个内核。

    您的解决方案是将您的计算分成多个简短的内核调用,这是最好的全面解决方案,因为它甚至可以在单 GPU 机器上运行,或者投资购买便宜的 GPU 来驱动您的显示器。

    如果你打算在你的 GPU 上运行长内核,那么你必须禁用 GPU 的超时检测和恢复,或者使超时延迟长于最大内核运行时间(更好,因为仍然可以捕获错误),请参阅 here如何做到这一点。

    关于OpenCL 计算卡住屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16175837/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com