Как подключить библиотеку mkl в intel fortran
Перейти к содержимому

Как подключить библиотеку mkl в intel fortran

  • автор:

Средства разработки Intel ®

Intel Parallel Studio XE

ЛТФ располагает ДВУМЯ сетевыми лицензиями на Intel Parallel Studio XE для запуска на ПК под Windows и ДВУМЯ сетевыми лицензиями для запуска на серверах и ПК под Linux. Parallel Studio XE (ранее назывался Cluster Studio XE) это максимально полный пакет программ включающий компиляторы Fortran, C, C++, библиотеки MKL, MPI, средства создания кода для параллельных вычислений, средства отладки и т.д. Сетевые лицензии дают возможность запускать приложения на любом ПК в пределах сети ЛТФ. Количества лицензий должно хватать для бесконфликтной работы пользователей ЛТФ, учитывая, что время использования компилятора обычно невелико, а запуск на долгий срок отладчика или другого приложения не ограничивает запуск компилятора, так как на каждое приложение имеется своя пара лицензий, как для Windows, так и для Linux.

Техническая поддержка и получение обновлений ПО доступны по 2021-01-03 для продуктов под Windows и по 2020-12-07 для продуктов под Linux .

Самые свежие выпуски полных пакетов (all tools) — см. ссылки на файлы на странице обновлений :

  • Parallel Studio XE Cluster Edition for Windows (all tools) 2019 Update 4
  • Parallel Studio XE Cluster Edition for Linux (all tools) 2019 Update 4

Программа установки позволяет выбрать следующие варианты:

  • Intel Parallel Studio XE Cluster Edition
  • Intel Parallel Studio XE Professional Edition for Fortran and C++
  • Intel Parallel Studio XE Professional Edition for C++
  • Intel Parallel Studio XE Professional Edition for Fortran

MS Visual StudioДля удобcтва редактирования, компиляции и отладки программ на языке Fortran в состав пакета входит Microsoft Visual Studio — среда разработки программ, уже настроенная для работы в связке с компилятором Intel Fortran. Для разработки кода на C/C++ Intel предлагает самостоятельно установить Eclipse, который в процессе инсталляции должен найти уже установленный компилятор Intel С/C++ и подключить его. Возможно использование других сред разработки, таких, как Code::Blocks или CodeLite и т.п. Есть и другие, очень простые, но удобные редакторы для программистов, такие как Geany и т.п. Intel Studio prompt Компиляторы Intel могут запускаться в Windows и просто в командной строке (ifort, icc), для чего при инсталляции создаются ссылки для запуска командных окон с настроенным окружением.

What’s included
Intel® Composer XE compilers and libraries ›
Intel® Trace Analyzer and Collector ›
Intel® MPI Library ›
Intel® MPI Benchmarks ›
Intel® VTune™ Amplifier XE ›
Intel® Inspector XE ›
Intel® Advisor XE ›

Продукты, доступные для установки

  • Intel ® Visual Fortran Compiler XE
  • Intel ® Math Kernel Library
  • Intel ® Debugger Extension

Сервер лицензий

Для запуска на ПК компиляторов и других программ из Parallel Studio необходимо настроить взаимодействие с сервером лицензий ЛТФ. На общественных Linux серверах ЛТФ настройки уже сделаны системным администратором. Сервер лицензий работает в избыточной конфигурации с использованием трёх компьютеров — THEOR1, THEOR2, THPROXY, что обеспечивает выдачу лицензий, если хотя бы два из этих трёх компьютеров работают. При установке Cluster Studio следует указать имена всех серверов и номера портов через точку с запятой, т.е.
theor1.jinr.ru;theor2.jinr.ru;thproxy.jinr.ru
28518;28518;28518
Лицензии выдаются только для компьютеров в сети ЛТФ, в подсети с адресами 159.93.129.* и 159.93.130.* 159.93.132.* («BLTP-Radius» WiFi сеть). Вверх Главная страница описания Главная страница ЛТФ

Инсталляция

activation

Инсталляционныe файлы выпусков разных лет находятся на сервере TFS в директории \pub\Install\Intel\[год]\ и доступны для ПК под Windows или Linux в сети ЛТФ по протоколу SMB (пароль не требуется) или по анонимному FTP.
Имена файлов для Windows (полные пакеты — all tools):
parallel_studio_xe_[год,update,edition]_online_setup.exe — установка через Интернет
parallel_studio_xe_[год,update,edition]_setup.exe — автономная установка без необходимости подключения к Интернет
Для Linux:
parallel_studio_xe_[год,update,edition]_online.tgz — установка через Интернет
parallel_studio_xe_[год,update,edition].tgz — автономная установка без необходимости подключения к Интернет
Перед началом инсталляции убедитесь, что на диске вашего ПК достаточно много свободного места, так как потребуется ОЧЕНЬ МНОГО места : несколько Гбайт на промежуточную распаковку и ещё больше на окончательную установку. Запаситесь терпением, если диск и процессор вашего ПК не супербыстрые. После инсталляции можно установить обновления из директории \pub\Install\Intel\[год]\UpdateN\ если эти обновления выпущены после установленного на вашем ПК выпуска. В процессе инсталляции возникнет вопрос об активации, см. нижеприведённые иллюстрации о том, как сделать правильный выбор сервера лицензий в ЛТФ.

LM

LicServ

Если требуется скорректировать информацию о сервере лицензий после завершения инсталляции, то следует отредактировать (или создать) файл USE_SERVER.lic, который должен находиться в директории «C:\Program Files (x86)\Common Files\Intel\Licenses\» для Windows 64-bit или в «C:\Program Files\Common Files\Intel\Licenses\» для Windows 32-bit. Файл должен содержать следующие строки:

SERVER theor1.jinr.ru ANY 28518
SERVER theor2.jinr.ru ANY 28518
SERVER thproxy.jinr.ru ANY 28518
USE_SERVER

Источники информации

  • Intel oneAPI documentation (on Intel site)
  • Documentation: Intel® Parallel Studio XE (Current and Previous)
  • Intel oneAPI Fortran compiler documentation (PDF,local copy)
  • Local copy of documentation (year 2020)
  • Local copy of documentation (year 2019)
  • Intel Support: Technical, Enterprise, HPC
  • Intel ® Parallel Studio XE
  • Intel ® Parallel Studio XE Release Notes and New Features
  • Intel Software Documentation Library
  • Intel Learning Lab (includes video materials)
  • Quick Reference Guide to Optimization Intel C++ and Fortran Compilers v15
  • Quick-Reference Guide to Optimization with Intel ® Compilers version 12 For IA-32 processors and Intel ® 64 processors
  • Компиляторы Интел
  • Intel Software Tools Technical Webinar Series
  • Non-Commercial Software Development
  • Configuring Intel ® Fortran in Microsoft* Visual Studio* to build Intel ® MKL Applications
  • Creating, Configuring, and Running Intel Visual FORTRAN projects in Microsoft Visual Studio to build Intel MKL application
  • Fortran White Papers
  • Eclipse IDE
  • Eclipse PTP — The PTP project provides an integrated development environment to support the development of parallel applications written in C, C++, and Fortran (Intel Fortran is supported).
  • Code::Blocks Wiki — Installing a supported compiler
  • CodeLite An Open-Source, cross-platform IDE for C/C++
  • Geany is a small and lightweight Integrated Development Environment.

Информация по инсталляции и администрированию

  • License Administration Guide — FlexNet Publisher Licensing Toolkit 11.10
  • Using the Intel License Manager for FLEXlm
  • Licensing: Setting up the client for a floating license
  • Intel Composer XE for Linux Silent Installation Guide
  • FLEXlm License Manager 2.0 may fail when LSB 3 is not met
  • Intel ® Developer Zone
  • Информация об обновлениях для пользователей ЛТФ

Компьютерная группа ЛТФ

15 января 2013 г.

e-mail: super@theor.jinr.ru, telepuzik@theor.jinr.ru e-mail yoda@theor.jinr.ru, godzilla@theor.jinr.ru

Дата обновления: 2022-03-29 22:16:52

Научный форум dxdy

Добрый день!
вот уже как неделю не могу подключить к своему проекту библиотеки intel MKL,
может быть кто то объяснит мне как их правильно настроить и какие именно заголовочные файлы и библиотеки нужно добывлять

компилятор ругается на неразрешенный внешний символ, чего я только не делал

PS: сейчас пытаюсь с intel MKL из intel parallel studio xe 2015

Re: помогите подключить intel MKl
30.04.2018, 11:35

Заслуженный участник

Расскажу на своем примере, как я ее подключал в проекте в Visual Studio, на Fortran.

Общая настройка для обращения к библиотеке MKL

1. Файл – Создать – Проект – Intel Visual Fortran – Main Program Code;
2. Платформа решения – Диспетчер конфигураций – Платформа – Создать – ОК. Выставить x64 ;
3. Свойства проекта – Fortran – Libraries – Use Math Kernel Library – Parallel.

Дополнительные настройки MKL

Компактный интерфейс F95 настраивается в два шага:

1. Свойства проекта – Linker – Input – mkl_blas95_lp64.lib mkl_lapack95_lp64.lib

2. В коде после program подключить библиотеки

use f95_precision
use blas95
use lapack95
Re: помогите подключить intel MKl
30.04.2018, 14:15

ShMaxG Большое спасибо за ответ, к сожалению я программирую на С

правильно ли я понимаю, файл blas95.mod — это что библиотека BLAS с интерфейсом FOTRAN?

Re: помогите подключить intel MKl
30.04.2018, 14:24

Я ведь Вам дал уже ссылку: https://software.intel.com/en-us/articl . ne-advisor
1.Select Intel® product: Intel(R).
2.Select OS: Windows*
3.Select usage model of Intel® Xeon Phi™ Coprocessor: None
4.Select compiler.
5.Select architecture: Intel(R) 64
6.Select dynamic or static linking: Static
7.Select interface layer: 64-bit integer
8.Select threading layer: OpenNP threading
9.Select OpenMP library: Intel(R) (libiomp5)

Ниже получите Use this link line: . и Compiler options: . которые можете использовать в командной строке, не связываясь с оболочкой VS (на компе можно ставить одновременно различные версии VS: если нужной Вам версии на компе нет, то перед ее установкой сначала снесите intel parallel studio, а потом снова ее установите — она интегрируется во все VS, которые поддерживает).

Re: помогите подключить intel MKl
30.04.2018, 14:27

Заслуженный участник

Andrey_Kireew в сообщении #1308750 писал(а):
правильно ли я понимаю, файл blas95.mod — это что библиотека BLAS с интерфейсом FOTRAN?

Этого я не знаю. На самом деле, у меня тоже были проблемы с этим внешним символом, но они разрешились после того, как я выставил x64 в качестве платформы.

Re: помогите подключить intel MKl
30.04.2018, 18:16

as73251 приношу извинения, я просто сразу не понял что с этим всем делать,
но потом догадался прописать все .lib из Link Line Advisor прямо в шапке, вот так

  1. #include «mkl_lapack.h»
  2. #pragma comment(lib,»mkl_lapack95_ilp64.lib»)
  3. #pragma comment(lib,»mkl_intel_ilp64.lib»);
  4. #pragma comment(lib,»libiomp5md.lib»);
  5. #pragma comment(lib,»mkl_core.lib»);
  6. #pragma comment(lib,»mkl_intel_thread.lib»);

всё скомпилировалось без ошибок,
только функции не работают — немного разобравшись обнаружил — после первого вызова dsyev (чтобы определить рабочую область) возвращает не понять что, если попытаться прочитать значения — прога зависает, в dsyer удалось прочитать wkopt — выдаёт нереально большое число для маленькой матрицы. Ну и дальше, соответственно ничего не работает .

Re: помогите подключить intel MKl
01.05.2018, 04:04

Нашел ошибку в описании функции dsyevr https://software.intel.com/sites/products/documentation/doclib/mkl_sa/11/mkl_lapack_examples/dsyevr_ex.c.htm
там размер переменной isuppz равен размеру матрицы N. Вот здесь http://www.netlib.org/lapack/explore-html/d5/de7/a18562_gaeed8a131adf56eaa2a9e5b1e0cce5718.html сказано,что этот массив должен быть в 2 раза больше числа собственных чисел, т. е. 2N. Вот память и переполнялась — всё зависало. После увеличения размеров isuppz всё заработало.

PS: только радости от этого мало, скорость и вправду увеличилась, но всего на 10% от того что было.

Re: помогите подключить intel MKl
01.05.2018, 12:32

Изображение

Уважаемый as73251 извиняюсь конечно за назойливость, но не могли бы Вы ответить на пару вопросов, чтобы подытожить результаты:
1. Правильно ли я установил MKL (из всего пакета я устанавливал только эту библиотеку, после установки запустил .bat файл, как написано в инструкции, как я понял для настройки компилятора), вроде как всё прошло успешно, но точно не уверен, вот результат:

2. Правильно ли я понимаю, что MKL оптимизирует программу под конкретное железо и на другом компе программа может работать даже хуже чем раньше? Я попробовал запустить на другом, и вместо 10% прироста, получил 10% падение производительности.
3. Правильно ли я понимаю, что судя по полученным результатам, в данном случае никакая оптимизация ничего существенного не даёт и уже точно не даст?

Страница 1 из 1 [ Сообщений: 8 ]
Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Intel MKL

Intel® Math Kernel Library (Intel® MKL) предлагает высоко оптимизированные, многопоточные математические подпрограммы для научных, инженерных и финансовых приложений, которые требуют максимальной производительности.

Intel MKL доступна как отдельный продукт, так и в составе пакета Intel Cluster Toolkit или с профессиональными версиями компиляторов Intel®.

Высочайшая производительность на процессорах Intel ®

Библиотека имеет высочайшую производительность математической библиотеки, оптимизированной для семейства процессоров Intel® Itanium® , Intel® Xeon®, Intel® Pentium® 4, и Intel® Core™2 Duo. Особое внимание уделено многопоточной оптимизации для новых процессоров серии Quad-Core Intel® Xeon® processor 5300. Производительность Intel MKL сравнима с производительностью других математических библиотек на не Intel процессорах.

Отличная скалируемость на мультипроцессорах системах

В Intel MKL библиотеке используется встроенный параллелизм, чтобы автоматически получать отличную скалируемость на системах мультипроцессоров, включающих последние 2х и 4х ядерные. В Intel MKL Level-3 BLAS, Быстрое преобразование Фурье,и Векторная математика распараллелина на основе технологии OpenMP.

Автоматическое определение типа процессора во время выполнения кода

Реализована автоматическая проверка типа процессора, которая позволяет выполнять специфичную оптимизацию для данного процессора. Таким образом, приложение, использующее Intel MKL приобретает оптимальную производительность. Независимо от того, на какой системе оно будет исполняться.

Поддержка интерфейса языков C и Фортран

В отличие он некоторых альтернативных математических библиотек, которые требуют приобрести отдельно продукты с интерфейсами С и Фортран, Intel MKLвключает оба эти интерфейса.

Поддержка всех типов процессоров Intel ® в одном пакете

Альтернативные математические библиотеки требуют покупки нескольких пакетов, поддерживающих отдельные типы процессоров Intel Itanium 2, Intel Xeon, and Pentium 4. Intel MKL включает поддержку всех данных процессоров в одном пакете.

Примеры использования Intel MKL

  • Решение систем уравнений ( BLAS , LAPACK , ScaLAPACK , Sparse Solver )
  • Нахождение собственных векторов и значений ( BLAS , LAPACK , ScaLAPACK )
  • Уравнения в частных производных, обработка сигналов,физика твёрдого тела ( FFTs )
  • Естественно-научные, финансовые задачи ( vector transcendental functions ( VML ) and vector random number generators ( VSL ))

Библиотеки, предоставляющие близкую функциональность

Функциональность Intel MKL

  • BLAS 1,2,3
  • LAPACK (решение систем линейных уравнений (СЛУ), метод наименьших квадратов, нахождение собственных чисел и векторов)
  • Sparse BLAS
  • Решение СЛУ с разреженной матрицей (PARDISO, Direct Sparse Solver, Iterative Sparse Solver)
  • ScaLAPACK (LAPACK для машин с распределенной памятью)

Векторная статистика ( VSL )

  • генераторы квази- и псевдослучайных чисел (Wichmann-Hill, Mersenne Twister, MRG-32k3a,…)
  • генераторы квази- и псевдослучайных чисел с непрерывными и дискретными распределениями

Векторные математические функции ( VML )

  • арифметические функции
  • возведение в степень и извлечение корней
  • экспоненциальные и логарифмические функции
  • тригонометрические функции
  • гиперболические функции
  • функции округления

  • решение СЛУ с интервальной матрицей и интервальной правой частью
  • нахождение матрицы, обратной к интервальной
  • проверка вырожденности интервальных матриц

Дискретное преобразование Фурье

  • Вычисление одно-, двух-, …, семимерного дискретного преобразования Фурье

Уравнения в частных производных

  • вычисление прямого и обратного синус-преобразования и косинус-преобразования
  • решение уравнений Лапласа, Пуассона и Гельмгольца в 2D и 3D

  • операции с целыми числами произвольной длины (интерфейсы полностью соответствуют интерфейсам библиотеки GMP: http://gmplib.org/)

Блог F-SEPS

Раньше я был уверен, что, возможно, самая крутая в мире 🙂 математическая библиотека Intel MKL – полностью коммерческая и с чистой совестью пользоваться ей можно только купив лицензию у Intel. Однако, разбираясь со свободными (совершенно бесплатными) системами для научных вычислений, я обнаружил, что Intel MKL входит в состав некоторых из них и используется там как основной решатель для СЛАУ, а также других задач. Как минимум, она входит:

  • в библиотеки NumPy и SciPy в составе дистрибутива Anaconda Python;
  • в SciLAB (известная MatLAB-подобная свободная система компьютерной математики).

Пойдя на сайт Intel, я увидел, что и оттуда можно скачать MKL совершенно бесплатно. Скачав, я открыл прилагающийся файл о лицензии и прочитал:

  • Redistributions must reproduce the above copyright notice and the following terms of use in the Software and in the documentation and/or other materials provided with the distribution.
  • Neither the name of Intel nor the names of its suppliers may be used to endorse or promote products derived from this Software without specific prior written permission.
  • No reverse engineering, decompilation, or disassembly of this Software is permitted.

Я не юрист, но из этого по-моему следует, что я имею полное право пользоваться MKL и даже ее распространять, если уведомлю в документации на свою программу, что копирайт MKL принадлежит Intel.

Видимо, разработчики Anaconda Python и SciLAB так и делают.

Конечно, если действительно на MKL придется завязать какие-то коммерческие проекты, этот вопрос потребует более глубокого юридического изучения. Для меня подобные юридические вопросы – полные дебри. Тут должны разбираться специальные люди. Но надеюсь, что простое экспериментирование с MKL, так же как и расчеты в NumPy и SciLAB, прав Intel не нарушают. 🙂

Мои «околонаучные» проекты в основном сделаны в GFortran. А Intel MKL для Windows, к сожалению, тесно интегрирована только с Intel Fortran, который уже точно коммерческий и весьма недешевый. (Под Linux MKL официально работает в том числе и с компиляторами GCC).

Подключить Intel MKL к GFortran в Windows на первый взгляд казалось нетривиальной задачей, но, после определенного разбирательства, это у меня получилось. Как – хочу зафиксировать ниже. Если потом все-таки окажется, что юридически это делать нельзя :), Intel MKL всегда можно заменить на OpenBLAS. Как он подключается – тоже запишу здесь для удобства. (Сказанное относится к библиотекам LAPACK и BLAS – больше мне из MKL пока не нужно).

Intel MKL в GFortrаn

Дистрибутив Intel MKL содержит скомпилированные библиотеки .dll , а также библиотеки .lib для компиляции и линковки в Intel Fortran и среде MS Visual Studio.

Мы не используем Visual Studio, а работаем с GFortrаn в составе компиляторов GCC. В принципе, GCC работает и с библиотеками .lib . Однако, корректно подключить все нужные для компиляции MKL .lib к GFortrаn – не получается. Судя по форумам, не у меня одного. Поэтому, чтобы вызывать из нашей программы MKL, попробуем подготовить библиотеки в родном для GCC формате .a и ограничимся динамическим связыванием. В принципе, .a содержит дистрибутив Intel MKL для Linux (я не поленился, установил MKL в Ubuntu), но .a в Ликунсе и в Виндовсе – несовместимы.

Нам надо получить из .dll и .lib библиотеки .a . Это возможно. Оказалось, что проще не использовать для этого .lib вообще. Библиотеки .a можно сделать просто из *.dll . Правда, это будут библиотеки только для динамической компоновки. Т.е. чтобы наша программа работала, в системе должно иметься несколько *.dll с Intel MKL. Кстати, если у нас инсталлирована, например, Anaconda Python, то все необходимые *.dll библиотеки с ней уже установлены.

Итак, у нас есть ряд .dll с Intel MKL. Их можно взять как из Anaconda Python, так и из официального дистрибутива Intel MKL, скачанного с их сайта. Первое, по-моему, даже проще т.к. на сайте Intel нужна регистрация.

Оказалось, что нужные нам функции LAPACK и BLAS в привычном формате вызова содержатся конкретно в файле mkl_rt.dll . Чтобы посмотреть, какие функции входят в *.dll есть разные утилиты. Проще всего воспользоваться утилитой dumpbin.exe из состава Visual Studio:

dumpbin /exports mkl_rt.dll

Она выдает следующее:

Ниже по списку упоминаются привычные функции LAPACK dgesv , dposv и другие.

Чтобы сделать библиотеку *.a из *.dll сначала надо сформировать текстовый файл .def со списком названий функций, т.е. из того, что обведено красным. В начале этого файла надо написать слово EXPORTS . Т.е. файл .def должен выглядеть так:

EXPORTS CAXPBY CAXPY CAXPYI CAXPY_DIRECT CBBCSD CBDSQR CCOPY CDOTC CDOTCI CDOTU . 

Файл .def можно сформировать из того, что вывел dumpbin.exe руками, а можно сделать скрипт, например, на питоне (привожу его ниже).

Получив .def , осталось сформировать библиотеку *.a (она должна иметь префикс lib и суффикс .dll ) с помощью утилиты dlltool.exe из состава GCC:

dlltool -d mkl_rt.def -D mkl_rt.dll -l libmkl_rt.dll.a

Вот скрипт на Питоне, который делает все описанное. Чтобы он работал в системе должны быть доступны dumpbin.exe и dlltool.exe . Кстати, чтобы это проверить, в Windows можно набрать where dumpbin – система выведет путь, где он лежит, либо скажет, что не находит такого.

DllFile = "mkl_rt.dll" # *.dll-файл, из которого будет сделан *.a-файл import os (FileBaseName, FileExt) = os.path.splitext(DllFile) TmpFile = FileBaseName + ".tmp" DefFile = FileBaseName + ".def" AFile = "lib" + FileBaseName + ".dll.a" os.system("dumpbin /exports " + DllFile + " > " + TmpFile) LineNo = 1 FirstLineNo = 0 LastLineNo = 0 TmpFile_ = open(TmpFile, 'r') DefFile_ = open(DefFile, 'w') DefFile_.write("EXPORTS\n") for Line in TmpFile_: if Line.find('ordinal hint') >= 0: FirstLineNo = LineNo if Line.find('Summary') >= 0: LastLineNo = LineNo if FirstLineNo != 0 and LineNo > FirstLineNo and \ (LastLineNo == 0 or LineNo  LastLineNo): DefFile_.write(Line[26:]) # Названия функций – начиная с 26 символа LineNo += 1 TmpFile_.close() DefFile_.close() os.system("dlltool -d" + DefFile + " -D " + DllFile + " -l " + AFile) os.system("DEL *.tmp")

Полученный файл *.a надо положить туда, где GCC хранит свои библиотеки, либо в папку с нашими собственными библиотеками, например, C:\gcc\mylibs .

В принципе, это все. Проверим как все работает.

Протестируем MKL на примере из прошлого поста с тестом решения СЛАУ.

Тестовая программа на Фортране (в скоростном варианте с \(LL^T\) -разложением) выглядит так (файл LinTest.f90 ):

program LinTest implicit none integer, parameter :: n = 1000 ! Число уравнений integer, parameter :: m = 100 ! Число шагов real(8), dimension(n,n) :: A, A0 ! Матрица коэффициентов real(8), dimension(n) :: B ! Вектор правых частей / результатов real(8) :: s ! Контрольная сумма integer :: i, j, k ! Вспомог. индексы integer :: info ! Инфо об успешности решения integer :: t_0, t_1, t_rate, t_max ! Для измер. времени !------------------------------------------------------------------------ forall(i=1:n, j=1:n) A0(i,j) = 1-(dble(i-j)/n)**2 forall(i=1:n, j=1:n, i==j) A0(i,j) = 10. s = 0. call system_clock(t_0, t_rate, t_max) do k = 1, m A=A0 B=k call dposv("L", n, 1, A, n, B, n, info) ! Вызов процедуры LAPACK if (info/=0) stop ("Ошибка") s = s + sum(B) enddo call system_clock(t_1, t_rate, t_max) print *, "Время:", real(t_1-t_0)/t_rate print *, "Сумма:", s endprogram

Условно статическая компиляция (пусть наша библиотека libmkl_rt.dll.a лежит в C:\gcc\mylibs ):

gfortran LinTest.f90 -static -L C:\gcc\mylibs -lmkl_rt.dll -O2 -o LinTest.exe

Запуская программу, получаем:

LinTest.exe Время: 0.328000009 Сумма: 22439.195088956156 

Время 0,33 с – точно такое же как и у лидера прошлого теста Intel Fortran + MKL .

Размер LinTest.exe получился 595 КБ (компилятор был из GCC 6.3.0 из дистрибутива MinGW64). В него статически прилинковались все библиотеки, кроме .dll -библиотек MKL.

Какие в принципе .dll нужны для работы нашей программы? Если мы хотим, чтобы наша программа работала на другой машине, не имеющей установленную Анаконду или другой вариант MKL, надо будет скопировать и обеспечить доступность 5-ти файлов:

Размер Файл ---------------------------------- 1 328 896 libiomp5md.dll 37 854 480 mkl_avx2.dll 25 122 064 mkl_core.dll 24 297 744 mkl_intel_thread.dll 12 629 264 mkl_rt.dll ---------------------------------- 101 232 448 байт

100 МБ – конечно, не мало. Это вариант с последним дистрибутивом MLK с сайта Intel, версия 2017.2.187. Из дистрибутива Анаконды набегает поменьше – «всего» 86 МБ. Современный софт, он такой. 🙂

Полностью динамическая компиляция (убираем ключ -static ):

gfortran LinTest.f90 -L C:\gcc\mylibs -lmkl_rt.dll -O2 -o LinTest.exe

LinTest.exe получился крошечный – 57 КБ, но теперь для работы потребуются еще три .dll из GCC (данные для версии 6.3.0):

Размер Файл ---------------------------------- 75 264 libgcc_s_seh-1.dll 1 277 952 libgfortran-3.dll 325 632 libquadmath-0.dll ---------------------------------- 1 678 848 байт

OpenBLAS в GFortrаn

Установить OpenBLAS – куда проще.

Скачиваем с официального сайта уже скомпилированные бинарные файлы в архиве OpenBLAS-v0.2.19-Win64-int32.zip (версия для 64-разрядных машин).

Переписываем файлы libopenblas.a и libopenblas.dll.a туда, где GCC хранит свои библиотеки, либо в папку с нашими собственными библиотеками, например, C:\gcc\mylibs .

Статическая компиляция (пусть наши библиотеки *.a лежат в C:\gcc\mylibs ):

gfortran LinTest.f90 -static -L C:\gcc\mylibs -lopenblas -O2 -o LinTest.exe
LinTest.exe Время: 0.483999997 Сумма: 22439.195088956145 

Время на 48% больше, чем с Intel Fortran + MKL , но на самом деле тоже очень достойное.

Размер файла LinTest.exe , правда, громадный: 26 МБ.

Динамическая компиляция (убираем -static и добавляем к -lopenblas суффикс .dll ):

gfortran LinTest.f90 -L C:\gcc\mylibs -lopenblas.dll -O2 -o LinTest.exe

Размер LinTest.exe – всего 57 КБ. Для работы потребуется libopenblas.dll из дистрибутива OpenBLAS и еще три DLL из GCC. Общий расклад (данные для версии 6.3.0):

Размер Файл ---------------------------------- 75 264 libgcc_s_seh-1.dll 1 277 952 libgfortran-3.dll 42 587 753 libopenblas.dll 325 632 libquadmath-0.dll ---------------------------------- 44 266 601 байт

«Всего» 44 МБ – не так и страшно. 🙂

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *