问题标签 [arrayfire]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
482 浏览

cuda - OpenCL 在 GTX Titan 上的速度是 CUDA 的两倍

我有一个刚刚在 ArrayFire 中实现的光束传播算法。我在 GTX Titan 卡上使用了 OpenCL 后端。使用 OpenCL,它以每分钟大约 25,000 步的速度运行。然后我将它切换到 CUDA 后端,性能提高到每分钟大约 50,000 步。这有点令人惊讶,但我认为它可能使用了 OpenCL 中没有的一些更高级的功能。然后我使用我的 GTX 960 卡进行了相同的测试。它使用 OpenCL 以每分钟 22,000 步的速度运行,使用 CUDA 以每分钟 23,000 步的速度运行。这很令人困惑,因为我预计它会遵循与泰坦相同的模式。此外,我认为我在使用 GT 730M 的笔记本电脑上看到了 2 倍的性能变化。我听说 nvidia 在某些卡上减慢了 OpenCL 的速度。他们为 700 系列做这个吗?

0 投票
0 回答
335 浏览

rust - 如何配置 arrayfire-rust 以使用 CUDA?

我在 Ubuntu 15.10 上安装了最新的官方 CUDA (7.5) 和 ArrayFire (Linux v3.3.1 64-bit)。我正在使用官方文档之后的默认配置。

当我构建arrayfire-rust 库并在 ./examples 文件夹中运行“统一”示例时,它显示我只有 CPU 和 OpenCL 后端。找不到 CUDA 后端。

如何配置包装器以支持 CUDA?

使用 CUDA 可以成功构建官方 C++ 示例。


另一个问题

如何修改build.conf文件以构建arrayfireRust 包装器中可用的子模块?当我从 GitHub 克隆源代码时。

如何配置这些选项:

我检查了 CUDA 库的路径,该cuda_sdk选项似乎正确。此外,$AF_PATH$LD_LIBRARY_PATH已设置。我的配置有什么问题?

0 投票
1 回答
332 浏览

arrayfire - 在ArrayFire中实现卷积神经网络反向传播(梯度计算)

我修改了http://www.deeplearningbook.org/contents/convnets.html中的方程 9.12以使 MxN 卷积核居中。

假设 1 个输入和 1 个输出通道(为了简化),这给出了梯度的以下表达式(暂时相信它):

要阅读上述内容,krow 处的 dK 的单个元素,kcol 等于 G 乘以移位 V 的乘积的所有行和列的总和。注意 G 和 V 具有相同的维度。我们将定义超出 V 以产生零。

例如,在一维上,如果G是[abcd],V是[wxyz],M是3,那么第一个和是dot (G, [0 wxy]),第二个和是dot (G, [wxyz ]),第三个和是点 (G, [xyz 0])。

ArrayFire 有移位操作,但它执行循环移位,而不是插入零的移位。此外,内核大小 MxN 通常很小,例如 7x7,因此似乎更优化的实现将只读取 G 和 V 一次,并在内核上累积。

对于该一维示例,我们将读取 a 和 w,x 并从 [a*0 aw ax] 开始。然后我们读入 b,y 并添加 [bw bx by]。然后读入 c,z 并添加 [cx cy cz]。然后读入d,最后加上[dy dz d*0]。

有没有直接的方法来计算 ArrayFire 中的 dK?我不禁认为这是某种卷积,但我一直无法理解卷积的样子。

0 投票
0 回答
124 浏览

c++ - 在 Linux 上为 ArrayFire 设置 Eclipse

我正在尝试在 Ubuntu 14.04 上设置 Eclipse (Mars 2.0),以便使用 ArrayFire 实用程序编译和运行 C/C++ 应用程序。我已经在我的计算机上的 /opt/ARRAYFIRE/arrayfire-3 中安装了 ArrayFire,我首先尝试使用 Eclipse 来测试 ArrayFire 性能的一个非常简单的示例。

我创建了一个简单的 C++ 测试代码:

我遵循了 ArrayFire 的所有安装说明(包括先决条件)。然后,我在 Eclipse 项目 C/C++ Build Settings 上设置 ArrayFire 标头“include”(-l)和库“lib”(-L)安装目录路径:

对于我的具体情况:

  • 在 GCC C++ 编译器中 -> 包括:/opt/ARRAYFIRE/arrayfire-3/include
  • 在 GCC C 编译器中 -> 包括:/opt/ARRAYFIRE/arrayfire-3/include
  • 在 GCC C++ 链接器 -> 库中:/opt/ARRAYFIRE/arrayfire-3/lib

这是我一直为新库所做的正常程序。但是,当我尝试使用 gcc 编译时,会出现下一个错误:

(对不起西班牙语)“sin definir”= 未定义。

我知道标头链接良好,因为我可以看到声明和编译器运行良好,但是链接器失败。

有谁知道可能是什么问题或发生了什么?

0 投票
1 回答
238 浏览

opencl - 将 ArrayFire 与 OpenCL 一起使用时出错

我成功安装了 ArrayFire,当我选择 Visual Studio 配置 CUDA_x64 时,示例 helloworld 工作正常。但是,当我更改为 OpenCL_x64 时,编译成功,但出现如下运行错误:

/************************************************* ********************/

/************************************************* ********************/

任何答案将不胜感激。提前致谢。

0 投票
0 回答
158 浏览

performance - ArrayFire.jl 设置索引!非常慢

所以我正在尝试使用 ArrayFire.jl 加速一些 Julia 代码,但我所做的只是减慢它的速度。使用@profile,我已将问题追踪到setindex!. 这是测试代码:

这两者之间的速度差异是五个数量级。

根据分析器的说法,之所以setindex!真的很慢,是因为af_assign_gen而且af_sum_all真的很慢。

我错过了什么吗?我是 GPGPU 编程的新手,所以我可能根本不理解这一切应该如何工作。

0 投票
0 回答
203 浏览

performance - ArrayFire.jl 的性能会随着时间的推移而缓慢下降

所以我试图在 Julia 中使用 ArrayFire,我发现随着时间的推移性能会奇怪地下降:

如果你运行这段代码,你会发现每次迭代都变得越来越慢。finalize我尝试在内部调用r并尝试将这些数组从 GPU 内存中抛出,以防出现问题,但它没有做任何事情。af()

这是输出:

0 投票
0 回答
22 浏览

c++ - C++ ArrayFire 的语法(将数组乘以标量)

我浏览了文档并查看了示例,但我无法理解“运算符(星号)”的语法。

例如,如果我有一个名为“array1”的数组,我想将它乘以一个值,3,我将如何合并语法:

数组& 运算符*= ( 常量​​数组 & val ) ?

我是 C++ 新手,也是 ArrayFire 新手。谢谢!

0 投票
2 回答
860 浏览

arrayfire - 在 ArrayFire 中将向量分量与数组相乘

尝试将向量分量与数组相乘(逐元素乘法或广播)时出现错误。文档显示 * 的这种重载情况应该没问题:

AFAPI 数组 运算符* (const float &lhs, const array &rhs)
将两个数组或一个数组与一个值相乘。(常量数组&,常量数组&)

但是根据下面的错误信息,也许vect(0)需要进一步展平或缩小以使尺寸一致?

错误声明很明确:

参数 1 的尺寸无效预期:ldims == 游乐设施


下面是代码:


产生输出:

ArrayFire v3.3.2
ATI Radeon HD 6750M

矩阵
[3 3 1 1]
0.0000 0.0000 0.0000
0.0000 0.0000 0.0000
0.0000 0.0000 0.0000

vect
[5 1 1 1]
1.0000
2.0000
3.0000
4.0000
5.0000

vect(0)
[1 1 1 1]
1.0000

矩阵 = [3 3 1 1] 和 vect(0) = [1 1 1 1] 的 af_print() 的 dims() 输出让我感到怀疑,但我不确定如何进一步展平。有人会认为这个示例是使用 ArrayFire API 的一种常见方式。

抛出的错误异常是:

libc++abi.dylib:以 af::exception 类型的未捕获异常终止:ArrayFire 异常(输入大小无效:203):在函数 getOutDims 中在文件 src/backend/ArrayInfo.cpp:173
参数 1 的尺寸无效预期:ldims ==
在函数 af::array af::operator*(const af::array &, const af::array &)


添加一个用例来澄清: 在实践中,我通过 coeff(k) * (3-d 数组 Z 的 2-d 切片)的总和来构造最终数组:

我会考虑使用 agfor但最初只是想获得正确的数字输出。还要注意向量:index是预定义的,例如,index = {1, 2, 4, 7, ...}元素不一定按顺序排列;这允许选择特定的术语。

0 投票
1 回答
113 浏览

c++ - 从简单的arrayfire构造函数获取段错误

通过调用简单的 arrayfire 构造函数,我得到了分段错误。