问题标签 [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.
c++ - 从主机指针构造时,数组触发构造函数是否会自动推断类型?
我从数组火的文档中读到,可以从主机指针构造一个数组火数组。就像是
但是,我现在不清楚数组触发是否会自动将数组的类型确定为“双”(f64)而不是默认的浮点(f32)。
非常感谢你的帮助。
python - Arrayfire python是否支持多GPU编程
我正在尝试使用 arrayFire python ( https://github.com/arrayfire/arrayfire-python ) 进行多 GPU 编程。
但是,当我尝试将它与并发期货(https://docs.python.org/3/library/concurrent.futures.html)库连接时,我遇到了同步问题。
有人对如何使用 arrayfire-python 在多个 GPU 上进行并行处理有意见吗?
c++ - 如何避免在arrayfire中使用翻转和转置memcpy?
我在 GPU (OpenCL) 的帮助下使用 arrayfire 来加速一些 C++ 代码。我有 600MB 和更多的 af::array,我需要沿列维度翻转然后转置它。
到目前为止,我几乎使用 C++ 例程完成了这些操作。然而,我现在想用 AF 来做,但注意到 AF 库的内存使用过多。我有两个问题:
1) 我完全不明白为什么 300MB 阵列上的任何操作(例如翻转或 T)都应该使用超过 900MB 的内存。2)我想知道如何避免创建数组 foo 的副本。我认为通过将操作封装在一个单独的函数中,我可以摆脱任何副本。
我有这样的代码:
我只需要执行一次此操作,因此速度不如内存使用重要,但我更愿意在 AF 框架内执行此操作。
(所有内存使用统计数据都是使用 gpustat 从 debian 上的 NVIDIA 内核驱动程序包中读取的。)
CPU后端的内存使用量也过多。
感谢 umar-arshad 的回复:当我上次在 CPU 上运行代码时,我分析了内存使用情况——假设它的行为相同。我在 GPU 上仔细检查了测量结果,并同时使用了 gpustat 和 nvidia-smi。事实上,测量的代码是不同的,正如你所解释的那样。现在一切都说得通了——至少是 GPU 部分。
也许在 CPU 上 foo 最初只有 f64,因为只使用了实部,并且通过使用翻转或转置它变成了 c64。
“分配在某些平台上的所有队列上触发隐式设备同步”的事实与此网站一起:http ://forums.accelereyes.com/forums/viewtopic.php?f=17&t=43097&p=61730&hilit=copy+host+ memory+into+an+array#p61727 和 af::printMemInfo(); 帮助我最终弄清楚了 AF 的大部分内存处理。大大加快了我的程序。
然而,就地(或尽可能少的开销)执行这两个操作的唯一选择仍然是使用:
然而,这非常麻烦,因为我不想为 Row-/Column-Major 格式和索引魔法而烦恼。所以我仍然在这里寻找建议。
c++ - 如何从arrayfire显式获取线性索引?
假设我有stl::array<float, 24> foo
一个列主格式 arrayfire 数组的线性化 STL 挂件,例如af::array bar = af::array(4,3,2, 1, f32);
. 所以我有一个尺寸为的af::dim4
对象,最多有 4 个对象,并且我有线性化数组。dims
bar
af::seq
foo
如何明确地获得表示例如第 2.nd 和 3.rd 行的索引foo
(即 的线性化版本bar
),即bar(af::seq(1,2), af::span, af::span, af::span)
?我在下面给出了一个小代码示例,它显示了我想要的。最后我也解释了为什么我想要这个。
Arrayfire 必须实现这样的逻辑才能访问元素,我发现了几个相关的类/函数,例如af::index, af::seqToDims, af::gen_indexing, af::array::operator()
- 但是我还想不出一个简单的方法。
我考虑过基本上重新实现operator()
, 以便它可以类似地工作,但不需要对数组对象的引用。但是,如果在 arrayfire 框架中有一种简单的方法,这可能是浪费精力。
背景:
我想这样做的原因是,arrayfire 不允许在与 GPU 后端链接时仅将数据存储在主内存(CPU 上下文)中。由于我有大量数据需要逐个处理并且 VRAM 非常有限,因此我想af::array
从始终驻留在主内存中的 stl 容器临时实例化 -objects。
当然,我知道我可以编写一些索引魔法来解决我的问题,但我想使用相当复杂af::seq
的对象,这可能会使索引逻辑的有效实现变得复杂。
c++ - 是否可以在 GPU 中运行一段纯 C++ 代码
我不太了解 OpenCL,但我知道 C/C++ API 要求程序员将 OpenCL 代码作为字符串提供。但最近我发现了不需要字符串代码来调用某些计算的ArrayFire库。我想知道它是如何工作的(它是开源的,但代码有点混乱)。是否可以使用调用任何已编译(例如 x86)代码的 OpenCL 后端编写并行代码,如下所示:
PS:我知道我对 99% 过于乐观
rust - 如何配置 `arrayfire-rust` 以使用 `cargo run`?
我正在按照arrayfire-rust 指南设置我自己的 Rust 项目。我可以cargo build
,但是当我cargo run
,我得到意想不到的结果。如果我直接从 shell 运行程序,我会得到预期的结果。
main.rs:
货运.toml
我已经向crate 提交了一个问题,维护人员正在调查。
julia - Arrayfire.jl 矢量叉积的可能解决方法?
我正在尝试使用 ArrayFire.jl 进行矢量数学运算,但 Arrayfire 中未实现矢量叉积函数。是否有一种解决方法可以使用 Julia 的 Arrayfire.jl 包装器以高效的方式计算它?由于设备和主机之间的所有数据传输,以天真的方式定义函数真的很慢,而且我对包装函数的了解不足以弄清楚如何解决这个问题。
arrayfire - 数组条件过滤 (ArrayFire)
我有两个数组 A(2D 图像)和 B(1d 强度值),并尝试制作第三个(2D)数组,其大小为 A,但仅包含 B 具有的 A 值。在不将数据移动到主机的情况下,正确的方法是什么?PS:试图找到一种方法来处理函数“区域”的结果(屏蔽某些区域并保留其他区域)。谢谢。
python - 使用 Arrayfire 和 Python 对多维数组进行一维 FFT
使用 pyfftw 库,可以轻松地在多维形状数组的单轴上执行一维 FFT,(M, 2**N)
而无需显式循环第零索引,如下所示:
afft = pyfftw.interfaces.numpy_fft.fft(a, axis=1)
.
切换到 arrayfire 以便我的代码可以在 GPU 上运行,我正在使用以下内容来做同样的事情(使用import arrayfire as af
):
虽然这是并行执行的,但它似乎不是最好的做事方式,也会让我的代码看起来很糟糕。
af.fft
有没有办法以与函数类似的方式pyfftw
或使用 numpy 切片的 arrayfire 版本来消除循环?
python - 使用 Arrayfire 在 Python 中更快地对复杂数组求幂
根据arrayfire pow 文档,af.pow()
目前仅支持真实数组的幂(和根...)。没有抛出错误,但我发现使用af.pow()
复杂输入会导致巨大的内存泄漏,特别是如果使用其他函数作为输入(例如,af.pow(af.ifft(array), 2)
)。
为了解决这个问题,我编写了complexPow
下面的函数。这似乎适用于没有内存泄漏的复杂数组,并且快速比较表明我的函数返回与和运算符complexPow
相同的值,例如。numpy.sqrt()
**
有没有比这更快的方法来进行并行元素取幂?我还没有找到,但害怕我在这里错过了一个技巧......