2013-02-08 4 views
0

Windows에서 Cuda [4.2]를 사용하여 텍스처를 읽는 데 문제가 있습니다.커널 코드가 PTX 파일이고 호스트 코드도 PTX 파일을 생성 할 때 Cuda에서 텍스처 사용

내 프로그램은 모든 커널 모듈을 포함하는 ptx 파일을 읽습니다. 또한 컴파일 프로세스는 호스트 코드의 짧은 루틴에서 추가 ptx 파일을 생성합니다. 여기에 .cuh 파일 및 호스트에만 코드 파일 .CU :

/////////////// "textureDefs.cuh" file /////////////////////////////////////////// 
#ifndef _TEXTUREDEFS_CUH 
#define _TEXTUREDEFS_CUH 
texture < float, cudaTextureType2D, cudaReadModeElementType> texRefEachRes_1; 
texture <float, cudaTextureType2D, cudaReadModeElementType> texRefEachResPrev; 
/////////////////////////////////////////////////////////////////////////////// 
///  myBind.cu 
///////////////////////////////////////////////// 

#include "cuda.h" 
#include "textureDefs.cuh" 
extern cudaPitchedPtr gYAllFramesForEachRes[ME_NUM_RES], gPrevYForEachRes[ME_NUM_RES]; 
// 
extern "C" cudaError_t bindTextures(int resNum) 
{ 
    cudaChannelFormatDesc channelDesc = cudaCreateChannelDesc(32, 0, 0, 0, cudaChannelFormatKindFloat); // x is 32 bit float 

    size_t offset; 
    texRefEachResPrev.addressMode[0] = cudaAddressModeClamp; 
    texRefEachResPrev.addressMode[1] = cudaAddressModeClamp; 
    texRefEachResPrev.filterMode = cudaFilterModeLinear; 
    texRefEachResPrev.normalized = false; 
    cudaError_t err = cudaBindTexture2D(&offset, &texRefEachResPrev, 
      (unsigned char *)gPrevYForEachRes[resNum].ptr, &channelDesc, 
    gPrevYForEachRes[resNum].xsize, gPrevYForEachRes[resNum].ysize, 
      gPrevYForEachRes[resNum].pitch); // jm bug 1/5 
    return err; 
} 

호출 할 때마다 0 값을 반환 내 커널 코드에 tex2d 것이 아니라 내가 선택하고 배열의 유효한 데이터가있다.

나는 또한 myBind.ptx를로드해야하는지 궁금해합니다. 그렇다면 어떻게 그리고 언제, 어디서로드 될까요? 또는 이것이 필요하지 않은가?

귀하의 도움에 감사드립니다.

답변

1

CUDA 5.0 이전에 텍스처에 대한 모든 참조는 동일한 편집 단위에서 있어야합니다. 그렇지 않으면 같은 이름을 가지지 만 다른 네임 스페이스에있는 별도의 텍스처를 처리하게됩니다.

컴파일 전에 모든 .ptx 코드를 단일 파일에 포함 시키거나 CUDA 5.0으로 업그레이드 할 수 있습니다.