2015-01-13 3 views
3

Некоторые библиотеки, такие как BLAS/LAPACK или некоторые библиотеки оптимизации, оптимизируются для локальной архитектуры машины во время компиляции. В качестве примера рассмотрим OpenBlas. Там существуют два способа создания контейнера Docker с OpenBlas:Фотографии докеров с оптимизацией архитектуры?

  1. Используйте Dockerfile, в котором вы указываете GIT клон библиотеки OpenBlas вместе со всеми необходимыми флагах компиляции и строить команды.

  2. Потяните и запустите чужое изображение Ubuntu + OpenBlas от Docker Hub.

Вариант (1) гарантирует, что OpenBlas будет построен и оптимизирован для вашей машины. Как насчет опции (2)? Являясь новичком Docker, я вижу образы как нечто фиксированное и статическое, поэтому запуск этого изображения не будет оптимизирован для моей машины (который может быть основан на AMD вместо процессора Intel для поддержки). Что меня смутило, так это то, что изображение ipython/scipyserver делает клонирование последнего мастера OpenBlas из Github во время сборки.

Кажется, я неправильно понимаю концепцию изображений Docker и/или автоматизированных сборок, и я очень благодарен за разъяснение.

ответ

1

Нет, я думаю, вы в значительной степени правы.

Образ, на который вы ссылаетесь, является автоматической сборкой, поэтому OpenBlas будет скомпилирован с использованием ядра и архитектуры сервера сборки Docker. Я сделал обратите внимание на build script устанавливает следующие флаги при создании OpenBlas:

DYNAMIC_ARCH=1 NO_AFFINITY=1 NUM_THREADS=32 

Который предположительно делает установку портативной по цене производительности. Альтернативой было бы иметь отдельный образ для различных конфигураций сборки.

+0

Спасибо, Адриан! Вы правы - добавив DYNAMIC_ARCH = 1, все ядра процессора скомпилированы (тем самым добавив время компиляции), которые затем вытягиваются в зависимости от архитектуры процессора, на которой вызывается OpenBlas. Ухоженная! – user45893

+0

Хорошо, это интересно! –

+0

обновление: Docker уже не просто Linux 64-разрядный, для Windows 10 PRO и Windows Server 2016 используется контейнер с 64-разрядными версиями Windows, а также для Docker Linux 32 бит https://github.com/docker-32bit – Walid

Смежные вопросы