Scimark je klasický numerický benchmark a já si tak pro zajímavost jednou za čas pouštím jeho Delphi port variantu, abych si ověřil jak je na tom 32bit Delphi a 64bit v jednotlivých verzích. Nikdy jsem neskrýval, že obecně mám radši 32bit kompilátor.
Předem upozorňuji, že je to jeden a ten samý kód, jen překládaný různými verzemi jak 32bit, tak 64bit. Jedná se o lehce upravený původní Delphi port, moje verze je 64bit kompatibilní a je tady ke stažení scimark.zip (200 kb).
Takže ještě jednou: stejný kód, takže teoretické chyby jsou stejné. A jedná se o numerický benchmark, ne obecný. Berte to prosím jako zajímavost, jak s tím naložíte je na Vás.
Bechmark obsahuje pět "kernelů", tj. testů (podrobnosti na prvním odkazu, ve zkratce):
Fast Fourier Transform (FFT) provede jednorozměrnou dopřednou transformaci 4K komplexních čísel. Toto jádro procvičuje komplexní aritmetiku, promíchávání, nekonstantní odkazy na paměť a trigonometrické funkce.
Jacobi Successive Over-relaxation (SOR) na 100x100 mřížce cvičení typických přístupových vzorů v aplikacích s konečnými diferencemi, například řešení Laplaceovy rovnice ve 2D s Drichletovými okrajovými podmínkami.
Monte Carlo aproximuje hodnotu PI výpočtem integrálu čtvrtkruhu y = sqrt(1 - x^2).
Sparse matrix mutiply používá nestrukturovanou řídkou matici uloženou ve formátu komprimovaných řádků s předepsanou řídkou strukturou.
dense LU matrix factorization vypočítá LU faktorizaci husté matice 100x100 pomocí částečného otáčení. Procvičuje jádra lineární algebry (BLAS) a operace s hustými maticemi.
(pozn. popis algoritmu je přes deepl s minimem oprav)
Nahoře je vždy celkové skóre, pod tím jednotlivé testy (vše mobilní AMD Ryzen 5 4500U, vše je single thread)
Delphi 2007
Delphi 2007 jako nejstarší verzi co mám a kterou sem tam použiji.
Delphi XE
Delphi XE8
32Bit
64Bit
Pozn. 32bit je plus minus jako DXE, které je trochu lepší než D2007
Delphi 11.3
32Bit
64Bit
Lehký vývoj hlavně v 64bit verzi.
Delphi 12.1
32Bit
64Bit
WTF? SOR 2x lepší a LU výrazně lepší v 64bit než v předchozí verzi. Nevím proč, resp. jsou jisté optimalizace, ale až tak?
Jinak následující nemá moc význam (existuje jen v 64bit).
{$FINITEFLOAT OFF}
{$EXCESSPRECISION OFF}
Obecně je ale velmi poznat rozdíl v numerice mezi 32bit, kde se používá klasické FPU asi pořád k vůli kompatibilitě (bohužel, velká škoda) a 64bit, kde se používají SSE2 instrukce.