Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
编写一个cuda程序来编译sm_1x和sm_2x_Cuda - Fatal编程技术网

编写一个cuda程序来编译sm_1x和sm_2x

编写一个cuda程序来编译sm_1x和sm_2x,cuda,Cuda,我的问题非常类似于,但我无法解决它 我有一个使用CUDA分层纹理的CUDA程序。此功能仅适用于费米体系结构(计算能力大于或等于2.0)。如果GPU不是费米,我使用3d纹理作为分层纹理的替代。在声明纹理引用(纹理引用需要是全局的)时,我在代码中使用_CUDA_ARCH__u),如下所示: 但我发现这里有个问题。未正确定义并行历史。如果我将第一个子句更改为#如果已定义(uu CUDA_ARCH_uuu)&&&&u CUDA_ARCH_up>如果您想了解GPU的计算能力,您可以尝试以下方法: int

我的问题非常类似于,但我无法解决它

我有一个使用CUDA分层纹理的CUDA程序。此功能仅适用于费米体系结构(计算能力大于或等于2.0)。如果GPU不是费米,我使用3d纹理作为分层纹理的替代。在声明纹理引用(纹理引用需要是全局的)时,我在代码中使用_CUDA_ARCH__u),如下所示:


但我发现这里有个问题。未正确定义并行历史。如果我将第一个子句更改为#如果已定义(uu CUDA_ARCH_uuu)&&&&u CUDA_ARCH_up>如果您想了解GPU的计算能力,您可以尝试以下方法:

int devID;    
cudaDeviceProp props;
CUDA_SAFE_CALL( cudaGetDevice(&devID) );
CUDA_SAFE_CALL( cudaGetDeviceProperties(&props, devID) );

float cc;
cc = props.major+props.minor*0.1;
printf("\n:: CC: %.1f",cc);

但是我不知道如何解决你的问题。

我不确定我是否理解确切的问题,它可能有一个优雅的解决方案。这是我过去使用过的一种不雅的暴力手段。创建两个具有相同签名但名称不同的内核(例如foo_sm10()、foo_sm20()),在两个单独的.cu文件中。编译一个文件用于sm_10,另一个文件用于sm_20。将独立于计算能力的公共代码移动到头文件中,并将其从前面提到的两个.cu文件中包含。在宿主代码中,创建函数指针以调用依赖于体系结构的内核。初始化函数点根据运行时检测到的计算能力,将GPU转换为适当的依赖于体系结构的内核。

我知道这一点,但我需要知道GPU在编译时的计算能力
#ifdef __CUDA_ARCH__
    texture<float, cudaTextureType2DLayered> depthmapsTex; 
#endif
#ifndef __CUDA_ARCH__
    texture<float, cudaTextureType2DLayered> depthmapsTex; 
#endif
#if __CUDA_ARCH__<300
#define PARALLEL_HISTS 64
#else
#define PARALLEL_HISTS 8
#endif
int gpuHistogramTempSize(int n_bins)
{
    return n_bins * PARALLEL_HISTS * sizeof(int);
}
int devID;    
cudaDeviceProp props;
CUDA_SAFE_CALL( cudaGetDevice(&devID) );
CUDA_SAFE_CALL( cudaGetDeviceProperties(&props, devID) );

float cc;
cc = props.major+props.minor*0.1;
printf("\n:: CC: %.1f",cc);