示例#1
0
TransferFunction::~TransferFunction()
{
    if(compositeTex)
        CudaSafeCall(cudaDestroyTextureObject(compositeTex));

    CudaSafeCall(cudaFreeArray(array));
}
示例#2
0
void TransferFunction::onColorTFChanged()
{
    //std::cout<<"Color changed"<<std::endl;
    if(compositeTex)
    {
        CudaSafeCall(cudaDestroyTextureObject(compositeTex));
        compositeTex = 0;
    }

    colorTF->GetTable(0.0, 1.0, TABLE_SIZE, colorTable);
    size_t j = 0, k = 0;
    for(size_t i = 0; i < TABLE_SIZE; ++i)
    {
        compositeTable[j++] = colorTable[k++];
        compositeTable[j++] = colorTable[k++];
        compositeTable[j++] = colorTable[k++];
        j++;
    }
    //CompositeTable();

    CudaSafeCall(cudaMemcpyToArray(array, 0, 0, compositeTable, sizeof(float) * TABLE_SIZE * 4, cudaMemcpyHostToDevice));
    CudaSafeCall(cudaCreateTextureObject(&compositeTex, &resourceDesc, &texDesc, NULL));

    Changed();
}
示例#3
0
void SingleParticle2dx::Methods::CUDAProjectionMethod::prepareForProjections(SingleParticle2dx::DataStructures::ParticleContainer& cont)
{
	cudaSetDevice(getMyGPU());
	cudaStreamCreate(&m_stream);
	
	cudaChannelFormatDesc channelDesc = cudaCreateChannelDesc(32, 0, 0, 0, cudaChannelFormatKindFloat);
	cudaExtent VS = make_cudaExtent(m_size, m_size, m_size);
	
	if( m_alloc_done == false )
	{
		cudaMalloc3DArray(&m_cuArray, &channelDesc, VS);
	}
		
	SingleParticle2dx::real_array3d_type real_data( boost::extents[m_size][m_size][m_size] );
	m_context->getRealSpaceData(real_data);
	unsigned int size = m_size*m_size*m_size*sizeof(float);
	
	if( m_alloc_done == false )
	{
		res_data_h = (float*)malloc(m_size*m_size*sizeof(float));
		cudaMalloc((void**)&res_data_d, m_size*m_size*sizeof(float));
		m_alloc_done = true;
	}
	
	cudaMemcpy3DParms copyParams = {0};
	copyParams.srcPtr = make_cudaPitchedPtr((void*)real_data.origin(), VS.width*sizeof(float), VS.width, VS.height);
	copyParams.dstArray = m_cuArray;
	copyParams.extent = VS;
	copyParams.kind = cudaMemcpyHostToDevice;
	
//	cudaMemcpy3D(&copyParams);
	cudaMemcpy3DAsync(&copyParams, m_stream);
		
	struct cudaResourceDesc resDesc;
	memset(&resDesc, 0, sizeof(resDesc));
	resDesc.resType = cudaResourceTypeArray;
	resDesc.res.array.array = m_cuArray;
	
	struct cudaTextureDesc texDesc;
	memset(&texDesc, 0, sizeof(texDesc));
	texDesc.addressMode[0]   = cudaAddressModeClamp;
	texDesc.addressMode[1]   = cudaAddressModeClamp;
	texDesc.addressMode[2]   = cudaAddressModeClamp;
	texDesc.filterMode       = cudaFilterModeLinear;
	texDesc.readMode         = cudaReadModeElementType;
	texDesc.normalizedCoords = 0;

	if(m_alloc_done == true)
	{
		cudaDestroyTextureObject(m_texObj);
	}

	m_texObj = 0;
	cudaCreateTextureObject(&m_texObj, &resDesc, &texDesc, NULL);
}
示例#4
0
 void cudaCloverField::destroyTexObject() {
   cudaDestroyTextureObject(evenTex);
   cudaDestroyTextureObject(oddTex);
   cudaDestroyTextureObject(evenInvTex);
   cudaDestroyTextureObject(oddInvTex);
   if (precision == QUDA_HALF_PRECISION) {
     cudaDestroyTextureObject(evenNormTex);
     cudaDestroyTextureObject(evenNormTex);
     cudaDestroyTextureObject(evenInvNormTex);
     cudaDestroyTextureObject(evenInvNormTex);
   }
   checkCudaError();
 }
示例#5
0
SingleParticle2dx::Methods::CUDAProjectionMethod::~CUDAProjectionMethod ()
{
	cudaDestroyTextureObject(m_texObj);
	cudaFreeArray(m_cuArray);
	cudaStreamDestroy(m_stream);
	delete[] m_matrix;
	delete m_t;
	
	free(res_data_h);
	cudaFree(res_data_d);
}
示例#6
0
 __host__ ~Texture()
 {
     if (cc30)
     {
         // Use the texture object
         cudaDestroyTextureObject(this->texObj);
     }
     else
     {
         // Use the texture reference
         CvCudevTextureRef<T>::unbind();
     }
 }
示例#7
0
  void cudaCloverField::destroyTexObject() {
    if (order == QUDA_FLOAT2_CLOVER_ORDER || order == QUDA_FLOAT4_CLOVER_ORDER) {
      cudaDestroyTextureObject(evenTex);
      cudaDestroyTextureObject(oddTex);
      cudaDestroyTextureObject(evenInvTex);
      cudaDestroyTextureObject(oddInvTex);
      if (precision == QUDA_HALF_PRECISION) {
	cudaDestroyTextureObject(evenNormTex);
	cudaDestroyTextureObject(oddNormTex);
	cudaDestroyTextureObject(evenInvNormTex);
	cudaDestroyTextureObject(oddInvNormTex);
      }
      checkCudaError();
    }
  }
示例#8
0
 __host__ ~Texture()
 {
     cudaDestroyTextureObject(this->texObj);
 }
示例#9
0
		cuda_texture::~cuda_texture()
		{
			if (tex != 0)
				cudaDestroyTextureObject(tex);
		}
示例#10
0
 void deallocate(){
     cudaDestroyTextureObject(texObj);
     cudaFreeArray(cuArray);
     
 }
示例#11
0
 Texture::~Texture()
 {
     if (_texture) {
         cudaDestroyTextureObject(_texture);
     }
 }
示例#12
0
 __host__ ~Texture()
 {
     // Use the texture object
     cudaDestroyTextureObject(this->texObj);
 }