web-dev-qa-db-ja.com

Pyrit用にOpenCLモジュールをコンパイルするにはどうすればよいですか?

GPUをPyritで使用したい。 Ubuntu 11.10、ATI Radeon HD 68xx、およびi7 2600Kを使用します。

完了したステップ:

  • 製造元のWebサイトから最新のATIドライバーをインストールします
  • AMD APP SDKをインストールする

ベンチマークを実行すると、次の結果が得られます。

~$ 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+

Running benchmark (5037.4 PMKs/s)... - 

Computed 5037.45 PMKs/s total.
#1: 'CPU-Core (SSE2)': 667.8 PMKs/s (RTT 3.2)
#2: 'CPU-Core (SSE2)': 661.6 PMKs/s (RTT 3.2)
#3: 'CPU-Core (SSE2)': 664.0 PMKs/s (RTT 3.2)
#4: 'CPU-Core (SSE2)': 660.5 PMKs/s (RTT 3.2)
#5: 'CPU-Core (SSE2)': 669.7 PMKs/s (RTT 3.2)
#6: 'CPU-Core (SSE2)': 656.3 PMKs/s (RTT 3.2)
#7: 'CPU-Core (SSE2)': 667.4 PMKs/s (RTT 3.2)
#8: 'CPU-Core (SSE2)': 662.6 PMKs/s (RTT 3.1)
  • AMD APP SDKが正しくインストールされていることを確認する方法は?

  • OpenCLとGPUを使用するようにPyritを構成する方法は?

編集:

Pyritをアンインストールし、AMD APP SDKを再インストールしました。 PyritのOpenCLサポートモジュールをコンパイルしようとすると、次のエラーが表示されます。

$ Sudo python setup.py build 
The headers required to build the OpenCL-kernel were not found. Trying to continue anyway...
svn: '.' is not a working copy
running build
running build_ext
Building modules...
building 'cpyrit._cpyrit_opencl' extension
gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.7 -c _cpyrit_opencl.c -o build/temp.linux-x86_64-2.7/_cpyrit_opencl.o -DVERSION="0.3.0"
_cpyrit_opencl.c:23:19: fatal error: CL/cl.h: No such file or directory
compilation terminated.
error: command 'gcc' failed with exit status 1
4
01BTC10

これが、Ubuntu Server 11.04で最終的に行った方法です。

最小限のX11環境をインストールします。

aptitude install xserver-xorg xserver-xorg-core xserver-xorg-input-evdev xserver-xorg-video-ATI lightdm unity-greeter openbox

次に、/ etc/lightdm/lightdm.confを編集し、次を追加します(YOUR_USER_NAMEをhashcatを実行するユーザーに置き換えます)。

[SeatDefaults]
greeter-session=unity-greeter
user-session=openbox
autologin-user=YOUR_USER_NAME
autologin-user-timeout=0

次に、ユーザー名をnopasswdloginグループに追加します。

usermod -a -G nopasswdlogin $USERNAME

Catalystのビルドの依存関係を取得します。

aptitude build-dep fglrx

Catalyst 12.8をダウンロードしてインストールします。

wget http://www2.ATI.com/drivers/linux/AMD-driver-installer-12-8-x86.x86_64.Zip
unzip AMD-driver-installer-12-8-x86.x86_64.Zip
sh AMD-driver-installer-8.982-x86.x86_64.run --uninstall=force
sh AMD-driver-installer-8.982-x86.x86_64.run

新しいxorg.confを生成します。

rm -f /etc/X11/xorg.conf*
amdconfig --adapter=all --initial

DISPLAY env varが設定されていることを確認します。

echo 'export DISPLAY=:0' >>~/.bashrc

再起動すれば、準備は完了です。

3
01BTC10

Pyritを使用したことも、コンパイルしようとしたこともありませんが、その構成スクリプト(setup.py)はOpenCLヘッダーファイルを見つけることができないようです。そのようなスクリプトで設定するのに必要なパスのように見えるはずです。 ATI VGAのOpenCLヘッダーは、おそらくドライバーのインストールのサブフォルダーにインストールされます。

編集:

OpenCL.hパスを設定するこのスクリプトの一部を次に示します。お使いのPCでこのファイルを見つけて、選択したものを少し試してみて、変更して、それが機能するかどうかを確認してください。

OPENCL_INC_DIRS = []
OPENCL_LIB_DIRS = []
EXTRA_LINK_ARGS = []
LIBRARIES = ['crypto', 'z']
if sys.platform == 'darwin':
    # Use the built-in framework on MacOS
    EXTRA_LINK_ARGS.extend(('-framework', 'OpenCL'))
    OPENCL_INC_DIRS.append('/System/Library/Frameworks/OpenCL.framework/Headers')
else:
    LIBRARIES.append('OpenCL')
    try:
        if os.path.exists(os.environ['ATISTREAMSDKROOT']):
            OPENCL_INC_DIRS.append(os.path.join(os.environ['ATISTREAMSDKROOT'], 'include'))
            for path in ('lib/x86_64','lib/x86'):
                if os.path.exists(os.path.join(os.environ['ATISTREAMSDKROOT'], path)):
                    OPENCL_LIB_DIRS.append(os.path.join(os.environ['ATISTREAMSDKROOT'], path))
                    break
    except:
        pass
    for path in ('/usr/local/opencl/OpenCL/common/inc', \
                '/opt/opencl/OpenCL/common/inc', \
                '/usr/local/opencl/include', \
                '/usr/local/cuda/include'):
        if os.path.exists(path):
            OPENCL_INC_DIRS.append(path)
            break
    else:
        print >>sys.stderr, "The headers required to build the OpenCL-kernel " \
                            "were not found. Trying to continue anyway..."

# Get exact version-string from svn
try:
    svn_info = subprocess.Popen(('svn', 'info'), \
                                stdout=subprocess.PIPE).stdout.read()
    VERSION += ' (svn r%i)' % \
                int(re.compile('Revision: ([0-9]*)').findall(svn_info)[0])
except:
    pass
2
Misery