因此,我开始对CUDA感到沮丧,以至于我决定编写我能做的最简单的代码,只是为了了解我的方向。 但是似乎有些事情在我脑海中浮现。 在我的代码中,我只是添加两个数组,然后将它们存储在第三个数组中,如下所示:

#include <stdio.h>
#include <stdlib.h>

__global__ void add(int* these, int* those, int* answers)
{
    int tid = blockIdx.x;
    answers[tid] = these[tid] + those[tid];
}

int main()
{
    int these[50];
    int those[50];
    int answers[50];

    int *devthese;
    int *devthose;
    int *devanswers;

    cudaMalloc((void**)&devthese, 50 * sizeof(int));
    cudaMalloc((void**)&devthose, 50 * sizeof(int));
    cudaMalloc((void**)&devanswers, 50 * sizeof(int));


    int i;
    for(i = 0; i < 50; i++)
    {
        these[i] = i;
        those[i] = 2 * i;
    }

    cudaMemcpy(devthese, these, 50 * sizeof(int), cudaMemcpyHostToDevice);
    cudaMemcpy(devthose, those, 50 * sizeof(int), cudaMemcpyHostToDevice);
    add<<<50,1>>>(devthese, devthose, devanswers);

    cudaMemcpy(answers, devanswers, 50 * sizeof(int), cudaMemcpyDeviceToHost);
    for(i = 0; i < 50; i++)
    {
        fprintf(stderr,"%i\n",answers[i]);
    }
    return 0;
}

但是,正在打印的int值并不遵循3的倍数的顺序,这正是我所期望的。 谁能解释出什么问题了?

===============>>#1 票数:1

从评论中可以看出,问题显然与编译期间使用不正确的目标体系结构有关,导致可执行文件无法在OP的GPU上运行。

已添加此社区Wiki答案,以使它脱离未答复的队列。 如果/当OP返回并提供更完整的答案时,可以将其删除。

  ask by Chris Phillips translate from so

未解决问题?本站智能推荐:

1回复

为什么我的CUDA内核返回旧值?

几乎就是在这个问题上撕掉我的头发。 我有一个CUDA内核,可以对存储在3D数组中的数据进行一些数学计算。 在测试时,我曾经为数组分配了一些值(非零)并观察结果。 我注释掉了这些线,但结果仍然相同。 就好像它完全无视我正在做一个memset到0的事实。 当我在Debug中执行它时
1回复

Cuda内核返回向量

我有一个单词列表,我的目标是在一个非常长的短语中匹配每个单词。 我在匹配每个单词方面没有问题,我唯一的问题是返回包含每个匹配信息的结构向量。 在代码中: 我试过Thrust库但没有任何成功,你能建议我任何解决方案吗? 非常感谢你。
1回复

CUDA - 计算单个值的多个内核

嘿,我正在尝试编写一个内核,基本上在C中执行以下操作 目前我在内核中有这个,但它没有提供正确的值。 用于调用内核的代码是 我认为每个内核都在计算部分和,但最后的除法语句没有考虑每个线程的累计值。 每个内核都为d_sum生成自己的最终值? 有谁知道我怎样才能以有效的
2回复

如何从CUDA内核函数返回单个变量?

我有一个CUDA搜索功能,可以计算一个变量。 我怎么能把它还给我。 对于这两行我得到这个错误:错误:类型“long”的参数与类型“const void *”的参数不兼容
3回复

需要优化的CUDA内核

嗨,我最近有一个CUDA内核需要优化。 这是原始的CUDA内核: 这里的基本问题是内存合并和线程分歧的困境。 原始代码在主列中处理数组,因此它跨越了内存访问模式,但是没有差异。 我可以将其更改为行优先,这又有线程发散的问题。 那么,有谁有更好的主意如何最大化性能呢?
4回复

从cuda内核打印

我正在编写一个cuda程序,并尝试使用printf函数在cuda内核中打印一些内容。 但是当我编译程序时,我收到了一个错误 我正在使用具有大于2.0的计算能力的卡GTX 560 ti,当我从cuda内核中搜索了一些关于打印的内容时,我还看到我需要将编译器从sm_10更改为sm_2.0以
1回复

启动多个CUDA内核是否涉及返回每个内核的主机? [重复]

这个问题在这里已有答案: cuda内核是同步还是异步 3个答案 如果我在相同的上下文中启动多个CUDA内核,并且内核之间存在依赖关系(输入中的第一个输出到第二个内容等),控制是否会在每个内核完成执行后返回主机? 如果没有,您能否简要描述“内核入队”机制如何在CUD
2回复

CUDA - 多次调用内核

我正在努力编写一个CUDA程序。 我有一个大约524k浮点值(1.0)的数组,我正在使用简化技术来添加所有值。 如果我只想运行一次,问题就可以解决了,但我真的想多次运行内核,这样我最终可以总计超过10亿个值。 我在524k块中执行此操作的原因是,当我在gpu上超过100万时,我总是得到
1回复

错误:期望CUDA内核代码上的“)”

嗨,我在CUDA C中编写了一些使用许多内核的代码。 kernel.cu和main.cu如下图所示。 kernel.cu :(几乎所有内容都在底部的主机代码中注释掉) main.cu(我还没有使用support.h) / * ** * ** * ** * ** * ** *
1回复

cuda内核的配置参数

我必须使用cuda程序添加两个N x N平方矩阵。 本书要求为案例编写内核的配置参数: (a)每个线程必须只处理1矩阵元素 (b)每个线程产生一个输出矩阵行 (c)每个线程产生一个输出矩阵列 我对上述方案的解决方案: (一种) (b)中 (C)