Как получить результат с видеокарты?

Первая программа. Сложение матриц. Уже многим набившая оскомину.
Почему в основном блоке программы для С[i] выводятся начальные неинициализированные данные, хотя передача в VecAdd идет по ссылке?

  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. // Kernel definition
  6. __global__ void VecAdd(float* A, float* B, float* C)
  7. {
  8.     int i = threadIdx.x;
  9.     C[i] = A[i] + B[i];
  10. }
  11.  
  12. int main()
  13. {
  14.     int N=10;
  15.     float A[10];
  16.     float B[10];
  17.     float C[10];
  18.  
  19.     for(int i=0;i<=9;i++)
  20. {
  21.     A[i]=1.1;
  22.     B[i]=2.1;
  23. }
  24.     // Kernel invocation with N threads
  25.     VecAdd<<<1, N>>>(A, B, C);
  26.  
  27.     for(int i=0;i<=9;i++)
  28. {
  29. cout<<A[i]<<endl;
  30. cout<<B[i]<<endl;
  31. cout<<C[i]<<endl;
  32. }
  33. }

Forums: 

В этом коде нет ни

В этом коде нет ни копирования исходных данных в GPU, ни копирования результатов обратно в CPU.
Поэтому это не работает:

  1. [<a href="mailto:olej@nvidia" rel="nofollow">olej@nvidia</a> first]$ ./first
  2. 1.1
  3. 2.1
  4. 1.40523e-38
  5. 1.1
  6. 2.1
  7. 3.98844e-34
  8. ...

И поэтому и возникают такие вопросы ;)