Performance 在Julia中使用FFTW时,我可以链接到FFTW的本地编译版本吗?

Performance 在Julia中使用FFTW时,我可以链接到FFTW的本地编译版本吗?,performance,julia,fftw,Performance,Julia,Fftw,当我安装Pkg.add(“FFTW”)时,Julia如何链接到FFTW?我猜它下载了一个预编译的版本,因为我没有给它一个链接本地版本的路径,而且从源代码处编译FFTW似乎花费的时间不够长。对吗?如果是这样,有没有办法让Julia使用本地编译和优化的FFTW版本?我问,因为我有一个模拟代码,同时有朱丽亚和C++版本,C++一个运行速度大约是6~7X,即使我认为两者都应该花费大部分时间在FFTW调用中。因此,我想知道Julia版本是否使用了优化程度较低的FFTW版本。许多Julia软件包通过所谓的。

当我安装
Pkg.add(“FFTW”)
时,Julia如何链接到FFTW?我猜它下载了一个预编译的版本,因为我没有给它一个链接本地版本的路径,而且从源代码处编译FFTW似乎花费的时间不够长。对吗?如果是这样,有没有办法让Julia使用本地编译和优化的FFTW版本?我问,因为我有一个模拟代码,同时有朱丽亚和C++版本,C++一个运行速度大约是6~7X,即使我认为两者都应该花费大部分时间在FFTW调用中。因此,我想知道Julia版本是否使用了优化程度较低的FFTW版本。

许多Julia软件包通过所谓的。茱莉亚还提供了一个服务

特别是,您的
~/.julia/artifacts/Overrides.toml
如下所示

[f5851436-0d7a-5f13-b9de-f02708fd171a]
FFTW = "...."
其中,
是安装FFTW的“前缀”,即存在
lib/libfftw…
文件的目录。您可以在以下位置阅读有关覆盖JLL包工件的更多信息:


如果您碰巧发现减速是由于不同的库造成的,请向

报告。谢谢,这正朝着我想要的方向发展。我遇到了麻烦,因为Julia FFTW包似乎使用了libfftw-3.3.9(
使用FFTW;FFTW.version
),但我安装了最新版本的libfftw-3.3.8,显然两者不兼容。我想我需要尝试从FFTW-Github-repo编译,但这显然并不简单(自述文件中所有大写字母都有大警告),所以我需要阅读手册。我的链接问题是因为我用来编译FFTW的标志。在配置FFTW时,似乎需要使用
--启用线程--与组合线程一起使用
,而不使用
--启用openmp
。对于其他看到这一点的人,也有必要配置/make/make install,无论是否使用
--enable float
选项,都可以使用libfftw的单精度和双精度版本。我还发现在
~/.julia/artifacts/Overrides.toml
``f5851436-0d7a-5f13-b9de-f02708fd171a=“..``中,虽然答案中没有给出的形式,但是使用佐丹奴的答案,我可以将我的朱丽亚和C++版本链接到完全相同的FFTW库,性能差异仍然是相同的6-7X。对我来说,速度差异的来源仍然是个谜,但这可能是两个代码在实现上的差异(其中有一些并非无关紧要的代码)。这超出了这个问题的范围!你是说这两种代码基本相同吗?注意C++和朱丽亚有不同的内存布局(朱丽亚是列主,C++行主要:)。如果您需要访问多维数组,这会产生很大的不同。我会在对话上寻求帮助:不幸的是,这并不完全相同。C++被写为一个粗糙的基准,但是仅仅是一个简化的例子——我们可能期望朱丽亚至少要慢2x,因为它必须做更多的工作。我已经浏览了一遍,在我们的Julia代码中发现了一些可以加速的东西。我们现在需要决定是否值得投入工作来做一个更好的基准测试,或者我们是否已经很高兴朱莉娅在表现方面处于一般水平。我们还没有超级担心优化,我只是检查一下是否容易获得!这是一种常见的模式:当您是Julia的新手时,您会遇到一些性能缺陷(全局性、内存布局、类型不稳定、分配过多等等),但一旦您获得更多的经验,您就可以逐步修复错误并获得非常接近C/C++的性能。即使性能通常并不比这些语言好,但更简单的开发也会带来回报。不过,如果您有兴趣,我建议您再次就剩余的优化问题寻求帮助