0 / 0 / 0
Регистрация: 31.08.2013
Сообщений: 19
|
|
1 | |
Динамические массивы и двухканальная память12.01.2019, 12:08. Показов 1360. Ответов 5
Метки нет (Все метки)
У меня есть 4 матрицы большой размерности A1, A2, B1, B2. В программе средствами OpenMP я создаю два потока и в каждом потоке под эти матрицы создаю динамические массивы:
поток 1: allocate(A1(M,M),B1(M,M)) поток 2: allocate(A2(M,M),B2(M,M)) и далее по ходу программы каждый поток выполняет с этими массивами матричные операции matmul, причем одновременно, т.е. в одном и том же месте программы: ... !$omp barrier поток 1: С1=matmul(A1,B1) поток 2: C2=matmul(A2,B2) !$omp barrier ... Я бы хотел, чтобы эти массивы в момент создания размещались в участках памяти, соответствующих разным каналам. Тогда пары A1, B1 и A2, B2 при выполнении команды matmul будут считываться из памяти параллельно и не мешать друг другу. Как это можно сделать?
0
|
12.01.2019, 12:08 | |
Ответы с готовыми решениями:
5
Динамические массивы: очищается ли память? Динамические массивы: выделяем и высвобождаем память Двухканальная оперативная память на оперативке Двухканальная память и разные модули |
13.01.2019, 12:14 | 2 |
Возможно я не точно знаю, но по моему именно двухканальным режимом работы памяти контроллер на материнской плате занимается самостоятельно, если машина поддерживает этот режим и соответственно в гнезда материки вставлено четное количество планок.
0
|
0 / 0 / 0
Регистрация: 31.08.2013
Сообщений: 19
|
|
13.01.2019, 12:44 [ТС] | 3 |
WH, Вы правы. Сейчас у меня в настройках BIOS включена опция channel interleaving. Но я бы хотел знать, возможно ли вручную внутри программы распределять данные между каналами. Потоки же в рамках OpenMP можно программно привязать к конкретным ядрам.
0
|
13.01.2019, 18:33 | 4 | |||||
Не скажу, нужно изучать вопрос. Но мне кажется, если у вас разные ядра процессора загружены и каждое работает с большим количеством памяти то, при возможности двухканального режима, с большой долей вероятности у вас автоматом происходит то, чего вы хотите.
Добавлено через 4 часа 44 минуты Кстати, если вам нужно перемножать большие матрицы, то кроме matmul можете попробовать использовать OpenBLAS. Я как то ради эксперимента пробовал, это работает весьма быстро. Можете сравнить по скорости. При этом, учитывая что специальных средств распараллеливания типа OpenMP я не использовал, на моем 2-х ядерном процессоре были загружены оба ядра. Подпрограмма перемножения матриц - sgemm. Добавлено через 4 минуты Вот мой тестовый вариант
Код
gfortran sourse.f90 -L/usr/local/lib/ -llapack -lblas Добавлено через 3 минуты А здесь документация на синтаксис
0
|
0 / 0 / 0
Регистрация: 31.08.2013
Сообщений: 19
|
|
13.01.2019, 18:35 [ТС] | 5 |
WH, Я использовал dgemm из Intel MKL и OpenBLAS. По сравнению с matmul скорость работы в первом случае увеличилась на 15%, во втором - на 10%. Компилятор во всех трех случаях - ifort. Я думаю, что мои матрицы слишком маленькие, чтобы был заметен эффект от dgemm. Число элементов в каждой матрице ~100 тыс.
0
|
1 / 1 / 0
Регистрация: 09.04.2018
Сообщений: 8
|
|
15.01.2019, 12:38 | 6 |
Дело в том, что канальность памяти это невидимый для программиста механизм, который реализован аппаратно. Т.е. частота работы памяти гораздо меньше, чем частота работы процессора, т.о. за одно обращение по частоте мы просто считываем сразу два банка памяти, а последней проц от AMD даже сразу 8. Я так понимаю, что банки эти расположены последовательно, т.е. за одно обращение к памяти считывается столько банков, какая канальность памяти.
Далее нити OpenMP к памяти имеют совершенно равнозначный доступ на чтение. Но чтобы записывать в переменные, необходимо для каждой нити сделать собственную копию таких переменных именуемые приватные или сделать, так чтобы в матрице каждая нить записывала какие-то только свои ячейки. В перемножении матриц такое легко осуществимо каждая нить считывает свою строку в А и свой столбец в В и суммирует в С. Параллельная реализация перемножения матриц например дано тут https://parallel.ru/tech/tech_... P/examples
0
|
15.01.2019, 12:38 | |
15.01.2019, 12:38 | |
Помогаю со студенческими работами здесь
6
Двухканальная или четырехканальная память? Двухканальная оперативная память на P43ME Одноканальная или двухканальная память в ультрабуке Динамические массивы и функции. Динамические массивы. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |