oclHashcat and the Drivers: Catalyst and ForceWare
This article is primary focused on showing known bugs of the software that oclHashcat* is depending on:
CUDA Toolkit 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.
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*.
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:
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.
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.
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.
Recommended driver/SDK for oclHashcat* usage