🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #8594

Re: Saludos de nuevo, y pregunta de ensamblador

#8594
From: Lepton
Date: Sun, 27 Oct 2002 12:33
51 lines
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-mail
References: <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>