January 16, 2012

Walter Bright dmd'yi mikroişlemcinin SIMD işlemlerinden de yararlanacak biçimde değiştirmeye başladı. Şimdilik alfa düzeyinde ama deneyenle otuz kat hız kazancı görüyorlar.

SIMD, mikroişlemcilerin tek komutlara birden fazla veriyi koşut olarak işleme yeteneği.

Anladığım kadarıyla byte16, float4, vs. gibi yeni tür isimleri geliyor ve bunlar üzerinde yapılan işlemler mikroişlemci tarafından otomatik olarak hızlanmış oluyor. Sanırım float4, "dört adet float" demek ve o değişken üzerindeki işlem dördünde birden yapılıyor. Walter'ın test kodu olarak gösterdiği program şu:

import core.simd;

void test1a(float[4] a) { }

void test1()
{
   float[4] a = 1.2;
   a[] = a[] * 3 + 7;
   test1a(a);
}

void test2a(float4 a) { }

void test2()
{
   float4 a = 1.2;
   a = a * 3 + 7;
   test2a(a);
}

import std.stdio;
import std.datetime;

int main()
{
   test1();
   test2();
   auto b = comparingBenchmark!(test1, test2, 100);
   writeln(b.point);
   return 0;
}

Not: O kod elinizdeki derleyiciyle derlenemez!

Şurada başka test kodları da var:

https://github.com/D-Programming-Language/dmd/blob/master/test/runnable/testxmm.d

Kendisi 2.5 kat hız kazancı görüyor ama başkaları otuz kat gördüklerini söylüyorlar. :)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]