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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Компьютер угадывает число http://www.cyberforum.ru/cpp-beginners/thread782795.html
Пользователь загадывает число от 1 до 100 и компьютер пытается угадать. На каждую попытку компьютера пользователь отвечает, больше (h) искомое число, или меньше (l). Я попытался реализовать это,уменьшая границы рандома. Например, я загадал 26. Если компьютер пишет 50, я отвечаю 'l'. Тогда рандом принимает вид rand()%50+1. Компьютер пишет 25, я отвечаю 'h', тогда рандом принимает вид rand()%50+25....
C++ Автоматические тесты Добрый вечер. Пишу для курсового проекта автоматические тесты для одной формы довольно обширного проекта. Есть функция, проверяющая текущий трек(проект связан с радиолокацией). Функция: void TFormWaves::CheckTrack(AnsiString TrackNum) { if (TrackNum == "") { //ShowMessage("Введите номер трассы!"); http://www.cyberforum.ru/cpp-beginners/thread782788.html
C++ Найти: средний результат; всех воспитанников заданного тренера
помогите написать задание. Представить данную в варианте информацию в виде структуры. Реализовать функции считывания из файла/консоли и записи в файл/консоль полученной структуры. Сформировать набор данных (массив), где каждый элемент является разработанной структурой. Этот набор тоже может быть оформлен как структура. Участник спортивного соревнования: фамилия, фамилия тренера и результат....
из Си С++ C++
Привет всем, народ хелпание с переделыванием кода из си в с++, вроде все правильно переделал, а программа перестает работать как надо... // kursa4.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include "iostream.h" #include "stdio.h" #include "conio.h" int main()
C++ При передаче ссылки на указатель программа зависает http://www.cyberforum.ru/cpp-beginners/thread782749.html
Почему это не работает (точнее работает но зависает т.к. в set_val_to23() ссылка на указатель val передаётся со значением 0: main(): void set_val_to23(int* &val) { *val=23; } int main() { try {
C++ Ошибка в коде Здравствуйте. В книге "ООП" Р. Лафоре, в главе 6 есть программка. Которая не хочет запускаться. Сперва набирал сам, после "долгих мучений" решил запустить оригинальный код посмотреть или запуститься - увы. Запускал в CB и в VS. msoftcon.h и msoftcon.cpp файлы закинул в папку с проектом. Топ получился очень длинный, если модератор как-то сможет уменшить - буду благодарен : ( Вот сам код:... подробнее

Показать сообщение отдельно
Danzel
6 / 6 / 3
Регистрация: 21.08.2012
Сообщений: 45
09.02.2013, 21:44     определитель матрицы на CUDA C
Здравствуйте!
прошу прощения если я создал тему не в том разделе!
Надо написать программу которая вычисляет определитель матрицы 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;
 
}
Прошу небольшой помощи или совета!
Заранее спасибо))
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 07:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru