• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Tablica 2D jako struktura oraz uzupełnanie jej przy pomocy wskaźnika.

Ultraszybki serwer VPS NVMe BIZNES
0 głosów
73 wizyt
pytanie zadane 8 grudnia 2017 w C i C++ przez Łukasz Wasilewski Gaduła (4,490 p.)

Cześć, 

jako zadanie na zajęcia z Programowania Kart Graficznych dostałem funkcję mnożenia macierzy przy pomocy oprogramowania CUDA, lecz mój główny problem polega na czymś innym. Funkcja jest już napisana, a wywołuję ją się tak:
 

void MatMul(const Matrix a, const Matrix b, Matrix c)

Teraz struktura Matrix:

typedef struct {
	int width;
	int height;
	float* elements;
	size_t pitch;
} Matrix;

pitch jest potrzebny do funkcji cudaMallocPitch() .

 

Teraz główne pytanie, funkcję MatMul muszę uruchomić z gotowymi Matrixami które uzupełnię danymi losowymi, nie mam pojęcia jednak jak to zrobić. Gdyby elements był float **  mógłbym wtedy zrobić coś takiego:

Matrix a;
a.elements = new (float**)[size];
for (int i = 0; i < size; i++) { a.elements[i] = new (float*)[size]; }

Jednak struktura wygląda jak wygląda, wskaźnik jest pojedynczy, a ja utknąłem. 

1 odpowiedź

+1 głos
odpowiedź 8 grudnia 2017 przez Criss VIP (128,790 p.)
wybrane 8 grudnia 2017 przez Łukasz Wasilewski
 
Najlepsza
Dlaczego nie chcesz trzymać elementów w tablicy jednowymiarowej? W porządku column-wise (najpierw jeden po drugim ustawione elementy pierwszej kolumny, potem drugiej itd.) albo row-wise (analogicznie dla rzedow). Podejrzewam, że CUDA wymusza jeden z tych dwóch układów. To zupełnie normalne i dzięki takiemu rozwiązaniu potrzebne jest mniej odwołan do pamięci, łatwiej kopiować dane i generalnie wszystko jest prostrze.
komentarz 8 grudnia 2017 przez Łukasz Wasilewski Gaduła (4,490 p.)

Nie wierzę, że rozwiązanie było tak proste. 
Dzięki Tobie teraz tworzę elements = new float[width*height], natomiast po elementach poruszam się: elements[i*width + j] gdzie to numer wiersza, a j kolumny. 

Dziękuję za pomoc smiley

 

komentarz 8 grudnia 2017 przez Criss VIP (128,790 p.)
Dokładnie tak powinno to wyglądać :) Proszę bardzo

Podobne pytania

0 głosów
1 odpowiedź 89 wizyt
pytanie zadane 3 czerwca 2017 w C i C++ przez J0ker Użytkownik (970 p.)
+1 głos
3 odpowiedzi 813 wizyt
pytanie zadane 9 marca 2017 w C i C++ przez Antero00 Bywalec (2,820 p.)
0 głosów
1 odpowiedź 112 wizyt
Porady nie od parady
Pytania na temat serwisu SPOJ należy zadawać z odpowiednią kategorią dotyczącą tej strony.
Ciekawy innych porad? Odwiedź tę stronę!

44,296 zapytań

84,112 odpowiedzi

167,460 komentarzy

21,201 pasjonatów

Przeglądających: 132
Pasjonatów: 6 Gości: 126

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...