我正在构建一个由两部分组成的应用程序:QtQuick GUI (C++) 和 Haskell 后端使用repa
和accelerate
包处理图像。
我想在 GUI 中以交互方式显示图像。我不想复制数据,而是使用某种共享内存或任何其他机制,这将使我获得最大的性能。
在 C++ GUI 中以交互方式“传输”和显示这些图像的最佳方式是什么?
我正在构建一个由两部分组成的应用程序:QtQuick GUI (C++) 和 Haskell 后端使用repa
和accelerate
包处理图像。
我想在 GUI 中以交互方式显示图像。我不想复制数据,而是使用某种共享内存或任何其他机制,这将使我获得最大的性能。
在 C++ GUI 中以交互方式“传输”和显示这些图像的最佳方式是什么?
我会看看FFI,因为您可能会直接将您的 haskell 代码嵌入到您的 C++ 代码中!这也将允许您在它们之间共享内存。
您也可以在 C++ 中打开一个到您的 haskell 程序的管道并以这种方式传递数据,尽管您随后会在内存中制作副本。除非您的图像很大,否则我怀疑在内存中制作副本会产生很大的性能差异。
我不确定 Haskell 但在 lablqt(我用于构建 QtQuick+OCaml 应用程序的库, http: //kakadu.github.io/lablqt/)我会尝试这种方法:
也许这种方法很糟糕,因为如果我们需要调整图像大小,GC 将实例化新图像,将旧图像复制到新图像,然后我们需要在 C++ 端更新指向图像的指针。
对不起,在我的想法中将无法使用。
嗯,可以用mmap
吗?Haskell有vector-mmap,它将文件映射到只读的(共享)内存或可变向量。