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

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

Войти
Регистрация
Восстановить пароль
 
Danzel
6 / 6 / 3
Регистрация: 21.08.2012
Сообщений: 45
#1

Определитель матрицы на CUDA Cи - C++

09.02.2013, 21:44. Просмотров 876. Ответов 1
Метки нет (Все метки)

Здравствуйте!
прошу прощения если я создал тему не в том разделе!
Надо написать программу которая вычисляет определитель матрицы 3х3 на CUDA C.
На С++ я написал программу и перенес ее на 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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <conio.h>
#include <math.h>
 
#define SIZE 3
using namespace std;
 
__host__
void matrix_viewA (double A[SIZE][SIZE],char *q) {          //вывод матрицы на экран
  int i, j;
 for( i=0;i<SIZE;i++)
    {
        for( j=0;j<SIZE;j++)
        {
            cout<<A[i][j]<<"    ";
        }
        cout<<endl;
    }
 
 
  puts ("");
}
 
__host__
void matrix_viewK (double K[SIZE][SIZE],char *q) {          //вывод матрицы на экран
  int i, j;
 for( i=0;i<SIZE;i++)
    {
        for( j=0;j<SIZE;j++)
        {
            cout<<K[i][j]<<"    ";
        }
        cout<<endl;
    }
 
 
  puts ("");
}
 
 
 
 
 
__host__
void matrix_enter (double A[SIZE][SIZE]) {        //заполнение матрицы
  int i, j;
  for (i=0; i<SIZE; i++)
  {
    for (j=0; j<SIZE; j++)
    {
        cout<<"vvedite A["<<i<<"]["<<j<<"]"<<endl;
        cin>>A[i][j];
      //array[i][j]=1+rand()%16;
    }
  }
}
 
 
__global__
void determinant (double A[SIZE][SIZE],double b[SIZE],double K[SIZE][SIZE]) 
{        //ядро: приведение к треугольному виду
  int i=blockIdx.x*blockDim.x+threadIdx.x;
  int j=blockIdx.x*blockDim.x+threadIdx.x;
  double f;
  double znak=1;  
  double det=1;
  __syncthreads();
   for (int k = 0; k < SIZE; k ++)
    {
        for ( i = k + 1; i < SIZE; i ++)
        {
             f = A[i][k] / A[k][k];
            for ( j = 0; j < SIZE; j ++)
                A[i][j] -= A[k][j] * f;
            b[i] -= b[k] * f;
        }
    }
       
       for(i=0;i<SIZE;i++)
       {
           for(j=0;j<SIZE;j++)
           {
               A[i][j]=K[i][j];
           }
       }
 
 
       for(int k=0; k<SIZE; k++)
       {
            det=det*K[k][k]*znak;
       }
  
 
      __syncthreads();  
  
}
 
int main (void) 
{ 
  int i,znak=1;
  double A[SIZE][SIZE], (*mtx_d)[SIZE],b[SIZE],K[SIZE][SIZE]; // определяем переменные 
  double det=1; //переменная для определителя
 
cudaMalloc ((void**)&mtx_d, sizeof(double)*SIZE*SIZE);      //выделение памяти на устройстве
 
matrix_enter(A); // вызываем функцию для заполнения матрицы
cudaMemcpy(mtx_d, A, sizeof(double)*SIZE*SIZE,     //копирование массива в память видеокарты
    cudaMemcpyHostToDevice); 
puts ("na4al'naya matrica\n");
matrix_viewA(A, " | %.2f "); // выводим нашу матрицу на экран
dim3 dimBlock(16, 16);
dim3 numBlock(SIZE/dimBlock.x, SIZE/dimBlock.y);
determinant<<<numBlock, dimBlock>>>(mtx_d,b,K);            //вызов ядра
cudaThreadSynchronize();
cudaMemcpy(A, mtx_d, sizeof(double)*SIZE*SIZE,     //копирование массива из памяти видеокарты
    cudaMemcpyDeviceToHost); 
puts ("triangl vid\n");
matrix_viewA(K, "| %.2f ");
for(int k=0; k<SIZE; k++)
{
            det=det*K[k][k]*znak;
}
printf ("det=%.0Lf\n ", det);
cudaFree(mtx_d),cudaFree(b),cudaFree(A);
system("pause");
getchar();
return 0;
 
}
Прошу небольшой помощи или совета!
Заранее спасибо))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2013, 21:44     Определитель матрицы на CUDA Cи
Посмотрите здесь:

Найти определитель матрицы - C++
Доброго времени суток. Есть такая задача Вся проблема в том, что не понимаю значения слов: Матрица B получена из матрицы A по...

Определитель матрицы n-го порядка - C++
Доброго времени суток) Ребят,срочно нужна функция,которая вычисляет определитель матрицы NxN без использования рекурсии....

Найти определитель матрицы - C++
дана матрица второго порядка (a_b; c_d)найти определитель матрицы!

Вычислить определитель матрицы - C++
#include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;ctime&gt; #include &lt;algorithm&gt; int main()

Найти определитель матрицы - C++
Написать прогу на с++ : нахождение определителя матрицы методом квадратного корня. Кто сможет помогите пожалуйста((

Вычислить определитель матрицы - C++
Здравствуйте, уважаемые форумчане! Так получилось, что я снова решил пополнить свою коллекцию программ по работе с матрицами. На этот раз,...

Определитель квадратной матрицы - C++
Вычислить определитель квадратной целочисленной матрицы.

Определитель матрицы 7х7 - C++
Ребят, всем привет! Помогите пожалуйста найти определитель матрицы 7х7...

Найти определитель матрицы - C++
Всем доброго приятного вечера!! Не могу написать программу на такую вот(см.на рис.) задачу, если мне не решить до завтра мне капец светит...

Найти определитель матрицы - C++
Помогите пожалуйста. У меня дана матрица и нужно найти ее определитель, помогите...:cry: #include &lt;iostream&gt; #include &lt;conio.h&gt; ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
10.02.2013, 04:13     Определитель матрицы на CUDA Cи #2
Danzel, очень странная реализация. Зачем куда, если вычисления идут в одном потоке?
Yandex
Объявления
10.02.2013, 04:13     Определитель матрицы на CUDA Cи
Ответ Создать тему
Опции темы

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