oclHashcat and the Drivers: Catalyst and ForceWare

Introduction

This article is primary focused on showing known bugs of the software that oclHashcat* is depending on:

AMD

  • Catalyst Driver
  • Accelerated Parallel Processing “APP” SDK, formerly ATI Stream
  • ATI Display Library “ADL” SDK

NVidia

  • ForceWare Driver
  • CUDA Toolkit SDK
  • NVAPI SDK

All these software packages have bugs or limitations that influences oclHashcat*.

This topic is huge, thats why i will start with the current status. With time, when Drivers and SDKs change, and the change influences the behavior of oclHashcat*, i will update this article.

AMD

ADL

Version: 4.0

  • Since Catalyst 12.9 beta ADL is broken on linux. It segfaults oclHashcat-* unless you run it with --gpu-temp-disable.
  • There is no unique identifier that can be used to map between CAL/OpenCL devices and ADL device type. oclHashcat* is forced to use a fuzzy logic on the device names!
  • This library is not thread safe. In a world of Multi-core CPU and Multi-core GPU this is a joke. I am trying to workaround this bug in future versions of oclHashcat*.

NVidia

Why CUDA at all

Many people ask why oclHashcat uses CUDA for NVidia even if they have their own OpenCL runtime. So why not use it?

There are three reasons:

  1. With CUDA 4.0 they introduced an awesome feature called “PTX inline assembly”. With this its possible to do very specific optimizations. oclHashcat* actually makes use of this feature. This is not supported in their OpenCL runtime.
  2. The OpenCL runtime can not cross-compile binary kernels as the native nvcc compiler for CUDA kernels can. Since oclHashcat* is closed-source this is a very important feature. Thats the reason why you have so many *.kernel files in your oclHashcat* installation directories. Because it ships with a specific kernel for each GPU type that support GPGPU.

ForceWare

Version: 319.x

  • Slow OpenCL performance.

CUDA Toolkit

Version: 5.0

  • No OpenCL cross-compiler for binary kernels.

NVAPI

Version: R300

  • The NVAPI is used for fetching GPU temperature and utilization. Problem: It is for Windows only and there is no alternate library for Linux.
  • For Linux there is only a binary called “nvidia-smi” (part of the ForceWare driver). It can be used from commandline to fetch GPU temperature, but the utilization is available for Tesla cards only. Thats the reason why you always see 0% GPU utilization.

AMD

see required/recommended version here: https://hashcat.net/oclhashcat/

NOTE: Do not install the AMD APP SDK if you just want to use oclHashcat*. You only need this if you are developing GPGPU applications.

NVidia

see required/recommended version here: https://hashcat.net/oclhashcat/