问题标签 [vexcl]

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 回答
10898 浏览

c++ - VexCL、Thrust 和 Boost.Compute 的区别

通过对这些库的粗略了解,它们看起来非常相似。我知道 VexCL 和 Boost.Compute 使用 OpenCl 作为后端(尽管 v1.0 版本的 VexCL 也支持 CUDA 作为后端),而 Thrust 使用 CUDA。除了不同的后端,它们之间有什么区别。

具体来说,他们解决了哪些问题空间以及我为什么要使用其中一个。

此外,在推力常见问题解答中指出

支持 OpenCL 的主要障碍是缺乏支持 C++ 模板的 OpenCL 编译器和运行时

如果是这样,VexCL 和 Boost.Compute 怎么可能存在。

0 投票
1 回答
472 浏览

c++ - 使用 VexCL“编译二进制文件”

我想制作一个“将分发给客户”的程序,所以我想保护我的内核代码免受黑客攻击“有人告诉我 AMD 驱动程序以某种方式将内核源代码放入二进制文件中,因此黑客可以使用AMD 设备”

因为我还没有使用 VexCL 的经验,所以只分发二进制文件的正确编译行是什么

例如对于 CUDA,我可以输入: nvcc -gencode arch=compute_10,code=sm_10 myfile.cu -o myexec

VexCL 中的等价物是什么?

VexCL 也可以在 Mac OS 上运行吗?哪个 IDE?(这是一个未来的任务,因为我之前没有使用 Mac OS 的经验)

我以前使用 OpenCL 的经验是使用 STDCL 库“但它在 Windows 上存在问题,不支持 Mac”

0 投票
1 回答
756 浏览

c++ - VexCL 中的密集矩阵向量乘法

VexCL 似乎是一个非常有吸引力的 gpu 编程库。

不幸的是,它是一个非常年轻的图书馆,那里的信息很少。我一直在寻找如何执行矩阵向量乘法,但我发现的唯一矩阵表示是 vex::SpMat,它包含一个稀疏矩阵。

如果矩阵是密集的,那么稀疏表示通常对计算的效率较低。

我所有的矩阵都是密集的,我想知道如何在 VexCL 中有效地执行它。

0 投票
2 回答
240 浏览

c++ - 使用 odeint 和 VexCL 的 Lorenz 示例在不同的设备上产生不同的结果

更新:

我已经在其他系统上运行了这个示例。在 Intel i7-3630QM、Intel HD4000 和 Radeon HD 7630M 上,所有结果都相同。对于 i7-4700MQ / 4800MQ,当使用 OpenCL 或 64 位 gcc 与 32 位 gcc 时,CPU 的结果是不同的。这是默认情况下使用 SSE 的 64 位 gcc 和 OpenCl 以及使用 387 数学的 32 位 gcc 的结果,当设置 -mfpmath=387 时,至少 64 位 gcc 会产生相同的结果。所以我必须阅读更多内容并尝试使用 x86 浮点。谢谢大家的答案。


我已经针对不同 OpenCL 设备上的十个系统运行了“编程 CUDA 和 OpenCL:使用现代 C++ 库的案例研究”中的 Lorenz 系统示例,并且得到了不同的结果:

  1. Quadro K1100M (NVIDIA CUDA)

    r => xyz
    0.100000 => -0.000000000000000000000000 5.64444444444444444444444444444444444444444444444452
    11.1888890
    =
    > 5.212534 5.212534 5.212530

    22.277779 => 3.178553 2.579687 17.946903
    27.822224 => 5.008720 7.753564 16.377680
    33.366669 => -13.381100 -15.252210 36.107887
    38.911114 => 4.256534 6.813675 ​​23.838787 44.455555
    => -11.083726 0.691549 53.632290 50.000000
    => -8.624105 -15.728293 32.516193

  2. Intel(R) HD Graphics 4600 (Intel(R) OpenCL)

    R => xyz
    0.100000 => -0.000000 -0.000000 0.000000
    5.644444 => -3.519253 -3.519250 4.644451
    11.188890 => 5.212531 5.212538 10.188890
    16.733334 => 6.477320 6.477326 15.733339

    22.277779 => 7.246771 7.398651 20.735369
    27.822224 => -6.295782 -10.615027 14.646572
    33.366669 => -4.132523 -7.773201 14.292910
    38.911114 => 14.183139 19.582197 37.943520 44.455555
    => -3.129006 7.564254 45.736408 50.000000
    => -9.146419 -17.006729 32.976696

  3. Intel(R) Core(TM) i7-4800MQ CPU @ 2.70GHz (Intel(R) OpenCL)

    R => xyz
    0.100000 => -0.000000 -0.000000 0.000000
    5.644444 => -3.519254 -3.519251 4.644453
    11.188890 => 5.212513 5.212507 10.188900
    16.733334 => 6.477303 6.477296 15.733332

    22.277779 => -8.295195 -8.198518 22.271002
    27.822224 => -4.329878 -4.022876 22.573458
    33.366669 => 9.702943 3.997370 38.659538
    38.911114 => 16.105495 14.401397 48.537579 44.455555
    => -12.551083 -9.239071 49.378693 50.000000
    => 7.377638 3.447747 47.542763

如您所见,三个设备在 R=16.733334 的值上达成一致,然后开始出现分歧。

我在没有 VexCL 的情况下使用 odeint 运行了相同的区域,并获得了接近 CPU 运行时 OpenCL 的结果的结果:

香草味:

示例代码可以在这里找到:https ://github.com/ddemidov/gpgpu_with_modern_cpp/blob/master/src/lorenz_ensemble/vexcl_lorenz_ensemble.cpp

我不确定我在这里看到了什么?由于 CPU 结果彼此如此接近,这看起来像是 GPU 的问题,但由于我是 OpenCL 新手,我需要一些指示如何找到其根本原因。

0 投票
1 回答
218 浏览

c++ - VexCL:vexcl 向量中最大值的索引

如何找到 VexCL 向量中最大值的索引?我可以找到最大值:

哪个给出m = 5但有没有办法找到最大值的索引,ind = 3

0 投票
2 回答
264 浏览

c++ - VexCL:计算向量中高于最小值的值的数量

在 C++ 中使用 VexCL 我试图计算向量中高于某个最小值的所有值,我想在设备上执行此计数。默认的 Reductors 仅提供 MIN、MAX 和 SUM 的方法,示例并没有非常清楚地显示如何执行这样的操作。此代码很慢,因为它可能在主机而不是设备上执行:

我正在使用的向量将包含大量值,比如数百万个并且大部分是零。除了高于最小值的值的数量外,我还想检索包含这些值的向量 ID 列表。这可能吗?

0 投票
1 回答
306 浏览

c++ - 结构的 VexCL 向量?

所以我知道可以在 OpenCL 中使用自定义类型。但我无法将它们与 VexCL 一起使用。创建结构的设备向量工作正常,但我无法执行任何操作。

由于我没有找到任何使用带有 VexCL 的自定义类型的示例,我的问题是这是否可能?提前致谢。

0 投票
1 回答
67 浏览

opencl - VexCL 重塑行为异常

我有以下代码片段测试 VexCL 重塑功能:

它所做的只是打印小于 n 的偶数,后跟小于 n 的奇数。例如,当 n=10 时,它会打印:

但是当 n 变大时,事情就会变得奇怪。例如,当 n=10000 时,前 50 个打印的整数是:

62 之后就开始出错了。在输出的后面还有其他差异,一些偶数出现在奇数之后。谁能解释为什么会这样?如果重要的话,我使用的上下文是“GeForce GT 650M (Apple)”。

0 投票
1 回答
58 浏览

c++ - Boost - Odeint:什么是使用 VexCL 的并发以及如何改进它?

我的问题与教程有关,该教程解释了如何使用 VexCL 实现 boost::odeint 以实现并发(完整的代码可以在这里找到)。

下图展示了我对 ODEINT 迭代的看法: 在此处输入图像描述

现在我问自己,在 VexCL中究竟/或它的哪一部分是并行化的?

我的印象是,ODE 部分是一项单独的任务,因为在给定示例中,ODE 的所有方程都在一个块内。也许集成部分在三个并行任务中运行。这导致了四个任务,其中(我认为)ODE 任务是一个瓶颈(因为方程可能变得非常大)。

如果这是正确的,我想知道如何提高这种并发性。我认为将 ODE 和 INT 水平组合是有意义的。这导致了 3 个任务,每个任务都无法在此级别进一步减少。