• 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.

0 głosów
83 wizyt
pytanie zadane 8 grudnia 2017 w C i C++ przez Łukasz Wasilewski Mądrala (5,150 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 (146,100 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 Mądrala (5,150 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 (146,100 p.)
Dokładnie tak powinno to wyglądać :) Proszę bardzo

Podobne pytania

0 głosów
1 odpowiedź 49 wizyt
0 głosów
1 odpowiedź 115 wizyt
pytanie zadane 3 czerwca 2017 w C i C++ przez J0ker Bywalec (2,770 p.)
+1 głos
3 odpowiedzi 1,588 wizyt
pytanie zadane 9 marca 2017 w C i C++ przez Antero00 Bywalec (2,990 p.)
Porady nie od parady
Zadając pytanie postaraj się o poprawną pisownię i czytelne formatowanie tekstu.Kompozycja

54,387 zapytań

98,251 odpowiedzi

202,070 komentarzy

26,700 pasjonatów

Przeglądających: 288
Pasjonatów: 10 Gości: 278

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.

...