- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我目前正在实现一种算法,该算法在小矩阵和 vector 上分配线性代数。代码很快,但我想知道在 gpgpu 而不是 cpu 上实现它是否有意义。
作为预处理步骤,我能够将大部分矩阵和 vector 存储在 gpu 内存中,并分析乘法算法,当然,这些算法在 gpu 上的速度更快。
但现在我的真正问题是,如何确定从 cpu 调用 gpu 的开销?为了执行我的代码之类的事情,我丢失了多少个周期?
我希望有人能提供一些意见?
最佳答案
很难确定调用 OpenCL 的确切“开销”,因为 GPU 上的操作可以与 CPU 上运行的任何其他操作并行完成。例如,根据您的应用程序,您可以将一 block 数据从您的应用程序传输到 GPU,并并行地在 CPU 中对以下数据 block 进行一些预处理。同样,当代码在 GPU 上执行时,您可以在 CPU 上为将来需要的一些数据做一些准备工作。
到 GPU 的传输将通过 DMA 传输完成,通常速度非常快。根据我的经验,我能够在 4 毫秒的时间内将大约 4MB 的数据传输到 GPU(现代 GPU,现代主板),同时对之前发送的数据进行一些处理。由此看来,可以肯定地说您可以每秒将 1GB 的数据上传和下载到 GPU,并对这些数据进行一些处理。
在您的情况下,GPU 或 CPU 端将成为瓶颈。 CPU 端,如果它不能每秒向 GPU 提供 1GB 准备好的数据。这很可能受到磁盘 I/O 的限制。
要测试您的 GPU 路径,请设置一堆准备处理的数据缓冲区。您可能希望继续将该数据重新发送到 GPU,对其进行处理,然后下载结果(您将丢弃)。测量吞吐量并与应用程序的 CPU 版本的吞吐量进行比较。
不要只测量 GPU 处理部分,因为 GPU 上的传输和处理会竞争 GPU 内存 Controller 时间,并且会影响彼此的速度。
另外,如果您希望对小块数据有很好的响应时间,而不是好的吞吐量,您可能不会从通过 GPU 中获益,因为它会给您的处理带来一点延迟。
关于c++ - 调用 opencl 需要多长时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6954948/
我有一个独立的 Thread 应用程序。这是一个等待消息的监听器,当消息到达时执行一些操作,其中我必须将消息保存在数据库中。但我遇到了问题,因为如果我运行应用程序并“手动发送消息”,一切都会正常工作,
我有以下php代码: sleep(65); $query = "UPDATE database.table SET XXXXXXX = XXXXXXX - ".$YYYYYY." WHERE
我正在开发一个业余爱好应用程序。它在主布局中使用 webview。单击 webview 内的链接会使用户保持在 webview 内。启动后一切正常,但仍在应用程序内。但是,在手机休眠一段时间后,我重新
我目前运行的应用程序需要最大堆大小为 16GB。 目前我使用以下标志来处理垃圾回收。 -XX\:+UseParNewGC, -XX\:+UseConcMarkSweepGC, -XX:CMSIniti
$ uname -a Darwin Wheelie-Cyberman 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun 7 16:33:36 PDT 2011
在 while 循环仍在休眠时退出它的最简单方法是什么?是否有某种函数可以在 sleep 时检测某个值是否为真? 或者我是否在循环中设置一个小 sleep 并检查如果不再睡一会儿就退出?如果可以,我该
我正在 Ubunu 的 Jetty 6 上运行 Java Web 服务器,用于基于反向 ajax 的 Web。而且我在向浏览器重新发送数据的线程滞后方面遇到了严重的问题。很多时候,一些线程开始 hib
当我运行长时间操作时,我遇到来自 IIS 的请求超时。我的 ASP.NET 应用程序正在后台处理数据,但处理的记录数量很大,因此操作需要很长时间。 但是,我认为 IIS 使 session 超时。这是
我不确定从哪里开始解决这个问题,但如果我有一个 AJAX 网络应用程序向服务器发送请求并在数据库(在我的例子中是 postgresql)上运行长查询,有没有办法停止或如果仍在运行时用户刷新页面或关闭
我是一名优秀的程序员,十分优秀!