Visualizzazione post con etichetta Altivec. Mostra tutti i post
Visualizzazione post con etichetta Altivec. Mostra tutti i post

mercoledì 16 maggio 2007

Il ritorno di Amiga?

Per chi si ricorda dei primi anni '90, Amiga sta per tornare!
la società ha infatti annunciato due modelli della serie Power System: il primo dal prezzo di 489 $ è basato sul MPC8349E di Freescale della stessa famiglia del MPC5200B usato dall' Efika, il secondo da 1.498 $ è basato sul PA6T di P.A.SEMI, le specifiche più dettagliate sono a questa pagina.
L' OS dovrebbe essere Amiga OS 4.

martedì 15 maggio 2007

PA6T-1682M un nuovo PowerPC

Fondata dallo stesso gruppo che diede vita al processore Alpha P.A. Semi, è una compagnia che sviluppa PowerPC, in particolare ha rilasciato il PA6T, prendendo in licenza il ppc970 (G5) da IBM.
Il punto di forza di questo nuovo processore sono i consumi ridotti: grazie alla tecnologia PWRficient vengono dissipati 7 W per core (ce ne possono essere fino ad otto) a 2GHz, considerando il processore nel suo insieme (con un controller per la memoria DDR2 ECC per core e per PCIe e gigabit ethernet) un biprocessore (sempre a 2 GHz) consuma al massimo 25 W contro i 100 del vecchio 970MP i 93 degli Athlon64 e gli 80 dei Core 2 Duo; considerando inoltre che la sua capacità di calcolo è di 4.400 MIPS, direi che si tratta di un ottimo processore.
Inoltre dispone di un' unità crittografica, che permette di facilitare gli algoritmi come CRC, RSA, etc...
A questo link trovate alcuni pdf con tutti i dettagli.

lunedì 14 maggio 2007

Compilare OpenSSL su Darwin 8 / Mac OS X 10.4 Tiger

OpenSSL é una libreria molto importante in un sistema operativo, infatti permette connessioni cifrate (e quindi protette) tra due computer, ad esempio viene usata dai browser ogni volta che si usa il protocollo https.
Per installare una nuova versione su Darwin 8 (o Mac OS X Tiger) si deve prima scaricare i sorgenti arrivatoi ad oggi alla versione 0.9.8e.
Lavorando come sempre da terminale scrivere:
./configure --prefix=/usr --openssldir=${prefix}/etc/openssl threads no-shared zlib no-asm no-krb5 darwin-ppc-cc

poi aprire makefile e fae le seguenti correzioni
CFLAGS -mcpu=7400 -mtune=7400 -fstrict-aliasing -fsched-interblock -freorder-blocks -fmodulo-sched -funroll-loops -floop-optimize2 -fpeel-loops -faltivec -ftree-vectorize

come al solito in caso non siate sicuri che il vostro G4 sia un 7400 scrivete G4, oppure G5 nel caso abbiate questo processore.
continuate sostituendo
CC= /usr/bin/gcc-4.0

e
MANDIR=/usr/share/man

dopodiché date il comando make e successivamente sudo make install.

Per problemi, suggerimenti ed altro usate i commenti.

sabato 28 aprile 2007

Compilare SQLite su Mac OS X 10.4 (Tiger)

SQLite, come suggerisce il nome stesso, è un database SQL (Structued Query Language) leggero, ma molto efficace.
Apple lo usa nel suo sistema operativo sia per gestire l' indice di spotlight, la sua teconologia di ricrca dei contenuti su disco, che come fondamento del framework coredata.
Se siete interessati ad aggiornare la versione a corredo o semplicemente volete effettuare una ottimizzazione più aggressiva. scaricate l' ultima versione disponibile dal sito (ad oggi la 3.3.17), scompattatela ed aprie il terminale potandovi all' interno della directory.
Quindi scrivete
./configure --prefix=/usr --mandir=/usr/share/man --build=powerpc-apple-darwin8.9.0 --host=powerpc-apple-darwin8.9.0 --target=powerpc-apple-darwin8.9.0 --enable-shared --enable-threadsafe --enable-cross-thread-connections --enable-threads-override-locks --enable-releasemode --enable-tempstore always --with-tcl=/System/Library/Frameworks/Tcl.framework --with-tclinclude=/System/Library/Frameworks/Tcl.framework/headers CFLAGS="-O3 -mcpu=7400 -mtune=7400 -fstrict-aliasing -fsched-interblock -freorder-blocks -funroll-loops -floop-optimize2 -fpeel-loops -fmodulo-sched -fno-branch-count-reg -faltivec -ftree-vectorize" FFLAGS="-O5 -mcpu=7400 -mtune=7400 -funroll-loops" LDFLAGS =" -arch ppc -L/usr/local/lib -L/usr/lib -L/System/Library/Frameworks/Tcl.framework/headers -mmacosxmin=10.4"

e date invio.
Nota: -mcpu e -mtune sono seguite dl valore 7400 nel mi esempio, perché si riferiscono ai miei G4, quelli fino a 500MHz, se non avete questo sostituiltelo con G4 o G5 a seconda del vostro tipo di mac, invece se avete un G3 oltre a cambiare adeguatamente il valore di -mcpu ed mtune dovete cancellare anche -faltivec -ftree-vectorize.
quindi scrivete make seguito da invio, poi make test per verificare che sia tutto a posto ed infine sudo make install, seguito dalla vostra password di amministratore.
una volta finito, riavviate la macchia ed è fatta.

Per critiche, suggerimenti e quant'atro, usate i commenti: sono aperti a tutti.

P.S.: per far sì che spotlight crei un nuovo indice è necessario cancellare il vecchio indice col seguente comando da terminale
sudo mdutil -E /

martedì 6 marzo 2007

Ricompilare zlib su Darwin 8 (Mac OS X10.4 Tiger) con l' uso di Altivec

Grazie a Konstantinos Margaritis, uno sviluppatore greco di Debian, è possibile iniziare a utilizzare le estensioni Altivec su G4 e G5 per velocizzare l' algoritmo Adler 32 della Zlib, la libreria di sistema dedicata a comprimere e decomprimere i file Zip, usata da molte altre librerie di sistema; il vantaggio in termni di prestazioni per questo algoritmo é misurabile fino a due volte e mezzo la velocità normale.
Prima di tutto è necessario che abbiate installato sul vostro mac, quindi scaricate l' ultima versione disponibile della Zlib.
Poi, scompattato il file con stuffit, e aprite (basta un doppio click) il file adler32.c.
sostituite il contenuto con questo:
/* adler32.c -- compute the Adler-32 checksum of a data stream
* Copyright (C) 1995-2003 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/

/* @(#) $Id$ */

#define ZLIB_INTERNAL
#include "zlib.h"

#define BASE 65521UL /* largest prime smaller than 65536 */
#define NMAX 5552
#define NMAX_VEC 3854
/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */ /* NMAX_VEC is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^31-1 */ #define DO1(buf,i) {s1 += buf[i]; s2 += s1;} #define DO2(buf,i) DO1(buf,i); DO1(buf,i+1); #define DO4(buf,i) DO2(buf,i); DO2(buf,i+2); #define DO8(buf,i) DO4(buf,i); DO4(buf,i+4); #define DO16(buf) DO8(buf,0); DO8(buf,8); #ifdef NO_DIVIDE # define MOD(a) \ do { \ if (a >= (BASE <<>= (BASE <<>= (BASE <<>= (BASE <<>= (BASE <<>= (BASE <<>= (BASE <<>= (BASE <<>= (BASE <<>= (BASE <<>= (BASE <<>= (BASE <<>= (BASE <<>= (BASE <<>= (BASE <<>= (BASE <<>= BASE) a -= BASE; \
} while (0)
#else
# define MOD(a) a %= BASE
#endif


#define S1 s1[3]
#define S2 s2[3]

/* ========================================================================= */
//#ifndef HAS_ALTIVEC_H
uLong ZEXPORT adler32(adler, buf, len)
/* uLong adler;
const Bytef *buf;
uInt len;
{
unsigned long s1 = adler & 0xffff;
unsigned long s2 = (adler >> 16) & 0xffff;
int k;

if (buf == Z_NULL) return 1L;

while (len > 0) {
k = len <>= 16) {
DO16(buf);
buf += 16;
k -= 16;
}
if (k != 0) do {
s1 += *buf++;
s2 += s1;
} while (--k);
MOD(s1);
MOD(s2);
}
return (s2 <<>

#define S1 s1[3]
#define S2 s2[3]

uLong ZEXPORT adler32_vec(adler, buf, len)*/
uLong adler;
const Bytef *buf;
uInt len;
{
unsigned long __attribute__ ((aligned(16))) s1[4], s2[4];
S1 = adler & 0xffff;
S2 = (adler >> 16) & 0xffff;
int k, i, offset;

if (buf == Z_NULL) return 1L;

// Handle small sizes
if (len <>= 16) {
vector unsigned int v0 = vec_splat_u32(0);
vector signed int vs1, vs2, vsum1, vsum2, vs1_0;
vector unsigned char vbuf, v1 = vec_splat_u8(1), v2 = { 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 },
vsh = vec_splat_u8(4);

// Align to 16-byte boundaries
offset = (unsigned long)(buf) % 16;
if (offset) {
offset = 16 -offset;
len -= offset;
while (offset--) {
S1 += *buf++;
S2 += S1;
}
}

while (len >= 16) {
vs1 = vec_lde(12, (signed int *)&s1);
vs2 = vec_lde(12, (signed int *)&s2);
vs1_0 = vs1;

k = len <>= 16) {
vbuf = (vector unsigned char)vec_ld(0, (unsigned char *)buf);
vsum1 = (vector signed int)vec_msum(vbuf, v1, v0);
vs1 = vec_sums(vsum1, vs1);
vsum2 = (vector signed int)vec_msum(vbuf, v2, v0);
vs2 = vec_sums(vsum2, vs2);
buf += 16;
k -= 16;
vs1_0 = vec_sll(vs1_0, vsh);
vs2 = vec_add(vs2, vs1_0);
vs1_0 = vs1;
}
vec_ste(vs1, 12, &s1);
vec_ste(vs2, 12, &s2);
MOD(S1);
MOD(S2);
}
}

while (len--) {
S1 += *buf++;
S2 += S1;
}
MOD(S1);
MOD(S2);

return (S2 <<>
//#endif


quindi salvate il file. poi aprite il terminale (lo trovate in /Applicazioni/Utility) e scrivete:
cd

date uno spazio e trascinate sulla finestra del terminale la cartella della zlib in modo che compaia il percorso unix (se sapete come fare, potete scriverlo a mano). Date invio e poi scrivete:
./configure --shared --prefix=/usr --mandir=/usr/share/man
e di nuovo invio. poi aprite il file Makefile con Textedit e localizzate la riga che inizia con CFLAGS (usate la funzione cerca) e sostituitela con
CFLAGS= -O3 -mcpu=G4 -mtune=G4 -fstrict-aliasing -fsched-interblock -freorder-blocks -fno-branch-count-reg -faltivec -ftree-vectorize -floop-optimize2 -funroll-loops -fmodulo-sched -fpeel-loops -fno-common

ovviamente se avete un G4, altrimenti dovete mettere G5...
Una piccola nota: sostituendo il valore preimpostato -O2 (usato anche da apple) con -O3 aumenteranno la prestazioni dell' algoritmo crc32.c fino al doppio su un G4. Salvate questi cambiamenti sul terminale scrivete make e date invio. al termine scrivete sudo make install a date invio, vi verrà chiesta la password, scrivetela senza spaventarvi se non apparirà niente sul monitor, è normale. Premete invio un' ultima volta ed avete finito!

Per domande e consigli usate i commenti.

nota: per problemi di formattazione ho ripubblicato questo messaggio...