这个问题实际上是关于GSL和MATLAB之间的权衡。首先,让我定义一些变量:
- Target OS: Windows XP
- Target IDE: MS VS 2005/2008
- Software: Commercial
- Development Language: C++
此外,我之所以问这个问题,是因为我找不到关于这两种方法的易用性、许可、性能标准的完整答案。
我们需要使用GNU GSL和MATLAB实现一些数值运算(如FFT)。我知道这是可能使用GSL(与cygwin)和MATLAB在Windows操作系统与MS VS ide。
但是,我有以下问题:
- 许可当我在应用程序中使用MATLAB库时(与GSL相同)
- 性能 MATLAB c++代码与GNU GSL之间的差异(特别是在计算FFT时)
- 易用性(异常,错误处理,可测试性)
如果你能阐明实施决策的路径,那就太好了。
还有,提前感谢
如果你只是在做FFT和其他类似的事情,你有没有考虑过英特尔的MKL或AMD的ACML[PDF]?都有FFT。支付Matlab只是为了得到FFT例程是,恕我直言,愚蠢的。只需使用一个好的高性能c++/Fortran库。
话虽如此,这位先生维护了一个GSL的补丁版本,可以用Visual Studio编译
如果您使用GPL,那么您必须根据GPL进行许可
如果我想发布一个使用GSL的应用程序,我需要使用什么许可证?GNU通用公共许可证(GPL)。商业用户的底线:
GSL can be used internally ("in-house") without restriction, but only redistributed in other software that is under the GNU GPL.
英特尔的MKL有一个许可协议,这可能是你正在寻找的。
我可以重新分发英特尔数学内核库与我的应用程序?是的。当您购买英特尔MKL时,您将获得与您的应用程序一起重新分发英特尔MKL计算部分的权利。评估版本的英特尔MKL不包括再分发的权利。可以重新分发的文件列表在redist.txt中提供,该文件包含在带有产品许可证的Intel MKL发行版中。
我不太确定ACML的许可证,但我相信发行它是要花钱的。
-
您不需要Cygwin来使用GSL,只需要构建它。您需要使用MinGW GCC来完成此操作,并使用Cygwin或MSYS作为POSIX shell环境来使用"configure"来构建它。或者尝试找到一个预构建的版本。您应该能够使用gendef和MSVC的lib.exe等工具为创建的dll创建一个导入库。这将允许你将DLL与Visual Studio编译器链接。
-
GSL可以做FFT,但FFTW做得更好。两者都是GPL(如果我没弄错的话),所以他们会要求你的应用程序是GPL兼容许可。
-
Matlab比c更容易(表面上),但我很肯定,如果使用正确,GSL,特别是FFTW应该在原始性能方面击败Matlab。