Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

CUDA

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
#1

CUDA C/C++ сложение векторов - CUDA

04.12.2012, 12:50. Просмотров 2123. Ответов 1
Метки нет (Все метки)

вроде все так делаю, но не запускается не могу понять ошибку
делаю с шаблона там просто надо заполнить недастоющие строчки
вот шаблон
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
// MP 1
#include    <wb.h>
 
__global__ void vecAdd(float * in1, float * in2, float * out, int len) {
    //@@ Insert code to implement vector addition here  
 
}
 
int main(int argc, char ** argv) {
    wbArg_t args;
    int inputLength;
    float * hostInput1;
    float * hostInput2;
    float * hostOutput;
    float * deviceInput1;
    float * deviceInput2;
    float * deviceOutput;
 
    args = wbArg_read(argc, argv);
 
    wbTime_start(Generic, "Importing data and creating memory on host");
    hostInput1 = (float *) wbImport(wbArg_getInputFile(args, 0), &inputLength);
    hostInput2 = (float *) wbImport(wbArg_getInputFile(args, 1), &inputLength);
    hostOutput = (float *) malloc(inputLength * sizeof(float));
    wbTime_stop(Generic, "Importing data and creating memory on host");
 
    wbLog(TRACE, "The input length is ", inputLength);
 
    wbTime_start(GPU, "Allocating GPU memory.");
    //@@ Allocate GPU memory here
 
 
 
    wbTime_stop(GPU, "Allocating GPU memory.");
 
    wbTime_start(GPU, "Copying input memory to the GPU.");
    //@@ Copy memory to the GPU here
    
 
    wbTime_stop(GPU, "Copying input memory to the GPU.");
    
    //@@ Initialize the grid and block dimensions here
    
 
 
    
    wbTime_start(Compute, "Performing CUDA computation");
    //@@ Launch the GPU Kernel here
   
  
    cudaThreadSynchronize();
    wbTime_stop(Compute, "Performing CUDA computation");
    
    wbTime_start(Copy, "Copying output memory to the CPU");
    //@@ Copy the GPU memory back to the CPU here
  
 
    wbTime_stop(Copy, "Copying output memory to the CPU");
 
    wbTime_start(GPU, "Freeing GPU Memory");
    //@@ Free the GPU memory here
 
 
    wbTime_stop(GPU, "Freeing GPU Memory");
    
 
    wbSolution(args, hostOutput, inputLength);
 
    free(hostInput1);
    free(hostInput2);
    free(hostOutput);
 
    return 0;
}
а вот что у меня получается, но почему то не запускается подскажите где косячу
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
// MP 1
#include    <wb.h>
 
__global__ void vecAdd(float * in1, float * in2, float * out, int len) {
    //@@ Вставте код для реализации векторного сложения здесь 
    int i = threadIdx.x + blockDim.x * blockIdx.x; 
    if(i<len) out[i] = in1[i] + in2[i]; 
}
 
int main(int argc, char ** argv) {
    wbArg_t args;
    int inputLength;
    float * hostInput1;
    float * hostInput2;
    float * hostOutput;
    float * deviceInput1;
    float * deviceInput2;
    float * deviceOutput;
 
    args = wbArg_read(argc, argv);
 
    wbTime_start(Generic, "Importing data and creating memory on host");
    hostInput1 = (float *) wbImport(wbArg_getInputFile(args, 0), &inputLength);
    hostInput2 = (float *) wbImport(wbArg_getInputFile(args, 1), &inputLength);
    hostOutput = (float *) malloc(inputLength * sizeof(float));
    wbTime_stop(Generic, "Importing data and creating memory on host");
 
    wbLog(TRACE, "The input length is ", inputLength);
 
    wbTime_start(GPU, "Allocating GPU memory.");
    //@@Выделите память GPU здесь
    cudaMalloc((void **)&deviceInput1, inputLength);
    cudaMalloc((void **)&deviceInput2, inputLength);
    cudaMalloc((void **)&deviceOutput, inputLength);
 
 
    wbTime_stop(GPU, "Allocating GPU memory.");
 
    wbTime_start(GPU, "Copying input memory to the GPU.");
    //@@ Копировать память на GPU здесь
    cudaMemcpy(deviceInput1, hostInput1, inputLength, cudaMemcpyHostToDevice);
    cudaMemcpy(deviceInput2, hostInput2, inputLength, cudaMemcpyHostToDevice);
    cudaMemcpy(deviceOutput, hostOutput, inputLength, cudaMemcpyDeviceToHost);
 
 
    wbTime_stop(GPU, "Copying input memory to the GPU.");
    
    //@@ Инициализация сетки и размеры блока здесь
    dim3 DimGrid((inputLength-1)/256 +1, 1, 1);
    dim3 DimBlock(256, 1, 1);
    vecAdd<<<DimGrid, DimBlock>>>(deviceInput1, deviceInput2, deviceOutput,inputLength);
 
 
    
    wbTime_start(Compute, "Performing CUDA computation");
    //@@ Запуск ядра GPU Kernel здесь
    vecAdd<<<ceil(inputLength/256.0),256>>>(deviceInput1, deviceInput2, deviceOutput,inputLength);
  
    cudaThreadSynchronize();
    wbTime_stop(Compute, "Performing CUDA computation");
    
    wbTime_start(Copy, "Copying output memory to the CPU");
    //@@ Скопируйте  GPU память обратно на CPU здесь
    cudaMemcpy(deviceInput1, hostInput1, inputLength, cudaMemcpyDeviceToHost);
    cudaMemcpy(deviceInput2, hostInput2, inputLength, cudaMemcpyDeviceToHost);
    cudaMemcpy(deviceOutput, hostOutput, inputLength, cudaMemcpyDeviceToHost);
 
    wbTime_stop(Copy, "Copying output memory to the CPU");
 
    wbTime_start(GPU, "Freeing GPU Memory");
    //@@ Освободите память GPU здесь
 
 
    wbTime_stop(GPU, "Freeing GPU Memory");
    free(deviceInput1);
    free(deviceInput2);
    free(deviceOutput);
 
    wbSolution(args, hostOutput, inputLength);
 
    free(hostInput1);
    free(hostInput2);
    free(hostOutput);
 
    return 0;
}
работаю с эти в облаке
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2012, 12:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос CUDA C/C++ сложение векторов (CUDA):

CUDA: сложение двумерных массивов - CUDA
Я новичок, как в CUDA, так и в С++. Задача - сложить два одинаковых массива, число строк и столбцов задается с клавиатуры. Я чувствую,...

Реализация скалярного произведения двух векторов с оптиммизацией на CUDA - CUDA
помагите реализовать операцию скалярного произведения двух векторов размерностью N на C++ с оптиммизацией на CUDA

Не запускается приложение под Cuda (CUDA directory not found) - CUDA
Здравствуйте, пытаюсь скомпилировать приложение под Cuda но вылазит ошибка, что CUDA directory not found. В чем может быть проблема? Cuda...

CUDA - CUDA
Добрый день! Не знал куда отнести эту тему, поэтому решил создать данную тему на ветке &quot;С#.NET&quot;, так как CUDA будет использоваться...

CUDA - CUDA
Сталкивался кто-нибудь с этой технологией? Хотелось бы прочитать хотя бы пару предложений доступным языком. Или пару абзацев. Ну или ссылку...

C# + CUDA - CUDA
Слышал, о полезной штуковине – CUDA. Есть смысл изучить данный сабж, или это на много усложнит программу? Хочется использовать С# , а не С....

1
max777alex
44 / 44 / 3
Регистрация: 01.02.2012
Сообщений: 822
07.12.2012, 15:09 #2
1) 43 строка cudaMemcpy(deviceOutput, hostOutput, inputLength, cudaMemcpyDeviceToHost); - она не нужна, т.к. зачем копировать "ничего"
2) на GPU память чистится функцией cudaFree(), а не free()
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.12.2012, 15:09
Привет! Вот еще темы с ответами:

CUDA - CUDA
Здравствуйте. Я мучаюсь с установкой куды на visual studio 2010. Сделал так, чтобы текст в файлах с расширением cu подсвечивался в C стиле,...

Cuda - CUDA
У меня на ноутбуке видеокарта ATI Mobility Radeon HD 4300 Series я хочу работать с CUDA какую видеокарту мне надо поставить подскажите? ...

CUDA C/C++ - CUDA
Всем доброго времени суток, кто нибудь объясните новичку в чем здесь ошибка, в ниже приведенной функции, в строке 25-ой, выдает...

CUDA на примерах - CUDA
Скомпилировал из данной книги несколько вариантов программы(не важно какой): с глобальной, константной, текстурной памятью. Измерил, как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru