Sito Eratostenesa, Ubuntu, Python i książki

Dzisiaj będzie o moich najświeższych zainteresowaniach, które skutecznie wyparły moje stare zainteresowania, jak choćby te do grafiki komputerowej, rysowania, itp. jakoś wymiera we mnie dusza artystyczna chyba.

Sito Eratostenesa i artykuł w Wyborczej

Przeczytawszy artykuł w Gazecie Wyborczej o pewnej programistce (patrz linki zewnętrzne) nie mogłem się powstrzymać od przepisania podanego tam algorytmu do postaci kodu źródłowego Pythona. Pierwszą barierą było zapoznanie się z sitem Eratostenesa właśnie, dalej już poszło gładko. Jednak przyznam szczerze - z samej treści zadania nie byłbym w stanie do tego dojść :]

Sito Eratostenesa pozwala wyznaczyć liczby pierwsze z podanego przedziału, nie jest to metoda najszybsza dla obliczeń komputerowych, ale daje obraz tego na jakiej zasadzie odbywać się może taka selekcja. Daje także duże pole do optymalizacji, o czym za chwilkę napiszę. Jeśli jednak ktoś potrzebuje wydajnego sposobu na znajdowanie liczb pierwszych w dużych przedziałach może spróbować sita Atkina, które wymaga mniej mocy obliczeniowej i pamięci. Tego jednak jeszcze nie sprawdzałem i nie mogę się podzielić własnym doświadczeniem.

Poniżej sito Eratostenesa w moim wykonaniu:

#! /usr/bin/env python
# -*- coding: utf-8 -*-
#
# Title:    Sito Eratostenesa
# Author:    Camelek.AmigaRulez
# License:    Public Domain
# Date:        poniedziałek, 13 sierpień 2012 22:22:55
#
 
# Określamy zakres poszukiwań
n = 150;
n += 1;
 
# Tworzymy listę i uzupełniamy ją liczbami od 2 do n
# Liczby 0 oraz 1 nie są liczbami pierwszymi
numbersTable = [];
for i in range(2, n):
    numbersTable.append(i);
 
print numbersTable;
 
# Wyszukiwanie i usuwanie liczb z listy nie będącymi liczbami pierwszymi
for i in numbersTable:
    for j in range(2, n):
        if ( i*j ) in numbersTable: numbersTable.remove(i*j);
 
print numbersTable;

Kolejnym krokiem będzie optymalizacja kodu źródłowego tak, by wykonywał obliczenia szybciej, by to osiągnąć postawiłem sobie za cel naukę OpenCL. Przeprowadziłem mały test, otóż zmodyfikowałem benchmark znajdujący się w zestawie PyOpenCL tak, by w wyniku pokazał wielokrotność przyspieszenia obliczeń przy użyciu PyOpenCL w porównaniu do czystego Pythona.

python ./benchmark-all.py 
Execution time of test without OpenCL:  15.4114880562 s
===============================================================
Platform name: Intel(R) OpenCL
Platform profile: FULL_PROFILE
Platform vendor: Intel(R) Corporation
Platform version: OpenCL 1.1 LINUX
---------------------------------------------------------------
Device name: Intel(R) Core(TM)2 CPU         T7200  @ 2.00GHz
Device type: CPU
Device memory:  2990 MB
Device max clock speed: 2000 MHz
Device compute units: 2
Execution time of test: 0.00802379 s
OpenCL / without OpenCL time:  1920.72521079
Results OK
[camelek@debian:OpenCL]$

Tak, to prawda. Program w OpenCL działa prawie 1921 razy szybciej niż ten wykonany przy użyciu czystych funkcji samego Pythona. To musi robić wrażenie :]

Książki

A może moja artystyczna dusza do końca nie umarła? Nie, samo czytanie jej nie przywróci. W każdym bądź razie obecnie czytam następujące pozycje:

  • Plany metra i sieci neuronowe
    • Przyznam, że o sieciach neuronowych to jest tam niewiele, a szkoda, bo tylko to mnie interesowało
  • Proroctwa królowej Saby
    • Okazało się, że królowa nie nazywała się Saba, tylko to było królestwo :] Książka dość ciężka, bo nie wiem do tej pory jak się królowa królestwa Saby nazywa.
  • 2012
    • W empiku za gratis do zakupów dostałem tą oto książkę, niby wszystko fajnie, bo kartki się trzymają, a napisy czytelne, ale czemu gratis to 1 gr? Mniejsza o to, w każdym bądź razie wnętrzności tejże książki na pewno nie będą skłaniać ludzi do częstszego czytania, jestem już na ostatniej powieści i szczerze mówiąc ledwo tam dobrnąłem, w wielkich bólach.

Ubuntu 12.04 LTS Precise Pangolin i problem ze skalowaniem procesora CPUFreq

Jeśli ktoś ma problem z automatycznym skalowaniem częstotliwości procesora, to proponuję usunięcie pliku konfiguracyjnego demona cpufreqd. Ten problem objawia się tym, że zaraz po starcie procesor nadal pozostaje na bardzo wysokich częstotliwościach, później zresztą też. Można to załatwić w sposób bezpieczny, poprzez zmianę nazwy.

mv /etc/cpufreqd.conf /etc/cpufreqd.conf.old

Linki zewnętrzne

O ile nie zaznaczono inaczej, treść tej strony objęta jest licencją GNU Free Documentation License.