我无法弄清楚出了什么问题。我的意思是,速度太快了,比如100万件物品和1000万件物品在我的机器上基本上有相同的0.0005秒计算。如此之快,看起来它没有做任何事情。但是数据的结果实际上是正确的。
令人难以置信的是,如果我在顺序循环上进行类似的计算而不将结果存储在数组中,那么不仅核心数量较慢,而且比ArrayFire慢1000倍。
那么,也许我没有正确使用计时器?
你认为他们实际上并没有立即计算数据吗?也许它只是设置了某种阴影标记?当我调用myArray.host()时,它会开始进行所有实际的计算吗?
在他们的网站上,它说有一种JIT来捆绑计算。
ArrayFire使用Just In Time编译将许多轻量级函数组合到单个内核启动中。这与我们易于使用的API一起使用户不仅可以快速制作算法原型,还可以充分利用底层硬件。
我在几次ArrayFire计算之前/之后开始/停止我的计时器。它的速度非常快。也许我测试错了?测试ArrayFire性能的正确方法是什么?
没关系,我发现该怎么做, 基于这些例子,我应该使用af :: timeit(function)而不是使用af :: timer。使用af :: timeit会非常慢,但是当我将大小增加10倍时,结果会更合理地扩展。它实际上并没有立即计算,这就是为什么使用af :: timer本身不起作用。
谢谢