【问题标题】:Cuda: An illegal instruction was encountered when accessing structureCuda:访问结构时遇到非法指令
【发布时间】:2015-10-25 13:40:32
【问题描述】:

如果我运行以下程序,我会得到“遇到非法指令”。该程序访问一个无符号长整数数组。

错误:../file.cu(43):CUDA 运行时 API 错误 73:遇到非法指令。

GPU:GTX 760

Cuda 6.5 (V6.5.16)。该错误仅在以发布模式(-O3 优化标志)运行代码时发生。

代码:

#include <stdio.h>
#include <cuda_runtime.h>

typedef unsigned long long ul;

static inline void __checkCudaErrors(cudaError err, const char *file, const int line )
{
    if(cudaSuccess != err){
        fprintf(stderr, "%s(%i) : CUDA Runtime API error %d: %s.\n",file, line, (int)err, cudaGetErrorString( err ) );
        exit(-1);
    }
}
#define checkCuda(err)  __checkCudaErrors (err, __FILE__, __LINE__)


__global__ void testReadOnly(ul *A)
{
    int i = threadIdx.x/32;
    A=A+(32*i);
    atomicCAS(A+threadIdx.x, 0ull, 0ull);
}
int main(void)
{
    ul *d_A = NULL;
    int size = 32*sizeof(ul);
    checkCuda(cudaMalloc((void **)&d_A, size));
    checkCuda(cudaMemset(d_A, (int)0, size));
    testReadOnly<<<1, 32>>>(d_A);
    checkCuda(cudaDeviceSynchronize());
    checkCuda(cudaFree(d_A));
    checkCuda(cudaDeviceReset());
    return 0;
}

PTX 代码:_Z12testReadOnlyPy:

MOV R1, c[0x0][0x44]
S2R R0, SR_TID.X
MOV R4, c[0x0][0x140]
LOP.AND R3, R0, -0x20
MOV R8, RZ
IADD R2.CC, R3, R0
ISET.LT.AND R0, R3, RZ, PT

IADD.X R0, R0, RZ
SHL R3, R0, 0x3
MOV R9, RZ
IMAD.U32.U32 R4.CC, R2, 0x8, R4
IMAD.U32.U32.HI R0, R2, 0x8, R3
IADD.X R5, R0, c[0x0][0x144]
ATOM.E.CAS.U64 RZ, [R4], R8, RZ

【问题讨论】:

  • 您使用的是什么 CUDA 和主机编译器版本?这在我看来确实像是一个编译器错误
  • 我试过atomicCAS(((ul*)(A+i)-&gt;data)+threadIdx.x, 0ull, 0ull);,错误仍然发生。我在问题中添加了 cuda 版本。
  • 显而易见的建议是尝试 CUDA 7,看看问题是否仍然存在。如果是这样,请向 NVIDIA 提交错误报告
  • 我更新了代码,现在没有涉及到结构。目前我无法访问 CUDA 7。当我有我会尝试再次检查。
  • 我同意@talonmies 的观点,这似乎是一个错误。我已经在 CUDA 6.5 和 CUDA 7.0(在 linux 上)上测试过(以前的代码与结构),并且行为是可重现的(在 cc3.0/3.5 上;在 cc2.0 上我无法重现)。我已经向 NVIDIA 提交了一个错误(如果您没有/没有)。我目前没有任何进一步的信息。

标签: cuda


【解决方案1】:

这似乎是 CUDA 6.5 和 7.0 版本工具包中的一个编译器错误,它会影响计算能力 3.0/3.5 设备的代码生成。向 NVIDIA 提出了错误报告。

[此答案由 cmets 组装而成,并作为社区 wiki 条目添加以将此问题从未回答列表中删除]

【讨论】:

    猜你喜欢
    • 2020-12-27
    • 2021-03-25
    • 2015-05-02
    • 2022-01-18
    • 2015-07-23
    • 2021-08-12
    • 1970-01-01
    • 2017-10-15
    • 2014-05-14
    相关资源
    最近更新 更多