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

Почему CUDA медленнее на простом коде? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Возможно ли записать преобразуещее выражение типов даных в макросы? http://www.cyberforum.ru/cpp-beginners/thread810000.html
Желательно показать как это делается.
C++ Одномерный массив. Найти количество и сумму отрицательных и четных элементов #include <iostream.h> void function (int * arr, int n); int a; int sum, amount; int main() { int i; n=10; for ( i=0, 1<10, i++); cin<<a; void function (a); return 0; http://www.cyberforum.ru/cpp-beginners/thread809982.html
Графика на С++ (по ООП). Разработать класс «упругий шарик» C++
Разработать класс «упругий шарик» («упругий эллипс»), создать на экране три «шарика», изображающие: а) синусоидально изменяющий свои размеры по вертикали «шарик» с неподвижным геометрическим центром; б) «шарик» с постоянными размерами, совершающий синусо-идальные колебания по вертикали; в) упругопружинящий «шарик» с неподвижной нижней точкой (т. е. синхронно подпрыгивающий и деформирующийся...
Рисование с использованием graphics.h C++
Сабж. Из среды имеется только Visual Studio 12. Препод упорот и требует, чтобы программа компилировалась и запускалась на turbo C++ и TP (т.к. аналогичное задание для паскаля). Какой средой можно для всего этого воспользоваться, а то запускать все это дело через досбокс не очень хочется...
C++ DOS приложения и C++ http://www.cyberforum.ru/cpp-beginners/thread809965.html
хотел бы узнать ответы на некоторые вопросы, почему приложения, написанный к примеру в c++ buildere 6.0 не будут работать в DOS, в чем отличия, и можно ли их каким-то образом конвертировать.
C++ В одномерном массиве, состоящем из вещественных элементов, вычислить: Помогите пожалуйста написать программу , ничего не понимаю В одномерном массиве, состоящем из вещественных элементов, вычислить: А) сумму положительных элементов массива, стоящих на четных позициях. Б) произведение индексов максимального и минимального элементов. В) Поменять местами первый положительный элемент с последним отрицательным. подробнее

Показать сообщение отдельно
RaZoR2008
4 / 4 / 0
Регистрация: 09.02.2009
Сообщений: 74
16.03.2013, 12:24     Почему CUDA медленнее на простом коде?
Добрый день! Написал простую программу сравнения многократного запуска на CUDA и на CPU
Однако CUDA показывает 4539 мс на 1 миллион циклов, а CPU 1580 мс
Почему CUDA медленнее на простом коде

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
87
88
89
90
91
92
93
94
95
96
97
// Ядро исполнения на GPU
__global__ void
kernel(float *ex, float *v, float *hi, float *low, float *cl, int m)
{
  int i = blockIdx.x * blockDim.x + threadIdx.x;
  int j;
  if (i < m) 
  {
    j = ex[i];
    v[i] = low[j];
  }
}
 
// Главная функция
int main()
{
  int numBars = loadBars();
  int numExtr = defineExtremums(numBars);
 
  cout << "GPU kernel start:" << "\n";
  int N = numBars;
  int M = numExtr;
  float *ex, *z, *h, *l, *c;
  float *d_x, *d_xx, *d_y, *d_z, *d_w;
 
  int size_m = M * sizeof(float);
  int size_n = N * sizeof(float);
 
  ex = (float*)malloc(size_m);
  z = (float*)malloc(size_m);
  h = (float*)malloc(size_n);
  l = (float*)malloc(size_n);
  c = (float*)malloc(size_n);
 
  cudaMalloc(&d_x, size_m);
  cudaMalloc(&d_xx, size_m);
  cudaMalloc(&d_y, size_n);
  cudaMalloc(&d_z, size_n);
  cudaMalloc(&d_w, size_n);
 
  for (int i = 0; i < M; i++) 
  {
    ex[i] = extr[i];
  }
 
  for (int i = 0; i < N; i++) 
  {
    h[i] = high[i];
    l[i] = low[i];
    c[i] = close[i];
  }
 
  cudaMemcpy(d_x, ex, size_m, cudaMemcpyHostToDevice);
  cudaMemcpy(d_y, h, size_n, cudaMemcpyHostToDevice);
  cudaMemcpy(d_z, l, size_n, cudaMemcpyHostToDevice);
  cudaMemcpy(d_w, c, size_n, cudaMemcpyHostToDevice);
 
  dim3 threads = dim3(1024,1);
  dim3 blocks = dim3(N/threads.x,1);
 
  int numbench = 100000;
  clock_t t1 = clock();
  for (int u = 0; u < numbench; u++)
  {
    kernel<<<threads,blocks>>>(d_x, d_xx, d_y, d_z, d_w, M);
    cudaMemcpy(z, d_xx, size_m, cudaMemcpyDeviceToHost);
  }
  clock_t t2 = clock();
  clock_t t3 = t2-t1;
  cout << "GPU: " << t3 << "\n";
  
  clock_t t4 = clock();
    for (int u = 0; u < numbench; u++)
    {
    for(int i = 0; i < M; i++)
    {
        int j = ex[i];
        z[i] = low[j];
    }
    }
  clock_t t5 = clock();
  clock_t t6 = t5-t4;
  cout << "CPU: " << t6 << "\n";
 
  cudaFree(d_x);
  cudaFree(d_xx);
  cudaFree(d_y);
  cudaFree(d_z);
  cudaFree(d_w);
 
  free(ex);
  free(z);
  free(h);
  free(l);
  free(c);
 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 15:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru