Что я могу сделать, чтобы исправить эту ошибку в программировании CUDA, фатальный C1070: несовпадение # if / # endif пары в файле?

Я получаю код от этого SITE пример операции деформации в варпе. Я скомпилировал это, и я получил ошибку как это фатальный C1070: несовпадение # if / # endif пары в файле Мне трудно исправить эту ошибку. Есть кто-нибудь, кто может мне помочь?
Любая попытка будет высоко оценена.
Спасибо!

ЗДЕСЬ КОД:

#ifndef _REDUCE_KERNEL_H_
#define _REDUCE_KERNEL_H_

#include <stdio.h>template <class T, unsigned int blockSize>
__global__ void
reduce5(T *g_idata, T *g_odata, unsigned int n)
{
T *sdata = SharedMemory<T>();

// perform first level of reduction,
// reading from global memory, writing to shared memory
unsigned int tid = threadIdx.x;
unsigned int i = blockIdx.x*(blockSize*2) + threadIdx.x;

T mySum = (i < n) ? g_idata[i] : 0;

if (i + blockSize < n)
mySum += g_idata[i+blockSize];

sdata[tid] = mySum;
__syncthreads();

// do reduction in shared mem
if ((blockSize >= 512) && (tid < 256))
{
sdata[tid] = mySum = mySum + sdata[tid + 256];
}

__syncthreads();

if ((blockSize >= 256) &&(tid < 128))
{
sdata[tid] = mySum = mySum + sdata[tid + 128];
}

__syncthreads();

if ((blockSize >= 128) && (tid <  64))
{
sdata[tid] = mySum = mySum + sdata[tid +  64];
}

__syncthreads();

#if (__CUDA_ARCH__ >= 300 )
if ( tid < 32 )
{
// Fetch final intermediate sum from 2nd warp
if (blockSize >=  64) mySum += sdata[tid + 32];
// Reduce final warp using shuffle
for (int offset = warpSize/2; offset > 0; offset /= 2)
{
mySum += __shfl_down(mySum, offset);
}
}
#else
// fully unroll reduction within a single warp
if ((blockSize >=  64) && (tid < 32))
{
sdata[tid] = mySum = mySum + sdata[tid + 32];
}

__syncthreads();

if ((blockSize >=  32) && (tid < 16))
{
sdata[tid] = mySum = mySum + sdata[tid + 16];
}

__syncthreads();

if ((blockSize >=  16) && (tid <  8))
{
sdata[tid] = mySum = mySum + sdata[tid +  8];
}

__syncthreads();

if ((blockSize >=   8) && (tid <  4))
{
sdata[tid] = mySum = mySum + sdata[tid +  4];
}

__syncthreads();

if ((blockSize >=   4) && (tid <  2))
{
sdata[tid] = mySum = mySum + sdata[tid +  2];
}

__syncthreads();

if ((blockSize >=   2) && ( tid <  1))
{
sdata[tid] = mySum = mySum + sdata[tid +  1];
}

__syncthreads();
#endif

// write result for this block to global mem
if (tid == 0) g_odata[blockIdx.x] = mySum;
}

-2

Решение

в вашем файле есть базовая защита заголовка, убедитесь, что #endif также

#ifndef _REDUCE_KERNEL_H_
#define _REDUCE_KERNEL_H_

#include <stdio.h>

...

#endif // _REDUCE_KERNEL_H_
1

Другие решения


По вопросам рекламы [email protected]