小编Fra*_*ank的帖子

CUDA C在双打时使用单精度翻牌

问题

在CUDA C的一个项目中,我遇到了关于单精度和双精度浮点运算的意外行为.在项目中,我首先使用内核和另一个内核中的数字填充数组,然后对这些数字进行一些计算.所有变量和数组都是双精度的,所以我不希望任何单精度浮点运算发生.但是,如果我使用NVPROF分析程序的可执行文件,则表明执行了单精度操作.这怎么可能?

最小,完整和可验证的例子

这是最小的程序,它在我的架构上显示了这种行为:(断言和错误捕获已被遗漏).我使用的是Nvidia Tesla k40显卡.

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

#define Nx 10
#define Ny 10
#define RANDOM double(0.236954587566)

__global__ void test(double *array, size_t pitch){
    double rho, u;
    int x = threadIdx.x + blockDim.x*blockIdx.x;
    int y = threadIdx.y + blockDim.y*blockIdx.y;
    int idx = y*(pitch/sizeof(double)) + 2*x;

    if(x < Nx && y < Ny){
        rho = array[idx]; 
        u = array[idx+1]/rho;
        array[idx] = rho*u;
    }
}

__global__ void fill(double *array, size_t pitch){
    int x = threadIdx.x + blockIdx.x * …
Run Code Online (Sandbox Code Playgroud)

precision cuda single-precision

8
推荐指数
1
解决办法
463
查看次数

标签 统计

cuda ×1

precision ×1

single-precision ×1