标签: opencl

ptx 汇编中 %f, %rd 是什么意思

你好,我是 CUDA 编程新手。我通过使用 OpenCL 构建程序获得了这段汇编代码。

我开始想知道这些数字和字符意味着什么。如%f7、%f11、%rd3、%r3、%f、%p。

我猜这rd可能指的是寄存器?数字是寄存器号?也许百分比只是将操作数写入 ptx 命令的一种方式(即 ld.shared.f32)?如果我的猜测是正确的,那么 %r3 是什么意思,它就像不同类别的寄存器吗?还有 %p 和 %f7。

先感谢您。

    ld.global.f32   %f7, [%rd16];
    st.shared.f32   [%rd2], %f7;
    bar.sync    0;
    ld.shared.f32   %f8, [%rd4];
    ld.shared.f32   %f9, [%rd3];
    fma.rn.f32  %f10, %f9, %f8, %f32;
    ld.shared.f32   %f11, [%rd4+32];
    ld.shared.f32   %f12, [%rd3+4];
    fma.rn.f32  %f13, %f12, %f11, %f10;
    ld.shared.f32   %f14, [%rd4+64];
    ld.shared.f32   %f15, [%rd3+8];
    fma.rn.f32  %f16, %f15, %f14, %f13;
    ld.shared.f32   %f17, [%rd4+96];
    ld.shared.f32   %f18, [%rd3+12];
    fma.rn.f32  %f19, %f18, %f17, %f16;
    ld.shared.f32   %f20, [%rd4+128];
    ld.shared.f32   %f21, [%rd3+16];
    fma.rn.f32  %f22, %f21, %f20, …
Run Code Online (Sandbox Code Playgroud)

assembly cpu-registers opencl ptx

0
推荐指数
1
解决办法
270
查看次数

英特尔 IPP 是否支持任何支持 OpenGL 的 GPU?

正如这里所说,OpenCV 使用 IPP,而 IPP 使用 GPU:

\n\n
\n

原来 OpenCV 正在使用 IPP,而 IPP 本身现在也可以使用 GPU\n。

\n\n

以防万一其他人在 google 上搜索“opencv gpu 速度较慢”并且不知道\n IPP GPU 支持;)

\n
\n\n

另外,我发现了这个

\n\n
\n

使用Intel\xc2\xae IPP异步优化增强现实管道

\n\n

使用 Intel\xc2\xae GPU优化 Total Immersion 的 D\'Fusion* 增强现实管道的性能和功耗

\n
\n\n

而且没有一个关键字:OpenCL、OpenACC、CUDA、nVidia,...

\n\n

与GPU相关的关键字只有一个:OpenGL

\n\n

这是否意味着Intel IPP仅支持Intel GPU?或者 Intel IPP 支持任何支持 OpenGL 的 GPU(nVidia GeForce、AMD Radeon)?

\n

opengl opencv opencl intel-ipp

-1
推荐指数
1
解决办法
874
查看次数

CPU 哈希比 GPU 快?

我想生成一个随机数,哈希,与SHA256我的GPU使用OpenCL基本代码(而不是散列那些预先给定的纯文本,它散列随机数)。
我让所有的散列都在我的 GPU 上工作,但有一个问题:
使用 OpenCL 时,每秒完成的散列数量会降低吗?

是的,您没听错,目前仅使用 CPU 比仅使用 GPU 更快。
我的 GPU 仅~10%在我的 CPU 运行时运行~100%

我的问题是:这怎么可能,更重要的是,我该如何解决?

这是我用于生成 a 的代码Pseudo-Random Number(在两次运行之间根本不会改变):

long Miner::Rand() {
    std::mt19937 rng;
    // initialize the random number generator with time-dependent seed
    uint64_t timeSeed = std::chrono::high_resolution_clock::now().time_since_epoch().count();
    std::seed_seq ss{ uint32_t(timeSeed & 0xffffffff), uint32_t(timeSeed >> 32) };
    rng.seed(ss);
    // initialize a uniform distribution between 0 and 1
    std::uniform_real_distribution<double> unif(0, 1);
    double rnd = unif(rng);
    return floor(99999999 * …
Run Code Online (Sandbox Code Playgroud)

c++ hash opencl

-1
推荐指数
1
解决办法
4496
查看次数

同时在所有 GPU 核心上为每个 GPU 核心运行一个程序实例

我们有数百万个小文件要由某些程序处理。

精确的计划并不重要,变化与精确的任务。然而,这些是较小的 C++ 程序,我们有源代码,但它们本质上是不可并行的。

使用单个平均 CPU 内核(Intel i7 系列)时,处理一个小文件大约需要 15 秒。并且在程序运行时它需要大约 200 MB 的 RAM。

我们希望在 GPU 上并行化,并在每个 GPU 核心(例如 Cuda 核心)上运行一个程序实例。因此,如果 GPU 有 3000 个 CUDA 核心,那么我们希望并行运行 3000 个实例。如果可能,我们希望使用像 OpenCL 这样的通用框架(而不是 Cuda,但如果在这种情况下需要 Cuda,那将是可以接受的)。

现在我们正在尝试评估这是否可行(我们在 GPGPU 编程方面还没有太多经验)。我们想象的主要问题是记忆。如果我们并行运行 3000 个实例,每个实例需要 200 MB VRAM,那么我们需要 600 GB 内存。

我们主要考虑的显卡是高端 Geforce 卡,通常具有 8 GB 到 11 GB 的内存。我们有每个机箱/主板有 4 个卡的 GPU 工作站,我们一开始想用它(但后来也可能在其他 GPU 系统上,因此我们更喜欢像 OpenCL 这样的通用框架)。

有哪些方法可以解决这个问题?

parallel-processing cuda gpgpu opencl

-1
推荐指数
1
解决办法
358
查看次数

压缩列存储中的稀疏矩阵与列向量的乘法

我必须将压缩列存储中的稀疏矩阵与列向量相乘(我必须在开放式cl中并行化它)。我在互联网上进行了搜索。花了很多天但找不到任何东西。(我被允许搜索互联网因为我必须将其转换为并行)。但我只能找到压缩行存储的代码。

spmv_csr_serial(const int num_rows ,
                const int * ptr ,
                const int * indices ,
                const float * data ,
                const float * x,
                float * y)
{
    for(int row = 0; i < num_rows; i++){
        float dot = 0;
        int row_start = ptr[row];
        int row_end = ptr[row+1];

        for (int jj = row_start; jj < row_end; jj++)
            dot += data[jj] * x[indices[jj]];

        y[row] += dot;
    }
}
Run Code Online (Sandbox Code Playgroud)

压缩列存储没有行指针。那么如何将它与向量相乘呢?我只需要串行代码,然后我自己将其转换为并行代码。

这是我用于该项目的 OpenCL 内核

enter code here
__kernel void mykernel(__global const int* val,__global …
Run Code Online (Sandbox Code Playgroud)

c opencl

-2
推荐指数
1
解决办法
4676
查看次数

OpenCL是OpenGL和DirectX的快速替代品吗?

我正在制作一个小型Java游戏库,我想制作更多面向Java的绘图的绘图代码,而不是调用一些C++方法来绘制API.无论如何,我担心它可能比其他图形API慢.那么这将是一个不错的选择吗?另一个问题是我找不到有用的OpenCL教程(我需要先学习它),有人知道吗?

java opengl directx opencl

-2
推荐指数
1
解决办法
1022
查看次数

为什么GPU代码中不允许执行系统命令?

我尝试在GPU代码(OpenCL/C++内核)中执行系统命令

system("ngspice");
Run Code Online (Sandbox Code Playgroud)

但是我收到了这条ERROR消息:CL_INVALID_BINARY.

我发现一些问题,说它不允许在内核中调用外部函数!

OPENCL: OpenCL - 是否可以从内核中调用另一个函数?

CUDA: 不支持CUDA外部呼叫

如果我没错,那是OPENCL/CUDA限制之一:

OpenCL:https://www.khronos.org/registry/cl/sdk/1.0/docs/man/xhtml/restrictions.html

CUDA:http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#functions

我对吗?这种限制背后的原因是什么?

c++ opencl

-4
推荐指数
1
解决办法
237
查看次数

用于双数组数学的C#OpenCL GPU实现

如何使这个函数的for循环使用GPU与OpenCL?

    public static double[] Calculate(double[] num, int period)
    {          
        var final = new double[num.Length];
        double sum = num[0];
        double coeff = 2.0 / (1.0 + period);

        for (int i = 0; i < num.Length; i++)
        {
            sum += coeff * (num[i] - sum);
            final[i] = sum;
        }

        return final;
    }
Run Code Online (Sandbox Code Playgroud)

.net c# gpu opencl

-4
推荐指数
2
解决办法
3182
查看次数

标签 统计

opencl ×8

c++ ×2

opengl ×2

.net ×1

assembly ×1

c ×1

c# ×1

cpu-registers ×1

cuda ×1

directx ×1

gpgpu ×1

gpu ×1

hash ×1

intel-ipp ×1

java ×1

opencv ×1

parallel-processing ×1

ptx ×1