Article View: es.comp.os.linux.programacion
Article #8594Re: Saludos de nuevo, y pregunta de ensamblador
From: Lepton
Date: Sun, 27 Oct 2002 12:33
Date: Sun, 27 Oct 2002 12:33
51 lines
2844 bytes
2844 bytes
On Sat, 26 Oct 2002, Recurrente wrote:
# �De verdad no creeis que usando rutinas en ensamblador se puede mejorar la
# velocidad del c�digo. mi rutina es as� de simple en C (por poner un
# ejemplo)
#
# v=array grande.
# for (i=0;i<Ngrande;i++) v[i]/=262144;
Podrias postear el codigo que genera tu compilador, para ese bucle.
En general cualquier buen compilador hara un trabajo mejor que tu,
a menos que seas un genio de la optimizacion :)
Asegurate de que tu compilador (y si no, hazlo tu) no DIVIDE, sino
que MULTIPLICA por 64^(-3), ya que ese numero lo puedes precalcular
antes de iniciar el bucle:
double K = 1.0/262144.0;
for(i = 0; i < Ngrande; i ++) v[i] *= K;
Tambien puedes hacer loop-unrolling, aunque eso lo hara el
compilador mejor que tu -- a menos que sepas el valor de Ngrande,
o alguna propidad de el --
Si, por ejemplo, Ngrande es multiplo de 4 *siempre*, puedes hacer:
for(i = 0; i < Ngrande; i += 4) {
v[i] *= K;
v[i + 1] *= K;
v[i + 2] *= K;
v[i + 3] *= K;
}
Mejor dejar el incremento de 'i' en el for(), por si el compilador
no optimiza bien el contenido del bucle, al haber dependencias:
v[i ++] *= K;
^^ aqui cambia 'i', asi que la siguiente instruccion espera..
v[i ++] *= K;
# 262144=64^3. Si os preguntais que porque necesito esto es que uso la
# libreria fftw para realizar transformadas r�pidas de Fourier (libreria
# excelente, os la recomiendo si necesitais alg�n d�a hacer FFT's) pero al
# transformar-destransformar no se tienen los datos
No se realmente lo que haces, pero quiza fuera conveniente pre-escalar
el vector antes de hacer la fft(), de forma que al hacer la transformada
inversa tengas los datos con la escala que quieres.
Lepton.
Technical Details
Message-ID:
<Pine.LNX.4.44.0210271250180.398-100000@lorien.local>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!newsfeed.icl.net!newsfeed.fjserv.net!newsfeed.icl.net!newsfeed.fjserv.net!opentransit.net!fu-berlin.de!uni-berlin.de!a289d.pppool.DE!not-for-mailReferences:
<3DB8FE6D.6050807@hotmail.com> <pan.2002.10.26.11.34.15.344534@hotmail.com>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: f86c8,d4e0bb1ca64d9500 X-Google-Attributes: gidf86c8,public X-Google-ArrivalTime: 2002-10-27 06:20:52 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!newsfeed.icl.net!newsfeed.fjserv.net!newsfeed.icl.net!newsfeed.fjserv.net!opentransit.net!fu-berlin.de!uni-berlin.de!a289d.pppool.DE!not-for-mail From: Lepton <reinob@jazzfree.com> Newsgroups: es.comp.os.linux.programacion Subject: Re: Saludos de nuevo, y pregunta de ensamblador Date: Sun, 27 Oct 2002 13:33:17 +0100 Lines: 53 Message-ID: <Pine.LNX.4.44.0210271250180.398-100000@lorien.local> References: <3DB8FE6D.6050807@hotmail.com> <pan.2002.10.26.11.34.15.344534@hotmail.com> NNTP-Posting-Host: a289d.pppool.de (213.6.40.157) Mime-Version: 1.0 Content-Type: TEXT/PLAIN; charset=iso-8859-1 Content-Transfer-Encoding: 8BIT X-Trace: fu-berlin.de 1035728451 1509310 213.6.40.157 (16 [130846]) X-Orig-Path: localhost!reinob In-Reply-To: <pan.2002.10.26.11.34.15.344534@hotmail.com>