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

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

Podobne pytania

0 głosów
1 odpowiedź 568 wizyt
pytanie zadane 11 czerwca 2018 w SQL, bazy danych przez emeryt68 Nowicjusz (130 p.)
0 głosów
1 odpowiedź 842 wizyt
pytanie zadane 3 czerwca 2017 w C i C++ przez J0ker Pasjonat (15,400 p.)
+1 głos
3 odpowiedzi 7,757 wizyt
pytanie zadane 9 marca 2017 w C i C++ przez Antero00 Gaduła (3,670 p.)

92,453 zapytań

141,262 odpowiedzi

319,086 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...