2014-09-28 4 views
0

У меня проблема с простой программой CUDA, которая просто добавляет два числа. Я запускаю его на ноутбуке с графическим процессором GeForce GT320M в Windows 7. Я скомпилирую эту программу с Visual Studio 2013 (я не знаю, значит ли это что-то). Проблема в том, что я всегда получаю 0. Я попытался проверить заданные параметры (просто верните все параметры, заданные методу в массиве), и все они выглядели как 0. Я запускаю эту программу на другом компьютере (в университете), и там она работает полностью нормально и возвращает правильный результат. Поэтому я думаю, что должна быть какая-то проблема с настройкой, но я не уверен в этом.CUDA - Простая программа сумматора всегда дает нуль

#include <cuda.h> 
#include <stdio.h> 

#include "cuda_runtime.h" 
#include "device_launch_parameters.h" 

__global__ void add(int a, int b, int* c) 
{ 
    *c = a + b; 

    return; 
} 

int main(int argc, char** argv) 
{ 
    int c; 
    int* dev_c; 

    cudaMalloc((void**)&dev_c, sizeof(int)); 

    add << <1, 1 >> >(1, 2, dev_c); 

    cudaMemcpy(&c, dev_c, sizeof(int), cudaMemcpyDeviceToHost); 

    printf("a + b = %d\n", c); 

    cudaFree(dev_c); 

    return 0; 
} 

Я также использую этот фрагмент кода, который я где-то нашел.

cudaSetDevice(0); 
cudaDeviceSynchronize(); 
cudaThreadSynchronize(); 

Это ничего не возвращает.

+0

@ Pradheep См. Здесь, пожалуйста: [_ «Рассматривает причины для нижнего уровня в комментариях, неконструктивных?» _] (Http://meta.stackoverflow.com/questions/252826/is-asking-reasons-for -downvote -in-comments-not-constructive/252910 # 252910) –

+0

Я на самом деле пытаюсь выяснить, что здесь не так. Это не похоже на тривиальную проблему. –

+0

Вы можете прочитать принятый ответ отсюда. Посмотрите, работает ли это. http://stackoverflow.com/questions/10524050/simple-adding-of-two-ints-in-cuda-result-always-the-same –

ответ

2

Если вы используете типичный шаблон CUDA для создания нового проекта Visual Studio с использованием CUDA, вам необходимо позаботиться о правильной настройке вычислительной возможности, с которой нужно компилировать, при необходимости изменив значения по умолчанию. Это может быть сделано путем установки, например,

compute_12,sm_12 

в CUDA C/C++ Configuration Properties. В вашем случае функция вычисления по умолчанию была 2.0, а ваша карта имеет предыдущую архитектуру. Это было источником ваших неправильных вычислений.

P.S. По состоянию на сентябрь 2014 года CUDA 6.5 является единственной версией CUDA, поддерживающей Visual Studio 2013, см. Is Cuda 6 supported with Visual Studio 2013?.

Смежные вопросы