Я новичок в High Performance Computing
и мой первый вопрос на этом форуме, где я читал много времени.Арифметическая операция на очень больших статических массивах в C/C++
В принципе мне нужно делать арифметические операции над очень большими массивами, как, например,
double variable [9][4][300][300][300] (uninitialized)
случай 1: Если я объявляю массив выше, как local/automatic
тогда я получаю ошибку времени выполнения, если я скомпилирован без оптимизация как «g++ file.cpp
» .. (ошибка есть ошибка сегментации - переполнение стека ???)
случай 2: В том же случае, как указано выше, если бы я Compi с оптимизацией код работает, как ожидалось. "g++ -O2 file.cp
р»(в bss
array
Теперь ???)
случай 3: Если я переменная global/static
затем компилируется нормально, но тем не менее он не работает и просто дает сообщение„killed
“на терминале и завершается.
Там нет реальной проблемой, но мне интересно, и вы хотите узнать, что происходит, когда очень большие массивы объявляются и где они находятся в памяти в зависимости от типа данных.
Я также осведомлен о метод генерации этих массивов во время выполнения с использованием malloc или новый. Тогда, конечно, это будет на куче.
Так что самый важный вопрос для меня -> который является наиболее эффективным методом (т.е. наименьшее время выполнения при расчете массивов в памяти) иметь дело с большими массивами при компиляции с g++
и работает на linux clusters
.
Благодарим вас за терпение за чтение.
Этот массив - чистое безумие. Вам нужно использовать более интеллектуальное решение для обработки этого объема данных, если ваша целевая платформа не является какой-то зверской машиной. Поскольку это, похоже, не так, потоки данных с диска в кусках или что-то подобное. –
Эти массивы неизбежны. Они представляют переменные в 4-мерном пространстве. И операции памяти решают сложное нелинейное дифференциальное уравнение. И в конечном итоге код будет работать на кластере из 50 узлов с памятью более 100 ГБ. Данные действительно считываются с диска.Мое любопытство заключается в понимании того, где эти данные находятся во время выполнения, и какой раздел (bss/stack/heap) обеспечит максимальную производительность во время выполнения. – physicist
Я действительно предлагаю вам сделать свою работу на основе некоторых математических библиотек, таких как armadillo или BLAS. ЛЮБОЕ ВЕЩАНИЕ, которое вы делаете, и я имею в виду ЛЮБОЕ ВЕЩИ, его невозможно превзойти исполнение этих библиотек. Подумайте об использовании их с самого начала :) – amas