前言
在《玩转 ArrayFire:02 善其事,利其器》中,我们已经了解到 ArrayFire 在 Windows 系统下的安装及环境配置,而在这一篇中,我们将继续学习 ArrayFire 如何配合 Visual Studio 2019 软件使用,并创建第一个 ArrayFire 程序。
一、将ArrayFire添加到现有解决方案中
- 打开 Visual Studio 2019 ,创建一个新项目->空项目,并命名为“ HelloWorld ”;
- 解决平台方案选择x64,添加源文件新建项“ HelloWorld.cpp”;

- 修改“ HelloWorld ”项目属性:
01 选择路径“项目 -> 属性 -> 配置属性 -> VC++目录 -> 包含目录”:添加 ArrayFire 中 include 路径,即“ $(AF_PATH)/include ”;

02 选择路径“项目 -> 属性 -> 配置属性 -> 链接器 -> 常规 -> 附加库目录”:添加 ArrayFire 中 lib 路径,即“ $(AF_PATH)/lib ”;
03 选择路径“项目 -> 属性 -> 配置属性 -> 链接器 -> 输入 -> 附加依赖项”:添加“afcpu.lib”(这里,是由于第一个 ArrayFire 程序仅在 CPU 上运行,故没有添加“afcuda.lib”和“afopencl.lib”)。

二、测试案例
1.示例代码
我们在安装 ArrayFire 后,会在安装路径如“C:\Program Files\ArrayFire\v3\examples”找到许多 ArrayFire 官方给出的经典示例,所以首先,我们可以运行其中的一个“ HelloWorld ”示例,验证上述配置是否成功。
- 用文本文档打开路径“C:\Program Files\ArrayFire\v3\examples\helloworld”下的“ HelloWorld.cpp”,将内容全选复制到自己创建的HelloWorld.cpp”中;

2.“ Ctrl+F5 ”运行代码,如果程序不出 bug 且调试控制台为下图所示,那么恭喜您顺利步入 ArrayFire 的大门!

2.第一个 ArrayFire 程序
下面,我们将利用 ArrayFire 编写一段自己的代码。这里,仅对几点可能遇到的注意事项进行简单说明:
01 代码需要包含头文件“ arrayfire.h ”;
02 代码需要使用 ArrayFire 的命名空间af;
如下为生成常量矩阵和(0-1)随机数矩阵的示例代码:
#include <arrayfire.h>
using namespace af;
int main(void)
{
//生成常量矩阵
array array0;
array0 = constant(1, 3, 2);
af_print(array0);
//生成(0-1)随机数矩阵
array rand0;
rand0 = randu(2, 4);
af_print(rand0);
system("pause");
return 0;
}
下面是调试控制台输出结果:
三、“番外”说明
相信看到这里的小伙伴,都已经欢呼雀跃起来了呢。但是博主想告诉大家的是 Visual Studio 配置 ArrayFire 矩阵库也好,其他矩阵库也好,方法都十分类似:都需要让你的解决方案找到你所调用的文件,所以,我们有必要让它知道你的包含目录头文件(.h)的位置、 附加库目录库文件(.lib)的位置以及包含哪个lib文件。同样,ArrayFire 官网也给出了其路径与文件的对应关系,如下。
AF_PATH/include:ArrayFire的头文件(包括目录);
AF_PATH/lib:所有ArrayFire后端库、dll和依赖dll(库目录);
AF_PATH/examples:开始的示例。一些例子也有预先构建的可执行文件;
AF_PATH/cmake:用于外部项目自动配置的cmake配置文件;
AF_PATH / uninstall.exe:卸载程序。
注:AF_PATH环境变量,指向安装位置。默认安装位置为C:\Program Files\ArrayFire\v3