Se connecter
Se connecter

ou
Créer un compte

ou

Sujet Waldorf en faillite

  • 159 réponses
  • 29 participants
  • 6 724 vues
  • 2 followers
Sujet de la discussion Waldorf en faillite
Je n'ai pas vu la news passer sur AF, alors désolé pour ceux qui sont déjà au courant:
donc, après Cre@mware, c'est au tour de Waldorf de déposer le bilan (banqueroute).

Tout est là, en teuton dans le texte.

Vu que le site Waldorf est down, les abonnés à l'ancien forum sont invités s'ils le souhaitent à rejoindre un nouveau forum non-officiel:
http://waldorf.synth.net

:mrg:

« What is full of redundancy or formula is predictably boring. What is free of all structure or discipline is randomly boring. In between lies art. » (Wendy Carlos)

Afficher le sujet de la discussion
141
Je l'ai pas lu, je le pratique :bave: Evidemment, il faut bien se démerder, faut que ça tienne en cache, tout ça. Mais si tu te démerdes pour pas avoir d'embranchement, plus bien connaître ton compilo (l'ordre de séquences peut faire gagner un facteur 2, parfois), ben... ca marche à peu près. Evidemment, en vrai, il prend pleins de cycles pour la faire, mais si tu sais un peu comment toujours remplir le pipeline, c'est tout comme ci.

J'ai été surpris il y a deux ans pendant un stage où mon boss m'a montré en 10 minutes comment multiplier par deux la vitesse d'un algo, avec des trucs mais d'une simplicité déconcertante.

Enfin bon, on parle, on parle, et ça ne prouve rien. Je te file un bout de code qui montre mes dires dans qqs minutes.

Citation :
En revanche, avec des optimisations, le DSP aurait réussi - d'ailleurs, ne mélange pas DSP et ARM stp, c'est PAS DU TOUT la même chose -



Je mélange pas, mais ce sont deux types de proc spécialisés, les plus célèbres que je 'connaisse', d'ailleurs, par opposition aux pentium et autres sparc. Par contre, je comprends pas du tout la relation entre la fft en n log n et les dsp ? (arrête de me prendre pour un benet, aussi :diable: ; la fft, je prétends connaître un tout petit peu, quand même, pour en avoir programmé une).

Citation :
De plus, les compilateurs fournis permettent de se passer de l'assembleur, tout peut être fait en C ou C++ avec peu d'overhead.



J'ai jamais vu un seul programmeur de dsp utiliser un compilo C pour les synthés. Jamais.

Citation :
Donc les libs de PC sont utilisables...



Les compilos fortran, c'est répandu sur dsp ? ;)

Citation :
RISC, c'est pas pour rendre les puces plus simples, au contraire, dès le départ avec le séquenceur câblé, au savait que c'était plus compliqué



Euh ????? Le principe même du risc, c'est d'avoir un truc simple, pour avoir moins de transistors, et éviter, à l'origine, d'avoir plusieurs core qui communiqueraient entre eux par des voies trop lentes. Le principe a toujours été plus simple. D'ailleurs, aujourd'hui, les core sont risc quasiment partout (PIV en premier), il interprète l'ISA d'origine à la volée.

Le X86 va aller de mieux en mieux. Son archi est pourrie des le départ ? Oui. C'est chiant d'avoir tous ces trucs de compatibilité ? Oui. Et c'est pour ça que ça marche. Regarde le 'titanium', merveille technologique, gouffre pour intel, ratage presque complet. Repose beaucoup trop sur le compilo. L'ultra sparc, c'est joli ? Oui. Mais c'est lent et cher.

Il y a un truc à conserver en tête: l'x86 n'a pas gagné en dépit de toutes ses faiblesses, mais GRACE à ses faiblesses.

Bon, je te code l'exemple.
142
Le RISC, c'est pas un proc, simple, c'est un jeu d'instructions simplifiées...

Plus sérieusement, t'es sûr l'hitoire de la multiplication en un coup d'horloge ??
Si les DSP de synthé ne sont pas encore programmés en C, ça ne saurait tardé, les derniers sont largement mieux en codage C - je parlais de librairies en C aussi :D -

Parlons de l'x86. Tous les vrais programmeurs lui tapent dessus. Pourquoi ça a marché ? parce qu'à l'époque tout le monde programmait en ASM, et si pour le 186, ils avaient changé le set d'instructions, ils perdaient le marché. Pourquoi aujourd'hui l'Itanium n'a pas marché ? parce que le compilo à utiliser est effectievement d'une architecture ambitieuse, différente même de ce qui existe dans les autres procs.
Oui, il a gagné grâce à ses faiblesses et l'appat du gain...

Tiens, je veux bien voir tes exemples de codage, plus on apprend, mieux c'est :D
143

Citation : Tiens, je veux bien voir tes exemples de codage



Dites, vous voulez pas aller faire vos cochonneries ailleurs?

:langue:

« What is full of redundancy or formula is predictably boring. What is free of all structure or discipline is randomly boring. In between lies art. » (Wendy Carlos)

144
Bon, gcc est pas génial...

Mais quand même:

Citation :
#include <iostream>
#include <math.h>

#include "cycle.h"

inline void f1(const float* lx, const float* ly,
float* lz, const int size)
{
int i = 0;

for (i = 0; i < size; ++i)
{
lz[i] += lx[i] * ly[i];
}
}

void app_hann(float* &h ,unsigned int N)
{
if ( N < 1 )
{
std::cerr << "N must be equal or greater than 1n";
exit(1);
}

// Initialisation :
// - s : is for sin calculation
// - c : c is for cos.
//
// Last and curr var are used to compute sin and cos ( cf Numerical
// recipes in C, chap 5.5. )

float s_last = 0;
float s_curr = 0;
float c_last = 1.0;
float c_curr = 0;
float alpha = 0.1;
float beta = 0.2;
float delta = 3.14159/N;

//alpha = 2*(sin(delta)*sin(delta));
//beta = sin(2*delta);

//h = new float[N];
h[0] = 0;

for ( int loop = 1 ; loop < N ; ++loop)
{
// First the alpha*cos(teta)+beta*sin(teta) is computed
// This operation MUST be done at the begining.

c_curr = (-1) * alpha * c_last + (-1) * beta * s_last;
s_curr = (-1) * alpha * s_last + beta * c_last;

// computation of the actual windows coefficients

c_curr += c_last;
s_curr += s_last;

h[loop] = 0.5-0.5*c_curr;

// New values of c_last and s_last

c_last = c_curr;
s_last = s_curr;
}
}

int main()
{
ticks t0, t1;

float *x, *y, *z;
const int N = 1024;
const int Nloop = 16;

x = new float[N];
y = new float[N];
z = new float[N];

double result;

for (int loop = 0; loop < N; ++loop)
{
// convert to float to have float division instead of
// euclidian division !
x[loop] = (float)loop/N;
y[loop] = -(float)loop/N;
}

// f1, pass 1
t0 = getticks();

for (int loop = 0; loop < Nloop; ++loop)
{
f1(x, y, z, N);
}

t1 = getticks();

double result1 = elapsed(t1, t0);

std::cout << "ticks for f1, pass 1 is around : " << result1/Nloop << std::endl;

// f2, pass 1
t0 = getticks();

for (int loop = 0; loop < Nloop; ++loop)
{
//N * 8
app_hann( z, N);
}

t1 = getticks();

double result2 = elapsed(t1, t0);

std::cout << "ticks for f2, pass 1 is around : " << result2/Nloop << std::endl;
std::cout << "For this number of cycles, there is : n"
<< N*8 << " muln"
<< N*6 << " addn"
<< N*7 << " assignementsn";

delete[] x;
delete[] y;
delete[] z;

return 0;
}



Le resultat:

Citation :
ticks for f1, pass 1 is around : 4302.5
ticks for f2, pass 1 is around : 26105
For this number of cycles, there is :
8192 mul
6144 add
7168 assignements



Avec gcc 3.3 , -O2 et funroll-loops. Faut pas faire attention aux fonctions, j'ai enlevé tout ce qui ne rentrait pas en compte, à la base, la fonction sert à calculer une fenêtre de hanning en évitant les appels ultra couteux à la fonction sin de la librairie standart.

C'est con, j'avais un exemple plus parlant, mais il marche pas avec gcc, et j'ai pas trop les moyens de me payer VS, ni l'envie de le modifier pour qu'il passe sous gcc :¤)

Tu remarqueras des petites astuces, style inversion de lignes, pour laisser le pipeline toujours rempli, etc...

Citation :
Parlons de l'x86. Tous les vrais programmeurs lui tapent dessus.



Entendons ce que dit un illustre inconnu sur le x86:

Citation :
In a discussion on the merits of various processors, Torvalds wrote that Intel had made the same mistakes "that everybody else did 15 years ago" when RISC architecture was first appearing. Itanium tries to introduce an architecture that is clean and technically pure, something that just doesn't seem to work in the real world. He claims that Intel "threw out all the good parts of the x86 because people thought those parts were ugly. They aren't ugly, they're the 'charming oddity' that makes it do well."



Cet illustre inconnu, c'est torvald...

On continue

Citation :
Clever architecture is something that has trapped others in the past. The Alpha processor team spent years learning that many of the architecturally correct ideals they had held needed to be thrown out when it came to the real world. According to Torvalds, "And all the RISC stuff that tried to avoid it was just a BIG WASTE OF TIME. Because the _only_ thing the RISC approach ended up showing was that eventually you have to do the hard stuff anyway, so you might as well design for doing it in the first place."



Quand un des programmeurs les plus géniaux des ces 15 dernières années, ET un des concepteurs d'une des architectures les plus réputées (Ultras sparc), disent tous deux que le risc (sous entendu pur, hein), c'est de la connerie, il y a peut être qqch à en retirer, non ? ;)

Je suis prêt à parier que dans 5 ans, les descendants de l'x86 (comprendre IA-64) seront encore plus répandus. Par exemple, sun risque très certainement d'abandonner l'ultra sparc en faveur de l'opteron.

Le x86 est moche, mais un cpu d'ordi EST moche par définition, ça doit faire pleins de trucs. C'est comme dire qu'un OS généraliste est moche. C'est moche. Linux est moche, windows est moche, etc... Le principe même d'ordinateur personnel est infame, quelque part.

Citation :
Le RISC, c'est pas un proc, simple, c'est un jeu d'instructions simplifiées...



Oui, mais l'interêt du jeu d'instruction simple, c'était pour faire un proc plus simple. Au début des années 80, quand on concevait le RISC dans les universités américaines, le pb des cpu de l'époque était qu'ils étaient trop compliqués pour qu'on mette tout sur un même DIE, donc on partageait en plusieurs morceaux, et les coûts de transfert entre les différentes parties coutaient la peau du cul. Le RISC devait permettre d'avoir moins de transistors, pour tout laisser sur un même DIE.

Lis l'article d'ars technica, il est vachement intéressant. Tu sais, quand tu lis ce que tanenbaum disait il y a 12 ans, on aurait tous aujourd'hui des OS distribués sur alpha. Bon, l'alpha, ça existe plus, aujourd'hui, c'est balaud !

https://arstechnica.com/cpu/4q99/risc-cisc/rvc-1.html

Sinon, le code est tout moche, hein, c'est juste pour l'exemple.
145
C'est vrai, tu marques un point ;)

J'ai pas encore testé ton programme, j'ai pas de gcc sous la main potable - cygwin beurk, mingw beurk, ... -, mais je vais tenter .NET - étudiant power :) -

D'ailleurs, c'est pas la première fois qu'Intel se casse la figure à essayer d'imposer qqch de nouveau - ils avaient un nouveau proc, une nouvelle archi juste avant le 186, et voulaient tout virer comme l'a fait Moto à l'époque -... A quand la prochain e?
146
Si tu veux vraiment compiler mon code, il faut cycle.h, qui se trouve sur le site de fftw.

Ca permet de compter à peu près le nombre de cycles pris par un bloc de manière assez portable (ça utilise le compteur de cycle des procs, ça marche au moins sur mips, x86 et sparc, c'est évidemment de l'assembleur à l'intérieur).

Le code compilait sous VS 6 qui était une merde niveau standart, donc j'imagine que le 7, assez réputé à ce niveau là, devrait assurer.

Un jour, j'essayerais d'installer ICC sous ma debian, je pense que ça devrait torcher. Mais 4000 cycles pour 2048 additions, 1024 assignements et 1024 multiplications, c'est pas mal, quand même, non ? Même si le cas n'est pas réaliste (en général, pour du MAC, tu vas avoir une petite réponse impulsionelle, les tailles sont pas les mêmes, et tu peux avoir besoin d'accéder à des zones de mémoire non contigues.)

Qu'on soit d'accord: en vrai, le PIV met beaucoup plus qu'une instruction pour une multiplication flottante. C'est une fois le pipeline pris en compte, en faisant en sorte qu'il n'ait pas à se vider (erreur de prédiction), que tu as 1-2 cycles. Et sans ASM, stp (avec SSE, tu peux arriver en dessous d'un cycle dans les bons cas, où t'as des vecteurs alignés).
147
Si avec tout ça, il y a pas méga alerte gabou geek :oops: Je me suis pas autant laché depuis mon explication du MP3 pour les lycées.

Qui a dit qu'af n'était pas technique ?
148
Bon, j'ai foutu le nécessaire pour compiler le truc là

http://perso.enst.fr/~cournape/photos/bench.tar

Makefile, cycle.h et main.cpp (j'ai pas fait gaffe à ce que le code soit C compatible, donc faut un compilo C++).
149
Et dire que le sujet du thread c'est "waldorf en faillite"... :mrg:
150
M'ont tout salopé mon thread.

Salauds de geeks.

:mrg:

« What is full of redundancy or formula is predictably boring. What is free of all structure or discipline is randomly boring. In between lies art. » (Wendy Carlos)