Re: [Faudiostream-users] [Faudiostream-devel] "ZDF" SVF in C++, could this be converted to FAUST?
This even simpler code : foo(x) = 5; process = (foo ~ _) ; Produces suboptimal code: virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { FAUSTFLOAT* output0 = outputs[0]; for (int i = 0; (i < count); i = (i + 1)) { int iRec0 = 5; output0[i] = FAUSTFLOAT(iRec0); } } Stéphane > Le 20 juil. 2018 à 13:08, Kjetil Matheussen a > écrit : > > > On Fri, Jul 20, 2018 at 11:35 AM, Kjetil Matheussen > wrote: > > Actually, Faust should have been able to convert > m_a1/m_a2/m_a3/m_m0/m_m1/m_m2 into > slow variables so that we would have avoided all the conditional code in the > inner loop. > I'll see if I can come up with a smaller example. > > > I simplified the problem down to this faust program: > > """ > modeSlider = hslider ( "Mode" , 0 , 0 , 1 , 1 ) ; > > returnfunc(a) = select2(a==0, 2, 3); > > process(x) = (function__1936 ~ (_)) : returnfunc with{ > function__1936(a) = modeSlider; > }; > """ > > which compiles down to this C++ code: > > """ > virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** > output) { >FAUSTFLOAT* input0 = input[0]; >FAUSTFLOAT* output0 = output[0]; >for (int i=0; ifloat fRec0 = float(fslider0); >output0[i] = (FAUSTFLOAT)((int((fRec0 == 0)))?3:2); >} >} > } > """ > > which would have been faster if "fRec0" and "(FAUSTFLOAT)((int((fRec0 == > 0)))?3:2);" > had been compiled down to slow variables. > > > -- > Check out the vibrant tech community on one of the world's most > engaging tech sites, Slashdot.org! > http://sdm.link/slashdot___ > Faudiostream-devel mailing list > faudiostream-de...@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/faudiostream-devel -- Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot ___ Faudiostream-users mailing list Faudiostream-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/faudiostream-users
Re: [Faudiostream-users] [Faudiostream-devel] "ZDF" SVF in C++, could this be converted to FAUST?
On Fri, Jul 20, 2018 at 11:35 AM, Kjetil Matheussen < k.s.matheus...@gmail.com> wrote: > > Actually, Faust should have been able to convert > m_a1/m_a2/m_a3/m_m0/m_m1/m_m2 into > slow variables so that we would have avoided all the conditional code in > the inner loop. > I'll see if I can come up with a smaller example. > > I simplified the problem down to this faust program: """ modeSlider = hslider ( "Mode" , 0 , 0 , 1 , 1 ) ; returnfunc(a) = select2(a==0, 2, 3); process(x) = (function__1936 ~ (_)) : returnfunc with{ function__1936(a) = modeSlider; }; """ which compiles down to this C++ code: """ virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { FAUSTFLOAT* input0 = input[0]; FAUSTFLOAT* output0 = output[0]; for (int i=0; i-- Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot___ Faudiostream-users mailing list Faudiostream-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/faudiostream-users
Re: [Faudiostream-users] [Faudiostream-devel] "ZDF" SVF in C++, could this be converted to FAUST?
Poing Imperatif was made for making it easier to convert C++ and similar languages into Faust. I made this Poing Imperatif program from your C++ code: https://pastebin.com/DuVWvu7w Poing Imperatif created this Faust code: https://pastebin.com/fX0nkaGJ And finally Faust created this C++ code: virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; int iSlow0 = int(float(fHslider0)); int iSlow1 = (iSlow0 == 0); int iSlow2 = (iSlow0 == 1); int iSlow3 = (iSlow0 == 2); int iSlow4 = (iSlow0 == 3); int iSlow5 = (iSlow0 == 4); int iSlow6 = (iSlow0 == 5); int iSlow7 = (iSlow0 == 6); int iSlow8 = (iSlow0 == 7); float fSlow9 = float(fHslider1); float fSlow10 = std::tan((6.54498435e-05f * fSlow9)); float fSlow11 = float(fHslider2); float fSlow12 = std::pow(10.0f, (0.025004f * fSlow11)); float fSlow13 = std::sqrt(fSlow12); float fSlow14 = (fSlow10 / fSlow13); float fSlow15 = float(fHslider3); float fSlow16 = (1.0f / fSlow15); float fSlow17 = (((fSlow10 * (fSlow14 + fSlow16)) / fSlow13) + 1.0f); float fSlow18 = (fSlow10 / (fSlow13 * fSlow17)); float fSlow19 = ((fSlow10 * (fSlow10 + fSlow16)) + 1.0f); float fSlow20 = (fSlow10 / fSlow19); float fSlow21 = (1.0f / fSlow17); float fSlow22 = (1.0f / fSlow19); float fSlow23 = mydsp_faustpower2_f(fSlow10); float fSlow24 = (fSlow23 / (mydsp_faustpower2_f(fSlow13) * fSlow17)); float fSlow25 = (fSlow23 / fSlow19); float fSlow26 = (2.0f * fSlow18); float fSlow27 = (2.0f * fSlow20); float fSlow28 = (2.0f / fSlow17); float fSlow29 = (2.0f / fSlow19); float fSlow30 = (2.0f * fSlow24); float fSlow31 = (2.0f * fSlow25); float fSlow32 = mydsp_faustpower2_f(fSlow12); float fSlow33 = (iSlow1?0.0f:(iSlow2?1.0f:(iSlow3?0.0f:(iSlow4?1.0f:(iSlow5?1.0f:(iSlow6?1.0f:(iSlow7?1.0f:(iSlow8?fSlow32:0.0f; float fSlow34 = (fSlow32 + -1.0f); float fSlow35 = (0.0f - fSlow16); float fSlow36 = (iSlow1?0.0f:(iSlow2?fSlow35:(iSlow3?1.0f:(iSlow4?fSlow35:(iSlow5?fSlow35:(iSlow6?(fSlow34 / fSlow15):(iSlow7?((fSlow12 + -1.0f) / fSlow15):(iSlow8?((fSlow12 * (1.0f - fSlow12)) / fSlow15):0.0f; float fSlow37 = (iSlow1?1.0f:(iSlow2?-1.0f:(iSlow3?0.0f:(iSlow4?0.0f:(iSlow5?-2.0f:(iSlow6?0.0f:(iSlow7?fSlow34:(iSlow8?(1.0f - fSlow32):0.0f; for (int i = 0; (i < count); i = (i + 1)) { int iTemp0 = iRec8[1]; float fTemp1 = float(input0[i]); float fTemp2 = (fSlow18 * fTemp1); float fTemp3 = (fSlow20 * fTemp1); float fTemp4 = (fTemp1 - fRec3[1]); float fTemp5 = (fRec2[1] + (fSlow14 * fTemp4)); float fTemp6 = (fSlow21 * fTemp5); float fTemp7 = (fRec2[1] + (fSlow10 * fTemp4)); float fTemp8 = (fSlow22 * fTemp7); float fRec0 = (iTemp0?(iSlow1?fTemp8:(iSlow2?fTemp8:(iSlow3?fTemp8:(iSlow4?fTemp8:(iSlow5?fTemp8:(iSlow6?fTemp8:(iSlow7?fTemp6:(iSlow8?fTemp6:0.0f:(iSlow1?fTemp3:(iSlow2?fTemp3:(iSlow3?fTemp3:(iSlow4?fTemp3:(iSlow5?fTemp3:(iSlow6?fTemp3:(iSlow7?fTemp2:(iSlow8?fTemp2:0.0f); float fTemp9 = (fSlow24 * fTemp1); float fTemp10 = (fSlow25 * fTemp1); float fTemp11 = (fRec3[1] + (fSlow18 * fTemp5)); float fTemp12 = (fRec3[1] + (fSlow20 * fTemp7)); float fRec1 = (iTemp0?(iSlow1?fTemp12:(iSlow2?fTemp12:(iSlow3?fTemp12:(iSlow4?fTemp12:(iSlow5?fTemp12:(iSlow6?fTemp12:(iSlow7?fTemp11:(iSlow8?fTemp11:fRec3[1]:(iSlow1?fTemp10:(iSlow2?fTemp10:(iSlow3?fTemp10:(iSlow4?fTemp10:(iSlow5?fTemp10:(iSlow6?fTemp10:(iSlow7?fTemp9:(iSlow8?fTemp9:0.0f); float fTemp13 = (fSlow26 * fTemp1); float fTemp14 = (fSlow27 * fTemp1); float fTemp15 = ((fSlow28 * fTemp5) - fRec2[1]); float fTemp16 = ((fSlow29 * fTemp7) - fRec2[1]); fRec2[0] = (iTemp0?(iSlow1?fTemp16:(iSlow2?fTemp16:(iSlow3?fTemp16:(iSlow4?fTemp16:(iSlow5?fTemp16:(iSlow6?fTemp16:(iSlow7?fTemp15:(iSlow8?fTemp15:(0.0f - fRec2[1]):(iSlow1?fTemp14:(iSlow2?fTemp14:(iSlow3?fTemp14:(iSlow4?fTemp14:(iSlow5?fTemp14:(iSlow6?fTemp14:(iSlow7?fTemp13:(iSlow8?fTemp13:0.0f); float fTemp17 = (fSlow30 * fTemp1); float fTemp18 = (fSlow31 * fTemp1); float fTemp19 = ((2.0f * fTemp11) - fRec3[1]); float fTemp20 = ((2.0f * fTemp12) - fRec3[1]); fRec3[0] = (iTemp0?(iSlow1?fTemp20:(iSlow2?fTemp20:(iSlow3?fTemp20:(iSlow4?fTemp20:(iSlow5?fTemp20:(iSlow6?fTemp20:(iSlow7?fTemp19:(iSlow8?fTemp19:fRec3[1]:(iSlow1?fTemp18:(iSlow2?fTemp18:(iSlow3?fTemp18:(iSlow4?fTemp18:(iSlow5?fTemp18:(iSlow6?fTemp18:(iSlow7?fTemp17:(iSlow8?fTemp17:0.0f); float fRec4 = fSlow33; float fRec5 = fSlow36; float fRec6 = fSlow37; float fRec7 = fTemp1; iRec8[0] = 1; output0[i] = FAUSTFLOATfRec4 * fRec7) + (fRec5 * fRec0)) + (fRec6 * fRec1))); fRec2[1] = fRec2[0]; fRec3[1] = fRec3[0]; iRec8[1] = iRec8[0]; } } If faust had known that "mode" doesn't change very often, it could probably have optimized a bit here. Or perhaps it would be more naturally to make one faust program for each mode. On Thu, Jul 19, 2018 at 12:55 PM, Oliver Larkin via Faudiostream-devel < faudiostream-de...@lists.sourceforge.net> wrote: > Well done to the IFC team for a great conference!