Cuda (warpSize - отрицательный) - PullRequest
       5

Cuda (warpSize - отрицательный)

0 голосов
/ 02 декабря 2011

У меня есть Nvidia GeForce 310M, и когда я пишу этот код

int main()
{
    int dev;
    cudaDeviceProp prop;
    cudaGetDevice(&dev);
    cudaGetDeviceProperties(&prop,dev);
    cout << "Device name " << prop.name << endl;
    cout << "warp size  = " << prop.warpSize << endl;
    cout << "mutiprocesosrs = " << prop.multiProcessorCount << endl;
    return 0;
}

, он пишет:

Device name ♀
warp size  = -2144521342
mutiprocesosrs = 0
Press any key to continue . . .

, и каждый раз, когда я запускаю эту программу, она производит различный размер деформации.Как я могу это исправить?

(PS Я использую Visual Studio 2010)

Ответы [ 2 ]

3 голосов
/ 02 декабря 2011

Прежде всего, проверьте, успешно ли выполняются вызовы функций!

cudaDeviceProp prop;
int dev;

if (cudaGetDevice(&dev) != cudaSuccess)
{
  /* error */
  abort();
}

if (cudaGetDeviceProperties(&prop, dev) != cudaSuccess)
{
  /* error */
  abort();
}

Я сделал небольшой макрос, который использую для вызова всех функций CUDA, который выполняет проверку и выдает пользовательское исключение:

#define CUDACALL(F, ARGS...) do { e = F(ARGS); if (e != cudaSuccess) throw cudaException(#F, e); } while (false)

С этим, я просто говорю,

try
{
   int dev;
   cudaDeviceProp prop;
   CUDACALL(cudaGetDevice, &dev);
   CUDACALL(cudaGetDeviceProperties, &prop, dev);
   // ...
}
catch (cudeException const & e)
{
  std::cerr << "Cuda error: " << e.what() << "\n";
}

Класс исключения определяется следующим образом:

struct cudaException : public std::exception
{
  cudaException(const std::string & str, cudaError_t err) : s(str), e(err) { }

  ~cudaException() throw() { }

  virtual const char * what() const throw()
  {
    const std::string r = s + ": \"" + cudaGetErrorString(e) + "\" (" + (char)(e + '0') + ')';
    return r.c_str();
  }
private:
  std::string s;
  cudaError_t e;
};
1 голос
/ 02 декабря 2011

С помощью этого кода вы можете проверить, что-то с вашей настройкой cuda не так.(Взято из cuda deviceQuery sample)

    if (cudaGetDeviceCount((int*)&_deviceCount) != cudaSuccess) 
    {
        printf("ERROR: CUDA Driver and Runtime version may be mismatched.\n");
        return false;
    }

    // This function call returns 0 if there are no CUDA capable devices.
    if (_deviceCount == 0)
    {
        printf("ERROR: There is no device supporting CUDA!\n");
        return false;
    }

    _deviceProperties = SAVE_ALLOCATE(cudaDeviceProp, _deviceCount * sizeof(cudaDeviceProp));

    for (unsigned int dev = 0; dev < _deviceCount; ++dev) 
    {
        cudaGetDeviceProperties(&_deviceProperties[dev], dev);

        printf("\nDevice %d: \"%s\"\n", dev, _deviceProperties[dev].name);

    #if CUDART_VERSION >= 2020
        // Console log
        cudaDriverGetVersion(&_driverVersion);
        printf("  CUDA Driver Version:                           %d.%d\n",              _driverVersion/1000, _driverVersion%100);
        cudaRuntimeGetVersion(&_runtimeVersion);
        printf("  CUDA Runtime Version:                          %d.%d\n",              _runtimeVersion/1000, _runtimeVersion%100);
    #endif
        printf("  CUDA Capability revision number:               %d.%d\n",              

_deviceProperties[dev].major,_deviceProperties[dev].minor);
}

вы можете увидеть, если что-то не так;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...