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

С++ для начинающих

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

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

04.12.2012, 12:50. Просмотров 2063. Ответов 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++ сложение векторов (C++):

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

Сложение векторов - C++
Не понимаю почему методом insert не хочет принимать такие параметры. Даже если пытают переменной типа int присвоить vec, выдает ошибку (int...

Сложение векторов - C++
Здрасти. #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;cmath&gt; class vector3D{ public: vector3D(int inita=0,...

Сложение векторов в результирующий - C++
кто может решите пожалуйста одну задачку: Даны матрица порядка n, а также векторы X и Y с элемнтами каждый. Найти вектор C=A*(X+Y)

Сложение векторов строк - C++
Имеются два вектора строк std::vector &lt;std::string&gt; *str1; std::vector &lt;std::string&gt; *str2; Как их сложить чтоб в итоге...

Сложение векторов (MPI) - C++
Суть такая. Есть массив a и b c. Корды первого вектора это a a т.е. x1 y1 Корды второго вектора b b т.е. x2 y2 Нужно что бы в c...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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
Привет! Вот еще темы с ответами:

Сложение векторов в структуре - C++
Надо сложить 2 вектора использую функции структуры. Пока дошел до этого варианта: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include...

Последовательное и параллельное сложение векторов - C++
Помогите,пожалуйста, написать программу для последовательного и параллельного сложение векторов.

Реализовать сложение векторов посредством transform - C++
Товарищи, читаю Прату, дошел до STL (это ппц), есть задача реализовать вот этот кусок vad3 = 10.0* ((vad1 + vad2) / 2.0 + vad1 *...

Сложение элементов двух векторов с записью в третий - C++
Есть код функции (не дописанная), которая получает в качестве аргументов 2 вектора произвольных типов: template&lt;class T&gt; T&amp;...


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

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

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