问题标签 [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 投票
0 回答
386 浏览

python - 带有python冻结的arrayfire

我刚刚从 accleeyes 下载了 Arrayfire 库。Arrayfire 是一个基于 CUDA 的库,我在 python 中使用它。我尝试在 python 中运行最简单的代码:

提示挂起,我的 cpu 使用率约为 50%(我有一个双核 cpu)。当我运行提供的示例时也会发生同样的事情。阻止这种情况的唯一方法是从进程管理器结束进程。出了什么问题?有人可以帮我吗?

0 投票
2 回答
291 浏览

python - 根据 NaN 检查 Arrayfire 数组

我在 Python 上使用 Arrayfire,但我不能使用 af.sum() 函数,因为我的输入数组中有 NaN,它会将 NAN 作为总和返回。

由于速度问题,不能使用 numpy.nansum/numpy.nan_to_num 。

我只需要一种方法将这些 NaN 转换为 arrayfire 中的浮点零。

0 投票
1 回答
4618 浏览

cuda - ArrayFire 与原始 CUDA 编程?

我对 GPU 编程很陌生,但由于我有一项计算密集型任务,我转向 GPU 以获得可能的性能提升。

我尝试用ArrayFire 免费版重写我的程序。它确实比我启用多线程的 CPU 例程快,但没有达到我预期的程度(即 < 100% 加速),并且返回的结果不太正确(与 CPU 例程相比,误差 < 1%,假设CPU 例程的结果是正确的)。

我的任务主要是对大型矩阵(300MB-500MB 大小)进行元素方式的 float-32 数学运算,很少有 if-thens/switch-cases 等。我猜性能瓶颈可能是 CPU 和 GPU 内存之间的带宽,因为有大量数据读取等。我测试的 GPU 是 GeForce 580GTX,具有 3GB 显存。

如果我编写原始 CUDA 代码(使用 CUBLAS 等和平均优化)而不是使用 ArrayFire 来完成我的任务,是否还有很大的优化空间?我阅读了一些 NVIDIA 优化指南;似乎有一些内存访问技巧可以加快数据访问速度并减少银行冲突。ArrayFire 是否自动使用这些通用技巧?

0 投票
0 回答
171 浏览

cmake - ArrayFire 与 VTK,...使用 CMake 编译它们?

我目前正在用 C++ 编写代码,该代码从目录中读取一组 3D .vtk 文件,并将 3D 点存储到 ArrayFire 数组中,以便我可以实现 PCA。

问题是我需要用cmake编译VTK。但是当我这样做时,arrayFire 会给出错误 LNK2019 和错误 LNK2001。

我在 MSDN 中检查了这个错误,但我仍然不清楚如何解决它。

有谁知道如何将 ArrayFire 添加到我的 CMakefile 中,以便我可以和平地构建 VTK 和 arrayFire?

谢谢。

0 投票
1 回答
300 浏览

c++-cli - 在托管代码中传递非托管数据?

我正在构建一个 Windows 窗体应用程序,该应用程序使用 ArrayFire array对象控制 3D 体积渲染。是不受管理的array。在表单构造函数中,我加载并渲染了体积。

我有一个Trackbar控制音量的不透明度和一个相应的滚动事件处理程序。但是,我不知道如何将音量传递arrayTrackbar滚动事件处理程序,以便重新渲染音量。

我不能将卷array作为表单的属性,因为显然托管类不能具有非托管属性。

最好的方法是什么?

0 投票
1 回答
585 浏览

image-processing - ArrayFire 在 NVIDIA Fermi 上做卷积时内存不足?

我正在尝试使用 ArrayFire 对9000x9000 像素 3 通道图像执行卷积,大约为 75MB。我的 GPU 是具有 1536MB RAM 的 NVIDIA GTX480。我希望 ArrayFire 使用 75MB 的输入图像和大约 75MB 的输出图像。但是,ArrayFire 运行了一段时间,最终说它内存不足:

在具有 1536MB 内存的 GPU 上对 75mb 图像执行卷积时,ArrayFire 会耗尽内存。为什么会发生这种情况,我该怎么办?


代码:


系统配置及注意事项:

  • 阵列火 1.9
  • Ubuntu 10.04
  • CUDA 5.0
  • NVIDIA GTX480 (Fermi) GPU,拥有 1536MB 内存
  • helloworld和其他 ArrayFire 示例正常工作
  • ArrayFire 的卷积对较小的图像(例如 512x512 像素)没有问题
0 投票
1 回答
143 浏览

parallel-processing - 在 ArrayFire 中使用带有 double2 数组的 seq 时降级为 float2

我正在使用以下利用 ArrayFire 库的测试代码。

一切都编译并正确运行。

但是,然后我将上述功能更改为

我收到以下运行时错误消息

src/gena/gtypes.cpp:112:错误:从 cuComplex 类型的数组请求 cuDoubleComplex

如果,在另一边,我改变线

一切都再次运行良好。似乎与使用seq. seq(0,N-1,f64)如果我使用类似的东西(我什至不知道 ArrayFire 是否允许),上述问题不会消失。

我怎样才能继续double2处理并避免降级float2

0 投票
0 回答
578 浏览

c++ - Largest eigenvalues (and corresponding eigenvectors) in ArrayFire

Given a square matrix A, I need to obtain a diagonal matrix D that contains A's 5 largest magnitude eigenvalues and a matrix V whose columns are the corresponding eigenvectors. In Matlab the code is [V,D] = eigs(A,5). Is there a similar function in ArrayFire C++?

In ArrayFire I use af::eigen(Values,Vectors,A). What is the order of elements in Values? In one test I had the elements of Values sorted in the order of increasing magnitude, however in the other case Values was sorted in the order of decreasing magnitude. Essentially, I need to extract 5 eigenvectors that correspond to the largest magnitude eigenvalues. Do I have to use the sort function to achieve this?

UPDATE Here's a simple example:

0 投票
0 回答
136 浏览

arrayfire - gfor结构如何分配cuda线程?

谁能告诉我gfor结构是如何分配CUDA线程的?众所周知,在 Arrayfire 中,我们可以使用 gfor 进行并行计算。但是,CUDA的线程是有限的,所以我想知道,如何改进我的Arrayfire代码,我是否应该根据GPU硬件架构重新设计gfor结构。

0 投票
1 回答
653 浏览

cuda - ArrayFire 中的时序

我正在尝试使用 ArrayFire 评估简单的 GPU 元素矩阵运算的性能。

特别是,考虑到

我想执行以下指令的时间

我正在使用两种方法。第一个是

第二个是定义以下函数

然后打电话

我得到了以下结果:

(N1,N2)=(256,256) 第一种方法=0.0456ms 第二种方法=0.264ms

(N1,N2)=(512,512) 第一种方法=0.0451ms 第二种方法=0.264ms

(N1,N2)=(1024,1024) 第一种方法=0.0457ms 第二种方法=0.263ms

(N1,N2)=(2048,2048) 第一种方法=0.127ms 第二种方法=0.265ms

我还根据以下“手动编码”版本的表达式使用

获得以下

(N1,N2)=(256,256) 0.0897ms

(N1,N2)=(512,512) 0.339ms

(N1,N2)=(1024,1024) 1.3ms

(N1,N2)=(2048,2048) 5.37ms

奇怪的是

  1. 两种方法的结果是不同的。这可能是由于函数调用开销造成的,但无论如何,这种开销在(N1,N2)=(2048,2048).
  2. 这两种方法的结果几乎与矩阵大小无关。
  3. 与表达式的“手动编码”版本相比,结果有很大不同(我假设库应该在生产力和性能之间进行权衡)。

请注意,在任何操作之前,我正在使用代码预热 GPU

有人可以帮我解释上述结果吗?谢谢。

按照 Pavan 的回答进行编辑

第一种方法修改为

第二种方法修改为

不过,现在的时机是

而且我仍然有不同的时间并且独立于向量大小。

如果我将第一种方法修改为

即,对于第一种方法,我“增加”了 GPU 预热阶段,我获得了,

这对我来说似乎更合理,因为时间取决于数据大小并且更接近手动编码。

第二次编辑 总结一下:我已经解释了答案和评论,对于第一种方法,我正在使用

我正在获得以下(新)结果: