Увы, реализация FGLRX оставляет желать лучшего, поэтому мы будем использовать Gallium.
Когда у доброй половины однокурсников есть ноутбуки Linux с AMD GPU, можно найти легкий способ получить доступ к интренету прогреть аудиторию.
Тестовая конфигурация на момент написания статьи:
1. Acer E1-572G
CPU: Intel Core i5-4200U (with AES)
GPU: AMD Radeon HD 8750m
RAM: 8 GB DDR3-1600
OS: Fedora Workstation 21 (x64_86)
2. Emachines E732ZG
CPU: Intel Core i3 M350 @ 2.27GHz (without AES)
GPU: AMD Radeon HD 5470 Mobility
RAM: 8 GB DDR3-1600
OS: Fedora Workstation 21 (x64_86)
0. Проверим поддерживается ли наш GPU
На freedesktop есть страница с текущим статусом разработки GalliumCompute.
Имя граф. ускорителя можно узнать здесь.
1. Добавим необходимые для работы пакеты
$ sudo -s # yum install @development-tools -y # yum install opencl-headers libclc mesa-libOpenCL mesa-libOpenCL-devel opencl-filesystem ocl-icd ocl-icd-devel openssl-devel libpcap-devel python-devel -y
2. Сборка pyrit
В сборке есть один нюанс. В trunk (svn 308) версии была сломана поддержка сети, а в стабильной (v. 0.4.0) не работает GalliumCompute.
Решение — собрать cpyrit_opencl из trunk, а стабильный pyrit — поставить из репозитория.
# yum install pyrit # svn checkout http://pyrit.googlecode.com/svn/trunk/ pyrit_svn # cd pyrit/cpyrit_opencl
Далее необходимо добавить путь к библиотеке openCL в setup.py:53
... for path in ('/usr/local/opencl/OpenCL/common/inc', \ '/opt/opencl/OpenCL/common/inc', \ '/usr/local/opencl/include', \ '/usr/local/cuda/include',\ '/usr/include/CL'): ...
Устанавливаем pyrit:
# yum install pyrit -y # ./setup.py build # ./setup.py install
Теперь каждый раз отображается сообщение об ошибке:
/usr/lib64/python2.7/site-packages/cpyrit/cpyrit.py:63: UserWarning: WARNING: Version mismatch between <module 'cpyrit._cpyrit_cpu' from '/usr/lib64/python2.7/site-packages/cpyrit/_cpyrit_cpu.so'> ('0.4.0') and <module 'cpyrit._cpyrit_opencl' from '/usr/lib64/python2.7/site-packages/cpyrit/_cpyrit_opencl.so'> ('0.4.1-dev (svn r308)') "('%s')\n" % (_cpyrit_cpu, _cpyrit_cpu.VERSION, mod, ver))
Убираем его — в файле /usr/lib64/python2.7/site-packages/cpyrit/cpyrit.py:63 меняем на:
def version_check(mod): pass
Проверяем:
$ pyrit benchmark Pyrit 0.4.0 (C) 2008-2011 Lukas Lueg http://pyrit.googlecode.com This code is distributed under the GNU General Public License v3+ Calibrating... WARNING: Linking two modules of different data layouts: '/usr/lib64/clc//oland-r600--.bc' is 'e-p3:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64' whereas 'input.cl' is 'e-p:32:32-p1:64:64-p2:64:64-p3:32:32-p4:64:64-p5:32:32-p24:64:64-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64' Running benchmark (19441.7 PMKs/s)... - Computed 19441.74 PMKs/s total. #1: 'OpenCL-Device 'AMD OLAND'': 19519.9 PMKs/s (RTT 2.8) #2: 'CPU-Core (SSE2)': 461.9 PMKs/s (RTT 3.5) #3: 'CPU-Core (SSE2)': 511.2 PMKs/s (RTT 2.9) #4: 'CPU-Core (SSE2)': 516.5 PMKs/s (RTT 2.5)
3. Добавляем поддержку сети
На серверах создаем с следующим содержимым:
default_storage = file:// limit_ncpus = 2 rpc_announce = true rpc_announce_broadcast = false rpc_knownclients = rpc_server = false workunit_size = 75000
limit_ncpus — для лучшей производительности необходимо указать количество физических ядер CPU.
На клиенте:
default_storage = file:// limit_ncpus = 0 rpc_announce = true rpc_announce_broadcast = false rpc_knownclients = 192.168.0.100 rpc_server = true workunit_size = 75000
rpc_knownclients — через пробел указываем ip клиентов:
rpc_knownclients = 192.168.0.100 192.168.0.101 192.168.0.102 ...
Также адреса серверов можно указать внося их в ~/.pyrit/hosts
... 192.168.1.100 192.168.1.101 ...
4. Запускаем pyrit
На каждом из серверов:
$ pyrit serve Pyrit 0.4.0 (C) 2008-2011 Lukas Lueg http://pyrit.googlecode.com This code is distributed under the GNU General Public License v3+ Serving 0 active clients; 0 PMKs/s; 0.0 TTS
Далее включался hotspot встроенными средствами Fedora.
На клиенте:
$ pyrit benchmark Pyrit 0.4.0 (C) 2008-2011 Lukas Lueg http://pyrit.googlecode.com This code is distributed under the GNU General Public License v3+ Calibrating... WARNING: Linking two modules of different data layouts: '/usr/lib64/clc//oland-r600--.bc' is 'e-p3:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64' whereas 'input.cl' is 'e-p:32:32-p1:64:64-p2:64:64-p3:32:32-p4:64:64-p5:32:32-p24:64:64-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64' Running benchmark (19643.1 PMKs/s)... \ Computed 19643.10 PMKs/s total. #1: 'OpenCL-Device 'AMD OLAND'': 20223.9 PMKs/s (RTT 2.7) #2: 'CPU-Core (SSE2)': 808.2 PMKs/s (RTT 3.0) #3: 'Network-Clients': 2189.6 PMKs/s (RTT 2.3)
При практическом применении удавалось получить скорость около 300k~200k PMKs/s и нагреть аудиторию до комфортных 18-20 градусов.
Данный материал публикуется лишь в образовательных целях.
ссылка на оригинал статьи http://habrahabr.ru/post/247187/