问题标签 [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.
python - 带有python冻结的arrayfire
我刚刚从 accleeyes 下载了 Arrayfire 库。Arrayfire 是一个基于 CUDA 的库,我在 python 中使用它。我尝试在 python 中运行最简单的代码:
提示挂起,我的 cpu 使用率约为 50%(我有一个双核 cpu)。当我运行提供的示例时也会发生同样的事情。阻止这种情况的唯一方法是从进程管理器结束进程。出了什么问题?有人可以帮我吗?
python - 根据 NaN 检查 Arrayfire 数组
我在 Python 上使用 Arrayfire,但我不能使用 af.sum() 函数,因为我的输入数组中有 NaN,它会将 NAN 作为总和返回。
由于速度问题,不能使用 numpy.nansum/numpy.nan_to_num 。
我只需要一种方法将这些 NaN 转换为 arrayfire 中的浮点零。
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 是否自动使用这些通用技巧?
cmake - ArrayFire 与 VTK,...使用 CMake 编译它们?
我目前正在用 C++ 编写代码,该代码从目录中读取一组 3D .vtk 文件,并将 3D 点存储到 ArrayFire 数组中,以便我可以实现 PCA。
问题是我需要用cmake编译VTK。但是当我这样做时,arrayFire 会给出错误 LNK2019 和错误 LNK2001。
我在 MSDN 中检查了这个错误,但我仍然不清楚如何解决它。
有谁知道如何将 ArrayFire 添加到我的 CMakefile 中,以便我可以和平地构建 VTK 和 arrayFire?
谢谢。
c++-cli - 在托管代码中传递非托管数据?
我正在构建一个 Windows 窗体应用程序,该应用程序使用 ArrayFire array
对象控制 3D 体积渲染。是不受管理的array
。在表单构造函数中,我加载并渲染了体积。
我有一个Trackbar
控制音量的不透明度和一个相应的滚动事件处理程序。但是,我不知道如何将音量传递array
给Trackbar
滚动事件处理程序,以便重新渲染音量。
我不能将卷array
作为表单的属性,因为显然托管类不能具有非托管属性。
最好的方法是什么?
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 像素)没有问题
parallel-processing - 在 ArrayFire 中使用带有 double2 数组的 seq 时降级为 float2
我正在使用以下利用 ArrayFire 库的测试代码。
一切都编译并正确运行。
但是,然后我将上述功能更改为
我收到以下运行时错误消息
src/gena/gtypes.cpp:112:错误:从 cuComplex 类型的数组请求 cuDoubleComplex
如果,在另一边,我改变线
至
一切都再次运行良好。似乎与使用seq
. seq(0,N-1,f64)
如果我使用类似的东西(我什至不知道 ArrayFire 是否允许),上述问题不会消失。
我怎样才能继续double2
处理并避免降级float2
?
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:
arrayfire - gfor结构如何分配cuda线程?
谁能告诉我gfor结构是如何分配CUDA线程的?众所周知,在 Arrayfire 中,我们可以使用 gfor 进行并行计算。但是,CUDA的线程是有限的,所以我想知道,如何改进我的Arrayfire代码,我是否应该根据GPU硬件架构重新设计gfor结构。
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
奇怪的是
- 两种方法的结果是不同的。这可能是由于函数调用开销造成的,但无论如何,这种开销在
(N1,N2)=(2048,2048)
. - 这两种方法的结果几乎与矩阵大小无关。
- 与表达式的“手动编码”版本相比,结果有很大不同(我假设库应该在生产力和性能之间进行权衡)。
请注意,在任何操作之前,我正在使用代码预热 GPU
有人可以帮我解释上述结果吗?谢谢。
按照 Pavan 的回答进行编辑
第一种方法修改为
第二种方法修改为
不过,现在的时机是
而且我仍然有不同的时间并且独立于向量大小。
如果我将第一种方法修改为
即,对于第一种方法,我“增加”了 GPU 预热阶段,我获得了,
这对我来说似乎更合理,因为时间取决于数据大小并且更接近手动编码。
第二次编辑 总结一下:我已经解释了答案和评论,对于第一种方法,我正在使用
我正在获得以下(新)结果: