<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>I See Dead Code &#187; hardware</title>
	<atom:link href="http://shlomme.diotavelli.net/category/hardware/feed/" rel="self" type="application/rss+xml" />
	<link>http://shlomme.diotavelli.net</link>
	<description>… as sounding brass, or a tinkling cymbal.</description>
	<lastBuildDate>Sun, 12 Jul 2009 19:38:04 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Oh my god—it&#8217;s full of cores!</title>
		<link>http://shlomme.diotavelli.net/2009/05/24/gpu-computing/</link>
		<comments>http://shlomme.diotavelli.net/2009/05/24/gpu-computing/#comments</comments>
		<pubDate>Sun, 24 May 2009 16:17:48 +0000</pubDate>
		<dc:creator>shlomme</dc:creator>
				<category><![CDATA[hardware]]></category>
		<category><![CDATA[lang:en]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://shlomme.diotavelli.net/?p=204</guid>
		<description><![CDATA[Beginnings
After the bleak, joyless work of releasing software, plugging holes of preventing users from clicking buttons they should not have clicked in the first place, writing unctuous documentation and release notes and wrapping code into neat little installers with tiny bows and bells that gently tingle when touched, there are few things as profoundly satisfying [...]]]></description>
			<content:encoded><![CDATA[<h5>Beginnings</h5>
<p>After the bleak, joyless work of releasing software, plugging holes of preventing users from clicking buttons they should not have clicked in the first place, writing unctuous documentation and release notes and wrapping code into neat little installers with tiny bows and bells that gently tingle when touched, there are few things as profoundly satisfying as taking code that looked like line noise in the first place, applying some non-trivial transformation to it and still have it look like line noise, only now it&#8217;s twice as fast, or half as long or of some other inaccessible quality that can, on some technical level, be referred to as &#8220;cool&#8221;.</p>
<p>Quite some time ago, I decided that this time, &#8220;cool&#8221; will mean &#8220;runs on graphics hardware, possibly faster&#8221;. For this end, I took my trusty T61 to work, downloaded the latest <a href="http://www.nvidia.com/object/cuda_home.html">CUDA toolkit</a>, found out that nearly all examples crashed when compiled, installed the latest beta drivers from NVIDIA, noticed that everything worked now and started playing around with the examples. </p>
<p>After some time marveling at ball pit simulations and similarly telling examples, I printed out the <a href="http://developer.download.nvidia.com/compute/cuda/2_2/toolkit/docs/NVIDIA_CUDA_Programming_Guide_2.2.pdf">CUDA programming guide</a> and spent a considerable amount of time marveling at how well the NVidia green looked when printed with our institute&#8217;s color laser printer, before reading its more important parts.<br />
<span id="more-204"></span></p>
<h5>Technical Details</h5>
<p>Roughly said, modern graphics hardware from NVIDIA consists of an array of multiprocessors. Each multiprocessor has eight cores, some shared memory, a controller unit and units for transcendental functions. Kernels (methods that run on the device, as opposed to host code) are automatically distributed to the available multiprocessors (their number depending on the hardware, with as many as 120 on the Tesla cards). </p>
<p>Kernel invocations are organized in 3-dimensional thread blocks and 2-dimensional grids. A single thread block can have at most 512 threads (i.e. x × y × z ⩽ 512) and is always executed by a single multiprocessor. Thread blocks are organized in a grid (with at most 65,536 elements on each dimension), which are distributed to the available multiprocessors, and thus inherently scalable. </p>
<p>A multiprocessor divides the threads of a block into <em>warps</em> and all threads of a single warp are executed in parallel. Optimal performance is reached when the control flow in threads of the same warp does not diverge based on the input data, the cores are optimized to execute the same code in several threads on different data (therefore the name SIMT—Single instruction, multiple thread—for this architecture). </p>
<p>There is also a memory hierarchy, from registers to on-die shared memory to global device memory. Data has to be explicitly copied from the system RAM to device memory, which is costly and should be minimized.</p>
<p>In other words, if you have a computation that has to be executed many, many times on different input data, move it the GPU instead and use the freed CPU cycles for shuffling around the data. In other words, ZOOOOOOM.</p>
<h5>Some Experiments</h5>
<p>Back in the day, we had to write code for training <a href="http://shlomme.diotavelli.net/2008/03/13/gmm-code/">Gaussian Mixture Models</a>. At the core of the algorithm, an auxiliary vector containing each point in the training set has to be created for each Gaussian. The creation of the auxiliar vector includes exponentiation, which proved to be quite costly, since it accounted for 50% of the running time of the program<sup>1</sup>. </p>
<p>Instead of doing comparedly boring optimization work for running that algorithm on a single processor, and even more boring work to have it run on two processors, I partially ported it to have the auxiliary vectors be computed on the GPU, with the result that by moving only this one part of the computation leads to the three-fold speed increase for the whole program. </p>
<p>On my machine (2 GiB RAM, 2.2 GHz Core 2 Duo, NVS 140M with 2 multiprocessors), running the C++-only version<sup>2</sup> takes 33s for 90,000 points and three Gaussians. Running the computation with the same data set on the GPU takes 11s. </p>
<h5>How is it done</h5>
<p>In order to invoke a kernel running on the GPU, the code has to be compiled with <tt>nvcc</tt>, NVIDIA&#8217;s compiler for CUDA. It separates device, which is compiled to some binary code, from host code which is transformed and handed over to the platform compiler. Therefore, it is needed to write some intermediate methods which can be called from &#8220;normal&#8221; C++ and that take care of shuffling data to the device and invoking the kernel methods<sup>3</sup>:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">typedef</span> <span style="color: #993333;">float</span> PROB<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #339933;">#define BLOCK_SIZE 16</span>
&nbsp;
Matrix d_in<span style="color: #339933;">;</span>
Matrix d_out<span style="color: #339933;">;</span>
&nbsp;
__device__ __constant__ KernelGaussian d_params<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">20</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">extern</span> <span style="color: #ff0000;">&quot;C&quot;</span>
<span style="color: #993333;">void</span> LoadPoints<span style="color: #009900;">&#40;</span>Matrix in<span style="color: #339933;">,</span> size_t params<span style="color: #009900;">&#41;</span> 
<span style="color: #009900;">&#123;</span>
    d_in.<span style="color: #202020;">height</span> <span style="color: #339933;">=</span> in.<span style="color: #202020;">height</span><span style="color: #339933;">;</span>
    d_in.<span style="color: #202020;">width</span> <span style="color: #339933;">=</span> in.<span style="color: #202020;">width</span><span style="color: #339933;">;</span>    
    size_t size_in <span style="color: #339933;">=</span> in.<span style="color: #202020;">width</span> <span style="color: #339933;">*</span> in.<span style="color: #202020;">height</span> <span style="color: #339933;">*</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span>PROB<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    cutilSafeCall<span style="color: #009900;">&#40;</span>cudaMalloc<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #339933;">**</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>d_in.<span style="color: #202020;">elements</span><span style="color: #339933;">,</span> size_in<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    cutilSafeCall<span style="color: #009900;">&#40;</span>cudaMemcpy<span style="color: #009900;">&#40;</span>d_in.<span style="color: #202020;">elements</span><span style="color: #339933;">,</span> in.<span style="color: #202020;">elements</span><span style="color: #339933;">,</span> size_in<span style="color: #339933;">,</span> cudaMemcpyHostToDevice<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    d_out.<span style="color: #202020;">width</span> <span style="color: #339933;">=</span> in.<span style="color: #202020;">width</span><span style="color: #339933;">;</span>
    d_out.<span style="color: #202020;">height</span> <span style="color: #339933;">=</span> params<span style="color: #339933;">;</span>
&nbsp;
    size_t size_out <span style="color: #339933;">=</span> d_out.<span style="color: #202020;">width</span> <span style="color: #339933;">*</span> d_out.<span style="color: #202020;">height</span> <span style="color: #339933;">*</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span>PROB<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    cudaMalloc<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #339933;">**</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>d_out.<span style="color: #202020;">elements</span><span style="color: #339933;">,</span> size_out<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
__global__ <span style="color: #993333;">void</span> computeAuxVectors<span style="color: #009900;">&#40;</span>Matrix in<span style="color: #339933;">,</span> Matrix out<span style="color: #009900;">&#41;</span> 
<span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">int</span> p <span style="color: #339933;">=</span> blockIdx.<span style="color: #202020;">y</span> <span style="color: #339933;">*</span> BLOCK_SIZE <span style="color: #339933;">+</span> threadIdx.<span style="color: #202020;">y</span><span style="color: #339933;">;</span>
    KernelGaussian g <span style="color: #339933;">=</span> d_params<span style="color: #009900;">&#91;</span>blockIdx.<span style="color: #202020;">x</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    PROB d <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>in.<span style="color: #202020;">elements</span><span style="color: #009900;">&#91;</span>p<span style="color: #009900;">&#93;</span> <span style="color: #339933;">-</span> g.<span style="color: #202020;">mean</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">/</span> g.<span style="color: #202020;">stddev</span><span style="color: #339933;">;</span>
    out.<span style="color: #202020;">elements</span><span style="color: #009900;">&#91;</span>blockIdx.<span style="color: #202020;">x</span> <span style="color: #339933;">*</span> out.<span style="color: #202020;">width</span> <span style="color: #339933;">+</span> p<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> g.<span style="color: #202020;">factor</span> <span style="color: #339933;">*</span> expf<span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span><span style="color:#800080;">0.5</span><span style="color: #339933;">*</span>d<span style="color: #339933;">*</span>d<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">extern</span> <span style="color: #ff0000;">&quot;C&quot;</span>
<span style="color: #993333;">void</span> RunComputeAuxVectors<span style="color: #009900;">&#40;</span>
        KernelGaussian<span style="color: #339933;">*</span> g<span style="color: #339933;">,</span> 
        std<span style="color: #339933;">::</span><span style="color: #202020;">vector</span><span style="color: #339933;">&lt;</span>std<span style="color: #339933;">::</span><span style="color: #202020;">vector</span><span style="color: #339933;">&lt;</span>PROB<span style="color: #339933;">&gt;</span> <span style="color: #339933;">&gt;&amp;</span> out<span style="color: #339933;">,</span> 
        size_t points<span style="color: #339933;">,</span> size_t params<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    cutilSafeCall<span style="color: #009900;">&#40;</span>
        cudaMemcpyToSymbol<span style="color: #009900;">&#40;</span>
          d_params<span style="color: #339933;">,</span> g<span style="color: #339933;">,</span> 
          params<span style="color: #339933;">*</span><span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span>KernelGaussian<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> 
          <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> cudaMemcpyHostToDevice<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    dim3 dimGrid<span style="color: #009900;">&#40;</span>params<span style="color: #339933;">,</span> points <span style="color: #339933;">/</span> BLOCK_SIZE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    dim3 dimBlock<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> BLOCK_SIZE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    computeAuxVectors<span style="color: #339933;">&lt;&lt;&lt;</span>dimGrid<span style="color: #339933;">,</span> dimBlock<span style="color: #339933;">&gt;&gt;&gt;</span><span style="color: #009900;">&#40;</span>d_in<span style="color: #339933;">,</span> d_out<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    cutilCheckMsg<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Kernel execution failed&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>size_t i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> params<span style="color: #339933;">;</span> <span style="color: #339933;">++</span>i<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        cutilSafeCall<span style="color: #009900;">&#40;</span>
            cudaMemcpy<span style="color: #009900;">&#40;</span>
              <span style="color: #339933;">&amp;</span>out<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>d_out.<span style="color: #202020;">elements</span><span style="color: #009900;">&#91;</span>i <span style="color: #339933;">*</span> points<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> 
              <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span>PROB<span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> points<span style="color: #339933;">,</span> 
              cudaMemcpyDeviceToHost<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>The matrix <tt>d_in</tt> holds the points, which are constant over the whole computation and therefore copied over to the device exactly once. <tt>d_out</tt> is the matrix that holds the auxiliary values computed for each point and each Gaussians. For faster retrieval, the Gaussians are stored in constant device memory (<tt>d_params</tt>), which is set to contain 20 elements at most, i.e. the algorithm is limited to learn mixture models with at most 20 Gaussians. </p>
<p>In the method <tt>LoadPoints</tt>, device memory is allocated for the points and the output vectors and the points are copied from host to device memory using <tt>cudaMemcpy</tt>. </p>
<p>The actual invocation of the kernel is done in the host method <tt>RunComputeAuxVectors</tt>, which first copies the parameters into the constant storage and invokes the kernel <tt>computeAuxVectors</tt> using the new <tt><<<grid, block>>></tt> syntax. <tt>grid</tt> holds the dimensions of the grid, which is <emph>number of gaussians</em>× <em>points / BLOCK_SIZE</em>. The block size is the width of a thread block and somewhat arbitrarily chosen to be 16<sup>4</sup>, currently this also limits the number of points to be a multiple of 16<sup>5</sup>. After the blocking kernel invocation, the results are copied back into host memory.</p>
<p>Important:</p>
<ul>
<li>My card only supports single-precision floats, newer ones also have double-precision</li>
<li><tt>blockIdx</tt> and <tt>threadIdx</tt> are global variables provided by CUDA compiler</li>
<li><tt>__global__</tt> methods are run on the device and can be called from both host and device code</li>
<li>Currently, the device memory for <tt>d_in</tt> and <tt>d_out</tt> is never freed, the program simply exits</li>
</ul>
<h5>Results</h5>
<p>Working with CUDA is definitely fun (if rewarding), the system itself is quite unforgiving though. Wrapping each invocation of a CUDA method into <tt>cutilSafeCall</tt> therefore is strongly recommended, in case of an error it will print a (not always helpful) error message and exit. Though in this case the code running on the GPU itself is quite trivial, it can be hard to figure out what is going wrong, because the GPU itself is a black box, and it&#8217;s not possible to simply print out a message<sup>6</sup>. It&#8217;s possible to emulate the code on the CPU, and there are other tools available which I haven&#8217;t tried out. </p>
<p>I&#8217;ve also started toying around with my original idea, having the constraint checks for the TIGER query evaluation run on the graphics hardware and initial results are mixed. Still, if nothing at all, this gives me justification to spent a lot of money on expensive graphics hardware for my next computer—it&#8217;s all for science, this harsh and demanding mistress.</p>
<ol class="footnotes"><li id="footnote_0_204" class="footnote">There might be a smart way of getting rid of the <tt>exp()</tt> call, though I haven&#8217;t found it yet</li><li id="footnote_1_204" class="footnote">compiled using g++ 4.4.0 -O3</li><li id="footnote_2_204" class="footnote">looking at the SDK examples was quite helpful here</li><li id="footnote_3_204" class="footnote">I didn&#8217;t try out other block sizes</li><li id="footnote_4_204" class="footnote">this is a restriction of the implementation, one could simply pad the points with however many zeros as needed and compute a little more</li><li id="footnote_5_204" class="footnote">or maybe it is, and I don&#8217;t know how to do it&#8230;</li></ol>]]></content:encoded>
			<wfw:commentRss>http://shlomme.diotavelli.net/2009/05/24/gpu-computing/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>New Hardware</title>
		<link>http://shlomme.diotavelli.net/2009/05/08/new-hardware/</link>
		<comments>http://shlomme.diotavelli.net/2009/05/08/new-hardware/#comments</comments>
		<pubDate>Fri, 08 May 2009 00:07:48 +0000</pubDate>
		<dc:creator>shlomme</dc:creator>
				<category><![CDATA[hardware]]></category>
		<category><![CDATA[lang:en]]></category>

		<guid isPermaLink="false">http://shlomme.diotavelli.net/?p=176</guid>
		<description><![CDATA[Even before I started working at UZH, I got my new hardware. Back in February, when I visited Zürich to look for rooms, I was offered to choose a new notebook for myself. Since I already have a large notebook (at least that&#8217;s what I consider my 14.1&#8243; T61) and toyed around with the idea [...]]]></description>
			<content:encoded><![CDATA[<p>Even before I started working at UZH, I got my new hardware. Back in February, when I visited Zürich to look for rooms, I was offered to choose a new notebook for myself. Since I already have a large notebook (at least that&#8217;s what I consider my 14.1&#8243; T61) and toyed around with the idea of getting a desktop again (after 4 years of exclusive notebook use!), I chose an <a href="http://www.thinkwiki.org/wiki/Category:X301">X301</a>. I included some hardware upgrades that weren&#8217;t included in the basic offer:</p>
<ul>
<li>+2 GB RAM (4 GB overall)</li>
<li>3G card</li>
<li>USB Port Replicator</li>
<li>DisplayPort->DVI converter</li>
</ul>
<p>Being in Switzerland, I had the choice between CH and US keyboard layout. Since CH is physically the same as the German layout (105 keys), I took it and haven&#8217;t really noticed that the keys have different symbols (as far as most of the special characters are concered) printed on that what appears on the screen when I hit them. I should really get <a href="http://www.daskeyboard.com/">Das Keyboard</a> after all.</p>
<p>The X301 is not quite the workhorse the T61 is, which is especially noticeable from graphics speed, although that might be due to an Intel driver being in several different transitions right now. The SSD compensates for that, booting and starting up is a breeze. Fortunately, I don&#8217;t have to do much booting these days, because unlike other major graphics hardware creators, Intel&#8217;s developers are able to support powersave modes on Linux hardware, both Suspend-to-RAM and Suspend-to-disk.</p>
<p>Everything else works more or less, even the DisplayPort, dutyfully serving my 24&#8243; screen at the university. The pièce de résistance is definitely the 3G card. I had to install it myself, which was quite a bit more involved than what I would have liked, but it worked on the second try. I got myself a prepaid data contract which allows me to surf the net for 3 CHF/h, which is a good complement to free wireless access at most public hotspots in Switzerland, which is due to <a href="http://www.switch.ch/">SWITCH</a>. The wireless became especially hand today, when I was shopping for a new router without having a clue about what&#8217;s good. Standing in the Media Markt (yes, this very pillar of the German retail market also metastasised into Switzerland) network hardware aisles browsing the web with a notebook probably didn&#8217;t look as superior as doing the same thing with a smartphone, but it helped me finding a router.</p>
<p>What really sets the X301 apart is the weight. I&#8217;m quite used to it by now, since I&#8217;ve had it for over a month, but it&#8217;s usually the first response I get when I hand it over to somebody else. It is, however, very noticeable in direct comparison, and the T61 feels clunky and hugely oversized when I carry it around or use it on my lap. The battery lifetime is okay, usually I get 3h under Linux. There&#8217;s probably some more running time to be gotten, but I&#8217;m more or less done tweaking the system for now and using it for actual work; or for blogging, emailing and chatting on my nice, new, comfy chair.</p>
]]></content:encoded>
			<wfw:commentRss>http://shlomme.diotavelli.net/2009/05/08/new-hardware/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Testing something nouveau</title>
		<link>http://shlomme.diotavelli.net/2008/08/19/testing-something-nouveau/</link>
		<comments>http://shlomme.diotavelli.net/2008/08/19/testing-something-nouveau/#comments</comments>
		<pubDate>Tue, 19 Aug 2008 19:45:46 +0000</pubDate>
		<dc:creator>shlomme</dc:creator>
				<category><![CDATA[hardware]]></category>
		<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://shlomme.diotavelli.net/?p=94</guid>
		<description><![CDATA[Given the ever-shifting pain with the Linux Nvidia drivers (lockups, no Suspend-to-Disk, shaky Suspend-to-RAM, bad 2D performance in FF3/KDE 4.1), I finally gave nouveau a try on my ThinkPad T61, since a package entered the Debian repositories.
Upsides
For such an early release and given my kind-of new and kind-of exotic hardware (Quadro NVS 140M, a G86), [...]]]></description>
			<content:encoded><![CDATA[<p>Given the ever-shifting pain with the Linux Nvidia drivers (lockups, no Suspend-to-Disk, shaky Suspend-to-RAM, bad 2D performance in FF3/KDE 4.1), I finally gave <a href="http://nouveau.freedesktop.org/">nouveau</a> a try on my ThinkPad T61, since a package entered the Debian repositories.</p>
<h5>Upsides</h5>
<p>For such an early release and given my kind-of new and kind-of exotic hardware (Quadro NVS 140M, a G86), it worked quite well. XRandR 1.2 is a breeze, and 2D performance was ok. No hard lockups, either.</p>
<p>So, in short terms, what does work:</p>
<ul>
<li>XRandR 1.2</li>
<li>External Output</li>
<li>Somehow fast 2D</li>
</ul>
<h5>Downsides</h5>
<p>I couldn&#8217;t put my finger on it, but I think the picture quality on the VGA port was lower than with the Nvidia drivers (I have an external screen with a 1680&#215;1050 resolution). Also, video overlay doesn&#8217;t work yet on the newest cards, so the video output was very grainy.</p>
<p>I also saw a lot of wrongly rendered pixmaps in FF3. No real showstopper, but also not very nice. Also, suspend/resume didn&#8217;t work yet.</p>
<p>I have changed back to the Nvidia driver for now.</p>
]]></content:encoded>
			<wfw:commentRss>http://shlomme.diotavelli.net/2008/08/19/testing-something-nouveau/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Computerlinguisten wissen, was taugt</title>
		<link>http://shlomme.diotavelli.net/2007/12/12/computerlinguisten-wissen-was-taugt/</link>
		<comments>http://shlomme.diotavelli.net/2007/12/12/computerlinguisten-wissen-was-taugt/#comments</comments>
		<pubDate>Wed, 12 Dec 2007 18:13:38 +0000</pubDate>
		<dc:creator>shlomme</dc:creator>
				<category><![CDATA[hardware]]></category>
		<category><![CDATA[lang:de]]></category>
		<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://shlomme.diotavelli.net/2007/12/12/computerlinguisten-wissen-was-taugt/</guid>
		<description><![CDATA[

Nicht abgebildet: Das T60 der Dozentin.
]]></description>
			<content:encoded><![CDATA[<p><img width="400" style="margin-left:10px" src="http://shlomme.diotavelli.net/images/thinkpads.jpeg" title="Drei ThinkPads" alt="Drei ThinkPads" /><br />
</p>
<p>Nicht abgebildet: Das T60 der Dozentin.</p>
]]></content:encoded>
			<wfw:commentRss>http://shlomme.diotavelli.net/2007/12/12/computerlinguisten-wissen-was-taugt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Das erste Notebook, ein kurzer Abriss</title>
		<link>http://shlomme.diotavelli.net/2007/07/08/55/</link>
		<comments>http://shlomme.diotavelli.net/2007/07/08/55/#comments</comments>
		<pubDate>Sun, 08 Jul 2007 16:40:09 +0000</pubDate>
		<dc:creator>shlomme</dc:creator>
				<category><![CDATA[hardware]]></category>
		<category><![CDATA[lang:de]]></category>
		<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://shlomme.diotavelli.net/2007/07/08/55/</guid>
		<description><![CDATA[Wie schreibt man einen Nachruf auf ein Stück Hardware, ohne von allen Menschen für total verkehrt und jeglicher normal gestalteten menschlichen Beziehung unfähig erklärt zu werden? Darf man Hardware überhaupt mögen, oder qualifiziert das schon unter Technophilie? Doch hat nicht der Fotograf hat seine Leica, der Poser seinen Mac, der Linguist seine Wortliste?  Warum [...]]]></description>
			<content:encoded><![CDATA[<p>Wie schreibt man einen Nachruf auf ein Stück Hardware, ohne von allen Menschen für total verkehrt und jeglicher normal gestalteten menschlichen Beziehung unfähig erklärt zu werden? Darf man Hardware überhaupt mögen, oder qualifiziert das schon unter Technophilie? Doch hat nicht der Fotograf hat seine Leica, der Poser seinen Mac, der Linguist seine Wortliste?  Warum also nicht einem Torsten sein Notebook?</p>
<p>Im Oktober 2004 fing so auch bei mir das Zeitalter des mobilen Rechnens an, und seitdem war ich selten länger als eine Woche von meinem Notebook getrennt. Ob ich beim ersten Praktikum bei FAST zur Schande der Firma an meinem eigenen Rechner gearbeitet, in Schweden mit mehreren MBit aus dem Internet gesaugt, in Bochum die Nächte durchzockt, in Heidelberg am PhraseHunter gehackt, in Tübingen in der großen Datenpromiskuität teilgenommen oder in Gladbeck damit meinen BA geschrieben habe – mein T41p hat mir immer treue Dienste geleistet.</p>
<p>Eine kleine Zusammenfassung:</p>
<ul>
<li>mehrere hundert Stunden Spielspaß</li>
<li>einige Notabschaltungen beim Erstellen von FSTs im Hitzesommer 06</li>
<li>12 Kernelversionen (2.6.9 &#8211; .21, mit Ausnahme von 2.6.11)</li>
<li>4 Umzüge</li>
<li>1 Reparatur</li>
<li>0 zufriedenstellende Grafiktreiber für Linux</li>
</ul>
<p>Was bleibt? Auf jeden Fall eine Vorliebe für ThinkPads und die Frage, ob Desktop-Rechner noch Sinn machen. So, genug Reflexion…  Ab jetzt wirklich nur noch Substanz.</p>
]]></content:encoded>
			<wfw:commentRss>http://shlomme.diotavelli.net/2007/07/08/55/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Breitwandbloggen</title>
		<link>http://shlomme.diotavelli.net/2007/07/08/breitwandbloggen/</link>
		<comments>http://shlomme.diotavelli.net/2007/07/08/breitwandbloggen/#comments</comments>
		<pubDate>Sun, 08 Jul 2007 15:07:23 +0000</pubDate>
		<dc:creator>shlomme</dc:creator>
				<category><![CDATA[hardware]]></category>
		<category><![CDATA[lang:de]]></category>
		<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://shlomme.diotavelli.net/2007/07/08/breitwandbloggen/</guid>
		<description><![CDATA[Endlich wieder Regen und kein schlechtes Gewissen mehr, dass ich meinen neuen Rechner immer noch testfahre. Mittlerweile hab ich auch fast alles ans Laufen bekommen, einen minimalen Report gibt es hier.
In einer nächtlichen Aktion habe ich gestern auch tatsächlich Windows XP installiert, nachdem Vista nach ein paar Stunden auf wundersame Art und Weise mitsamt der [...]]]></description>
			<content:encoded><![CDATA[<p>Endlich wieder Regen und kein schlechtes Gewissen mehr, dass ich meinen neuen Rechner immer noch testfahre. Mittlerweile hab ich auch fast alles ans Laufen bekommen, einen minimalen Report gibt es <a href="http://www.thinkwiki.org/wiki/Installing_Debian_Lenny_on_a_ThinkPad_T61">hier</a>.</p>
<p>In einer nächtlichen Aktion habe ich gestern auch tatsächlich Windows XP installiert, nachdem Vista nach ein paar Stunden auf wundersame Art und Weise mitsamt der Wiederherstellungspartition seinen Hut nahm und zuletzt auf dem Weg nach Kuba gesichtet wurde, um einige Exportrestriktionen ad absurdum zu führen.</p>
<p>Bisher bin ich eigentlich auch recht zufrieden, abgesehen von einigen kleineren Unschönheiten (Hardware-Mixer und Lautstärkeregler gehen nicht etc.), man hätte es schlimmer erwarten können. So kann ich mich also daran erfreuen, ganze drei ThinkPad-Generationen (T42, T43, T60) übersprungen zu haben und mich überall dort, wo man sich ausstattungsmäßig verbessern konnte, auch verbessert habe.</p>
<p>So, genug der Weihrauchverteilung, ab jetzt nur noch Substanz.</p>
]]></content:encoded>
			<wfw:commentRss>http://shlomme.diotavelli.net/2007/07/08/breitwandbloggen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Die Tage sind gezählt!</title>
		<link>http://shlomme.diotavelli.net/2007/06/28/die-tage-sind-gezahlt/</link>
		<comments>http://shlomme.diotavelli.net/2007/06/28/die-tage-sind-gezahlt/#comments</comments>
		<pubDate>Thu, 28 Jun 2007 12:22:59 +0000</pubDate>
		<dc:creator>shlomme</dc:creator>
				<category><![CDATA[hardware]]></category>
		<category><![CDATA[lang:de]]></category>
		<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://shlomme.diotavelli.net/2007/06/28/die-tage-sind-gezahlt/</guid>
		<description><![CDATA[Sehr geehrter Kunde,Der Status Ihrer Bestellung wurde geändert. Neuer Status: VersendetAnmerkungen und Kommentare zu Ihrer Bestellung: Als kleine Entschädigung für die längere Wartezeit haben wir Ihre Garantieerweiterung kostenlos auf den 4-Jahres vor-Ort Service erhöht und Ihnen ein Neopren-Sleeve beigelegt.
Torsten meint: Da wartet man doch gerne eine Woche länger!
]]></description>
			<content:encoded><![CDATA[<p><i>Sehr geehrter Kunde,<br/>Der Status Ihrer Bestellung wurde geändert. Neuer Status: <b>Versendet</b><br/>Anmerkungen und Kommentare zu Ihrer Bestellung: Als kleine Entschädigung für die längere Wartezeit haben wir Ihre Garantieerweiterung kostenlos auf den 4-Jahres vor-Ort Service erhöht und Ihnen ein Neopren-Sleeve beigelegt.</i></p>
<p>Torsten meint: Da wartet man doch gerne eine Woche länger!</p>
]]></content:encoded>
			<wfw:commentRss>http://shlomme.diotavelli.net/2007/06/28/die-tage-sind-gezahlt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>„If Batman had a laptop, it would be a ThinkPad.”</title>
		<link>http://shlomme.diotavelli.net/2007/06/14/%e2%80%9eif-batman-had-a-laptop-it-would-be-a-thinkpad%e2%80%9d/</link>
		<comments>http://shlomme.diotavelli.net/2007/06/14/%e2%80%9eif-batman-had-a-laptop-it-would-be-a-thinkpad%e2%80%9d/#comments</comments>
		<pubDate>Thu, 14 Jun 2007 21:33:46 +0000</pubDate>
		<dc:creator>shlomme</dc:creator>
				<category><![CDATA[hardware]]></category>
		<category><![CDATA[lang:de]]></category>
		<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://shlomme.diotavelli.net/2007/06/14/%e2%80%9eif-batman-had-a-laptop-it-would-be-a-thinkpad%e2%80%9d/</guid>
		<description><![CDATA[Der eigentliche Grund für mich, ein Jahr zu arbeiten ist nicht etwa der erwartete Kompetenzgewinn, die netten Leute oder die tollen Connections, sondern natürlich einzig und allein, damit ich mir einen neuen Laptop kaufen kann. Mein gutes T41p befindet sich ja schon im gesegneten Alter von 32 Monaten und hat auch viele Abenteuer hinter sich.
Um [...]]]></description>
			<content:encoded><![CDATA[<p>Der eigentliche Grund für mich, ein Jahr zu arbeiten ist nicht etwa der erwartete Kompetenzgewinn, die netten Leute oder die tollen Connections, sondern natürlich <b>einzig und allein</b>, damit ich mir einen neuen Laptop kaufen kann. Mein gutes T41p befindet sich ja schon im gesegneten Alter von 32 Monaten und hat auch viele Abenteuer hinter sich.</p>
<p>Um die Hardwarebasis für die nächsten 3 Jahre zu schaffen, habe ich mir in den letzten Wochen und Monaten das Gel aus den Haaren gespart und seit Monaten Hersteller- und Hardwareseiten durchwühlt, mit mir selbst gerungen und gewartet – auf die Erleuchtung, auf neue Modelle, auf eine Entscheidung.</p>
<p>Aber nun ist es soweit! Die Lieferzeiten für meinen Laptop der Wahl, ein <a href="http://www.notebooksandmore.net/xtcommerce/product_info.php?products_id=2135&#038;cPath=23_26_406_407">T61 ND114GE</a> sind auf lediglich eine Woche gefallen und nur noch die furchtsame Krämerseele in mir hielt mich für einige Stunden ab, die Bestellung abzuschicken. Dann aber verlor ich die Selbstkontrolle und unterlag den Lockungen der Technologie.</p>
<p>Zusammen mit der vielen Hardware kaufe ich mir natürlich auch mal wieder eine Herausforderung, um mein durch Vernachlässigung angerostetes Geek-Image wieder aufzumöbeln. Eine kleine Zusammenfassung der Treibersituation unter Linux:</p>
<ul>
<li><strong>Grafik</strong>: im neuesten Nvidia-Treiber unterstützt</li>
<li><strong>Sound</strong>: ALSA-Treiber in Entwicklung</li>
<li><strong>WLAN</strong>: Treiber von Intel in Entwicklung</li>
<li><strong>Intel Turbo Memory</strong>: noch nicht unterstützt</li>
</ul>
<p>Gute Zeiten kommen auf mich zu.</p>
]]></content:encoded>
			<wfw:commentRss>http://shlomme.diotavelli.net/2007/06/14/%e2%80%9eif-batman-had-a-laptop-it-would-be-a-thinkpad%e2%80%9d/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Nvidia vs. ATI</title>
		<link>http://shlomme.diotavelli.net/2007/05/13/nvidia-vs-ati/</link>
		<comments>http://shlomme.diotavelli.net/2007/05/13/nvidia-vs-ati/#comments</comments>
		<pubDate>Sun, 13 May 2007 19:24:19 +0000</pubDate>
		<dc:creator>shlomme</dc:creator>
				<category><![CDATA[hardware]]></category>
		<category><![CDATA[lang:en]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://shlomme.diotavelli.net/2007/05/13/nvidia-vs-ati/</guid>
		<description><![CDATA[The world has turned upside down. As I expected, AMD is opening the graphics drivers for ATI cards. At the same time – and I expected that as well, the new ThinkPad T61 comes with Nvidia graphics.
This does not make my search for a new laptop easier. I had more or less settled for another [...]]]></description>
			<content:encoded><![CDATA[<p>The world has turned upside down. As I expected, AMD is opening the <a href="http://enterpriselinuxlog.blogs.techtarget.com/2007/05/09/amd-will-deliver-open-graphics-drivers/">graphics drivers for ATI cards</a>. At the same time – and I expected that as well, the <a href="http://www.pc.ibm.com/europe/thinkpad/why/en/tseries.html?de&#038;cc=en&#038;cc=de">new ThinkPad T61</a> comes with Nvidia graphics.</p>
<p>This does not make my search for a new laptop easier. I had more or less settled for another ThinkPad, being quite satisfied with my almost 3 years old T41p, but now the ATI laptops are an alternative again. Moreover, I am not completely convinced that Lenovo keeps IBM&#8217;s quality standards.</p>
]]></content:encoded>
			<wfw:commentRss>http://shlomme.diotavelli.net/2007/05/13/nvidia-vs-ati/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
