Jestem nowy w High Performance Computing
i moje pierwsze pytanie na tym forum, na którym długo byłem czytnikiem.Działanie arytmetyczne na bardzo dużych macierzach statycznych w C/C++
Zasadniczo muszę zrobić operacji arytmetycznych na bardzo dużych tablic jak na przykład
double variable [9][4][300][300][300] (uninitialized)
case 1: Gdybym zadeklarować tablicę powyżej jako local/automatic
następnie otrzymuję błąd czasu gdybym skompilowany bez optymalizacja jak „g++ file.cpp
” .. (błąd jest segmentacja winy - przepełnienie stosu ???)
przypadek 2: W tej samej sprawie jak wyżej, gdybym miał Compi le z optymalizacją kodu działa zgodnie z oczekiwaniami. "g++ -O2 file.cp
p”(jest array
w bss
teraz ???)
przypadek 3: Jeśli zrobię zmienna global/static
następnie kompiluje w porządku, ale mimo to nie działa i po prostu daje komunikat«killed
»na terminalu i kończy.
nie ma prawdziwy problem, ale jestem ciekawy i chcesz dowiedzieć się, co się dzieje, gdy wyjątkowo duże tablice zostały zgłoszone i skąd one znajdować się w pamięci w zależności od ich typu danych.
Zdaję sobie również sprawę z metoda generowania tych tablic w czasie wykonywania za pomocą malloc lub Nowy. Wtedy oczywiście będzie na kupie.
Więc najważniejsze pytanie dla mnie jest -> co jest najskuteczniejszą metodą (tj najmniejszy run-time podczas obliczania tablic w pamięci) radzenia sobie z dużymi tablicami przy kompilacji z g++
i działa na linux clusters
.
Dziękuję za cierpliwość w czytaniu.
Ta tablica jest czystym szaleństwem. Musisz użyć bardziej inteligentnego rozwiązania do przetwarzania tej ilości danych, chyba że twoja platforma docelowa jest jakąś bestialską maszyną. Ponieważ wydaje się, że tak nie jest, przesyłaj dane z dysku w porcjach lub coś podobnego. –
Te tablice są nieuniknione. Reprezentują zmienne w 4-wymiarowej przestrzeni. A operacje pamięciowe rozwiązują złożone nieliniowe równanie różniczkowe. I w końcu kod będzie działał na klastrze złożonym z 50 węzłów z więcej niż 100 GB pamięci. Dane są rzeczywiście odczytywane z dysku.Moja ciekawość polega na zrozumieniu, gdzie znajdują się te dane w czasie wykonywania, a która sekcja (bss/stack/heap) zapewnia najszybszą wydajność w czasie wykonywania. – physicist
Naprawdę chciałbym zaproponować ci wykonanie swojej pracy w oparciu o biblioteki matematyczne, takie jak Armadillo lub BLAS. WSZYSTKIE RZECZ, co robisz, i mam na myśli DOWOLNĄ RZECZ, niemożliwą do pokonania wydajność tych bibliotek. Rozważ użycie ich od samego początku :) – amas