Monthly Archives: January 2014

Dual GPU notebook configuration Intel + AMD/ATI

Add catalyst + xorg114 pacman repos to your /etc/pacman.conf:

Server =$arch
Server =$arch

Install required xorg server and driver packages:


Create /etc/X11/xorg.conf using aticonfig –initial

Section "ServerLayout"
        Identifier     "aticonfig Layout"
        Screen      0  "aticonfig-Screen[0]-0" 0 0
Section "Module"
Section "Monitor"
        Identifier   "aticonfig-Monitor[0]-0"
        Option      "VendorName" "ATI Proprietary Driver"
        Option      "ModelName" "Generic Autodetecting Monitor"
        Option      "DPMS" "true"
Section "Device"
        Identifier  "aticonfig-Device[0]-0"
        Driver      "fglrx"
        BusID       "PCI:1:0:0"
Section "Screen"
        Identifier "aticonfig-Screen[0]-0"
        Device     "aticonfig-Device[0]-0"
        Monitor    "aticonfig-Monitor[0]-0"
        DefaultDepth     24
        SubSection "Display"
                Viewport   0 0
                Depth     24

Switch gpu using the AMD tool: amdcccle

Direct rendering works: glxinfo | grep direct

direct rendering: Yes


If glxgears / glxinfo gives errors like:

libGL error: failed to load driver: i965
libGL error: Try again with LIBGL_DEBUG=verbose for more details.
libGL error: failed to load driver: swrast
libGL error: Try again with LIBGL_DEBUG=verbose for more details.

… set the catalyst libGL path:

export LIBGL_DRIVERS_PATH=/usr/lib/catalystpxp/fglrx/
export LD_PRELOAD=/usr/lib/catalystpxp/fglrx/

OpenCL works: clinfo

Number of platforms:                             1
  Platform Profile:                              FULL_PROFILE
  Platform Version:                              OpenCL 1.2 AMD-APP (1348.4)
  Platform Name:                                 AMD Accelerated Parallel Processing
  Platform Vendor:                               Advanced Micro Devices, Inc.
  Platform Extensions:                           cl_khr_icd cl_amd_event_callback cl_amd_offline_devices
  Platform Name:                                 AMD Accelerated Parallel Processing
Number of devices:                               2
  Device Type:                                   CL_DEVICE_TYPE_GPU
  Device ID:                                     4098
  Board name:                                    AMD Radeon HD 8600/8700M
  Device Topology:                               PCI[ B#1, D#0, F#0 ]
  Max compute units:                             6
  Max work items dimensions:                     3
    Max work items[0]:                           256
    Max work items[1]:                           256
    Max work items[2]:                           256
  Max work group size:                           256
  Preferred vector width char:                   4
  Preferred vector width short:                  2
  Preferred vector width int:                    1
  Preferred vector width long:                   1
  Preferred vector width float:                  1
  Preferred vector width double:                 1
  Native vector width char:                      4
  Native vector width short:                     2
  Native vector width int:                       1
  Native vector width long:                      1
  Native vector width float:                     1
  Native vector width double:                    1
  Max clock frequency:                           825Mhz
  Address bits:                                  32
  Max memory allocation:                         1073741824
  Image support:                                 Yes
  Max number of images read arguments:           128
  Max number of images write arguments:          8
  Max image 2D width:                            16384
  Max image 2D height:                           16384
  Max image 3D width:                            2048
  Max image 3D height:                           2048
  Max image 3D depth:                            2048
  Max samplers within kernel:                    16
  Max size of kernel argument:                   1024
  Alignment (bits) of base address:              2048
  Minimum alignment (bytes) for any datatype:    128
  Single precision floating point capability
    Denorms:                                     No
    Quiet NaNs:                                  Yes
    Round to nearest even:                       Yes
    Round to zero:                               Yes
    Round to +ve and infinity:                   Yes
    IEEE754-2008 fused multiply-add:             Yes
  Cache type:                                    Read/Write
  Cache line size:                               64
  Cache size:                                    16384
  Global memory size:                            2009071616
  Constant buffer size:                          65536
  Max number of constant args:                   8
  Local memory type:                             Scratchpad
  Local memory size:                             32768
  Kernel Preferred work group size multiple:     64
  Error correction support:                      0
  Unified memory for Host and Device:            0
  Profiling timer resolution:                    1
  Device endianess:                              Little
  Available:                                     Yes
  Compiler available:                            Yes
  Execution capabilities:                                
    Execute OpenCL kernels:                      Yes
    Execute native function:                     No
  Queue properties:                              
    Out-of-Order:                                No
    Profiling :                                  Yes
  Platform ID:                                   0x00007f33cbfb54c0
  Name:                                          Oland
  Vendor:                                        Advanced Micro Devices, Inc.
  Device OpenCL C version:                       OpenCL C 1.2 
  Driver version:                                1348.4 (VM)
  Profile:                                       FULL_PROFILE
  Version:                                       OpenCL 1.2 AMD-APP (1348.4)
  Extensions:                                    cl_khr_fp64 cl_amd_fp64 cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_int64_base_atomics cl_khr_int64_extended_atomics cl_khr_3d_image_writes cl_khr_byte_addressable_store cl_khr_gl_sharing cl_ext_atomic_counters_32 cl_amd_device_attribute_query cl_amd_vec3 cl_amd_printf cl_amd_media_ops cl_amd_media_ops2 cl_amd_popcnt cl_khr_image2d_from_buffer

DOGE mining also works with cgminer-gpu from AUR with 55Kh/s at intensity 10:

cgminer version 3.7.2 - Started: [2014-01-16 18:39:45]
 (5s):54.25K (avg):48.66Kh/s | A:64  R:0  HW:0  WU:42.1/m
 ST: 2  SS: 0  NB: 3  LW: 19  GF: 0  RF: 0
 Connected to xxx diff 16 with stratum as user xxx
 Block: daa10059...  Diff:505  Started: [18:39:58]  Best share: 97
 [P]ool management [G]PU management [S]ettings [D]isplay options [Q]uit
 GPU 0:                | 54.25K/48.66Kh/s | A:64 R:0 HW:0 WU: 42.1/m I:10
 [2014-01-16 18:39:44] Started cgminer 3.7.2
VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)

AMD OpenCL on arch linux

Due to an old AMD Radeon HD 4890 graphics card, I was forced to use the additional repos xorg112 and catalyst-hd234k to get a working AMD legacy fglrx / X server duo. Till now, clinfo runs fine. However, in order to compile OpenCL applications I installed the amdapp-sdk package from AUR. Afterwards, clinfo and every other OpenCL binary segfaulted instantaneously due to mixed OpenCL versions. Replacing /opt/AMDAPP/SDK/lib/ with /usr/lib/ solved this issue.

catalyst-utils: /usr/lib/
amdapp-sdk: /opt/AMDAPP/SDK/lib/

The GPU load can be monitored using the following command:

aticonfig --adapter=0 --od-getclocks
VN:F [1.9.22_1171]
Rating: 6.0/10 (1 vote cast)

Python-social-auth requires real hostname when using apache+gunicorn

After a successful authentication using google-oauth2 with the python-social-auth tool, the client gets redirected to a ../complete/ page. However, after forwarding all non-static traffic from the apache to a local gunicorn server, the redirection url points to http://localhost:8000/complete rather than to the real website. This can be easily fixed by enabling the ProxyPreserveHost setting in the apache config:

<VirtualHost *:80>
        ServerAdmin ...
        ServerName ...
        Alias /static /.../static
        DocumentRoot ...
        <Directory ...>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        ProxyPreserveHost on
        RewriteEngine on
        RewriteRule ^/static/.* - [L]
        # Django is run via gunicorn. So proxy the rest.
        RewriteRule ^(.*) http://localhost:8000$1 [P]

VN:F [1.9.22_1171]
Rating: 5.0/10 (1 vote cast)

Supervisord at 100% load for gunicorn

Starting a gunicorn django server with the supervisord daemon using the deprecated gunicorn_django command works but results in 100% load of the supervisor process.

process_name=gunicorn  ; process_name expr (default %(program_name)s)
numprocs=1                    ; number of processes copies to start (def 1)
directory=/home/gunicorn  ; directory to cwd to before exec (def no cwd)
autostart=true                ; start at supervisord start (default: true)
autorestart=true        ; whether/when to restart (default: unexpected)
user=gunicorn                   ; setuid to this UNIX account to run the program
redirect_stderr=true          ; redirect proc stderr to stdout (default false)

After adding gunicorn to the INSTALLED_APPS in the project settings, the gunicorn server can be easily started with the python run_gunicorn command and everything works fine.

VN:F [1.9.22_1171]
Rating: 6.0/10 (1 vote cast)