Понимание конфигурации ввода linpack
5 # number of tests
1000 2000 3000 4000 5000 # number of equations (problem sizes)
1000 2008 3000 4008 5000 # leading dimensions
4 4 2 1 1 # number of times to run a test (trials)
4 4 4 4 4 # alignment values (in KBytes)
Я прочитал документацию, но 2,3, 5 не ясно (я не знаю, Фортран).
Строка 2 - просит ли создать матрицу 1000*1000, 2000*2000 ... 5000*5000? Если да, какое отношение уравнение имеет к созданию матрицы? Если нет, то насколько сложным является это уравнение, это просто как решение a = 1.2+2.2
или некоторые другие сложные проблемы
Строка 3 - это может быть ссылка на подматрицу. Но какой смысл создавать подматрицу? Что произойдет, если все значения LDA равны соответствующему размеру проблемы
Line5- Что такое значения выравнивания?
1 ответ
Это настройка для оптимизированного теста Linpack от Intel. Все параметры, которые вам кажутся запутанными, относятся к способу представления и доступа к матрицам.
Входные параметры
Тест Linpack решает систему N
одновременные линейные уравнения.
a11 * x1 + a12 * x2 + .. + a1N * xN = b1
a21 * x1 + a22 * x2 + .. + a2N * xN = b2
...
aN1 * x1 + aN2 * x2 + .. + aNN * xN = bN
Это эквивалентно решению векторного уравнения Ax=b
где x
а также b
являются N-мерными векторами и A
является N*N
матрица.
N*N
матрица представлена в памяти как N*N
массив, где отдельные столбцы хранятся в смещениях 0
,n
,2*n
и т.д. Обратите внимание, что мы используем другой символ n
вместо N
, Причина в том, что когда n=N
алгоритм, работающий в нескольких параллельных потоках, может столкнуться с явлением, известным как перегрузка кэша. Избегайте этого, рекомендуется установить n>N
вставка некоторого отступа между данными столбца. Часто n
выбирается как наименьшее целое число, делимое на 8, которое больше N
, Итак, мы закончили со строками 2 и 3. Строка 2 N
и строка 3 n
,
Тест Linpack использует несколько массивов. Еще раз для эффективного использования кэша рекомендуется начинать все массивы на границе страниц памяти. Таким образом, они выровнены по границе 4К. Для больших страниц может иметь смысл установить это значение на большое число, например, 16 или 64. Это наша строка 5.
Выходные величины
Чтобы проверить решение, тест Linpack вычисляет остаточный вектор r = Ax - b
, Максимальная норма вектора r
является максимумом абсолютных значений его элементов max(|r_1|,..,|r_N|)
, Это значение называется остаточной стоимостью. Должно быть по порядку машины эпсилон eps
т.е. наименьшее число такое, что 1 + eps > eps
, Для 64-битных чисел с плавающей точкой eps
составляет около 1e-15.
Чтобы получить меру, которая не зависит от архитектуры машины, вычисляется нормализованный остаток. Документация Linpack дает следующую формулу для нормализованного остатка.
|| Ax - b ||_oo / (eps * (|| A || _oo * || x || _oo + || b ||_oo) * n)
Здесь || X ||_oo обозначает максимальную норму. Забавно выглядящий индекс _oo представляет символ бесконечности. Это || Ax - b ||_oo - остаток, || A ||_oo - максимум абсолютных значений элементов матрицы A
и || b ||_oo - максимальное абсолютное значение правого вектора.
Запись || X ||_oo происходит из анализа. Там || X ||_1 обозначает сумму абсолютных значений компонентов X, || X ||_1 = |x1| + ... + |xN|. || X ||_2 = sqrt(|x1|^2 + ... + |xN|^2), || X ||_k = (|x1|^k + ... + |xN|^k)^(1/k). Можно доказать, что когда k уходит в бесконечность || X || _k идет к max(|x1|,...,|xk|)
,
Вы также должны взглянуть на оригинальный высокопроизводительный LINPACK.