1

当我使用 ArrayFire 时,我通常使用 OpenCL 后端。我在 i7 CPU 上使用 Intel OpenCL。当我切换到 AF_BACKEND_CPU 后端时,我的代码慢了大约 10-15 倍。我检查并注意到它只在一个核心上运行。我还怀疑它没有使用 SSE 或 AVX 指令,这导致了其余的减速,因为我的处理器只有 4 个内核。我觉得 ArrayFire cpu 后端应该更快。有没有办法让它多线程?

4

2 回答 2

2

CPU 后端还不是多线程的。但从 3.4.0 版开始,我怀疑它会发生变化(请参阅https://github.com/arrayfire/arrayfire/milestones上的“稀疏支持、线程安全、并行 CPU” )

于 2016-03-31T07:42:07.253 回答
0

我想知道同样的事情。事实证明,里程碑已移至 3.5.0 ( https://github.com/arrayfire/arrayfire/issues/451 )。

据我所知,到目前为止,AF 只使用了一个核心。所以 4 核还是 3 太多了。

一般来说,我建议将 AF 与 GPU 一起使用,并仅在需要时创建 af::array,因为否则无法将数据仅保存在 GPU 或 CPU 上(请参阅如何从 arrayfire 显式获取线性索引?http://forums.accelereyes.com/forums/viewtopic.php?f=17&t=43097&p=61730&hilit=copy+host+memory+into+an+array#p61727关于如何构建af::arrays ad-hoc。)

同样作为许多任务的一般经验法则,GPU 实现仍然比 CPU 实现快得多,即使该任务并不完全适合 CPU。例如,请参阅通常涉及大量分支的排序算法。

如果您坚持并行使用 CPU,您也可以尝试将 OpenMP、MPI 或仅 stl::thread 放在 AF 之上并像这样并行化。不过,我在 stl::thread 进行排序操作方面并没有收获很多。

于 2016-12-05T22:35:53.600 回答