首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CUDA Stride函数不起作用

CUDA Stride函数不起作用
EN

Stack Overflow用户
提问于 2017-07-16 02:57:37
回答 1查看 116关注 0票数 0

以下代码不起作用。我的期望是在内核函数add()被调用之后,所有的yi都有3。但是如果N >= (1Add 24) - 255,那么所有的yi都是2(就好像内核函数<< ()没有运行一样)。

代码语言:javascript
复制
#include <iostream>
__global__ void add(int n, int *x, int *y) {
    int index = blockIdx.x * blockDim.x + threadIdx.x;
    int stride = blockDim.x * gridDim.x;
    for (int i = index; i < n; i += stride) y[i] = x[i] + y[i];
}
int main() {
    int *x, *y, N = (1 << 24) - 255; // 255 wrong / 256 ok
    cudaMallocManaged(&x, N * sizeof(int));
    cudaMallocManaged(&y, N * sizeof(int));
    for (int i = 0; i < N; ++i) {x[i] = 1; y[i] = 2;}
    int sz = 256;
    dim3 blockDim(sz,1,1);
    dim3 gridDim((N+sz-1)/sz,1,1);
    add<<<gridDim, blockDim>>>(N, x, y);
    cudaDeviceSynchronize();
    for (int i = 0; i < N; ++i) if (y[i]!=3) std::cout << "error" << std::endl;
    cudaFree(x);
    cudaFree(y);
    return 0;
}

图形处理器是GTX1080Ti,有以下限制:

代码语言:javascript
复制
Maximum number of threads per block:           1024
Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
Max dimension size of a grid size    (x,y,z): (2147483647, 65535, 65535)

机器是X86_64 Linux Ubuntu16.04。我是不是做错了什么?请帮帮忙。

EN

回答 1

Stack Overflow用户

发布于 2017-07-16 20:29:23

在编译这篇文章时,我没有指定-arch=。因此,我最终使用了-arch=sm_20,这是默认值。我使用了-arch=sm_60,现在它正在工作,因为对于计算能力3或更高的计算能力,网格大小的x维度是2147483647。

http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#compute-capabilities

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45121713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档