【问题标题】:Cuda GPU compile, I think it is not using GPU [closed]Cuda GPU编译,我认为它没有使用GPU [关闭]
【发布时间】:2021-02-15 04:19:06
【问题描述】:

我尝试学习 CUDA。太像了 C. 我尝试在我的 GPU 中运行一些代码。 但我认为这并不快,我认为这与我的代码有关。 我想只有我的 __global__ void func(ull* num1, ull* num2, ull* sum) 在 GPU 上工作。 这就是我要的。但这并不快。我该怎么办。

typedef uint64_t ull;

#define E1 1
#define E2 5000000000000000

__global__ void func(ull* num1, ull* num2, ull* sum)
{
    for (ull i = *num1; i <= *num2; i++)
    {
        sum[0] += i;
    }
}

int main()
{
    ull n1 = E1;
    ull n2 = E2;
    ull sum = 0;

    ull* d_n1;
    ull* d_n2;
    ull* d_sum;

    cudaMalloc(&d_n1, sizeof(ull));
    cudaMalloc(&d_n2, sizeof(ull));
    cudaMalloc(&d_sum, sizeof(ull));

    cudaMemcpy(d_n1, &n1, sizeof(ull), cudaMemcpyHostToDevice);
    cudaMemcpy(d_n2, &n2, sizeof(ull), cudaMemcpyHostToDevice);
    cudaMemcpy(d_sum, &sum, sizeof(ull), cudaMemcpyHostToDevice);

    func <<<1,1000>>> (d_n1, d_n2, d_sum);

    cudaMemcpy(&sum, d_sum, sizeof(ull), cudaMemcpyDeviceToHost);

    std::cout << sum << std::endl;

    cudaFree(d_n1);
    cudaFree(d_n2);


    return 0;
}

【问题讨论】:

    标签: c++ cuda nvidia gpgpu gpu


    【解决方案1】:

    GPU 和 CUDA 并不是“神奇地使程序快速运行”的技术。您必须并行化您的算法并使用多个线程。

    目前您的代码将在所有涉及的内核上的非常相同内存上执行非常相同的操作,这不仅浪费资源,而且会绊倒它自己的脚,因为所有指向同一位置的并发内存地址会相互损害。

    同时对数组求和也不是“微不足道”的事情。您必须拆分和合并任务,递归处理。

    您确实、绝对必须了解 GPU 的工作原理以及如何利用它们带来的好处。

    【讨论】:

    • 谢谢你,但你太粗鲁了:'(
    • @MuhammedYaşar:对不起,除了诚实我还能提供什么?您的问题的解决方案是适当地并行化您的求和操作。 StackOverflow 不是免费的代码编写服务。至于 GPU 上的并行求和,已经写了很多东西。我的意思是,如果我在 Google 中输入“GPU 并行总和”,我会得到:developer.nvidia.com/gpugems/gpugems3/part-vi-gpu-computing/…
    • 谢谢你是正确的:)
    猜你喜欢
    • 1970-01-01
    • 2013-09-19
    • 2013-08-03
    • 2015-11-12
    • 1970-01-01
    • 2021-08-09
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多