MSP performances in Max/MSP 6
While working on an audio patch, I was afraid by the CPU consomption in Max 6.
In Max 5 it was 8% at 512/512 and now it is 17/18% with Max 6 at the same IO and Signal vector Size.
So I decided to make 2 tests :
I made a patch containing 76 [*~].
In Max 5 at 256/256 the CPU consomption is 1%.
In Max 6, at the same Vector Size the consomption is 3%.
Second test :
A patch with 10 [pfft~ gizmo_loadme 4096 4]
In max 5 – 256/256 the CPU is 16/17%
In Max 6 – 256/256 the CPU is 16%
So, it is the same or a little better for pfft~, but for objects we often use, the CPU consomption is increased (from 1 to 3) in my case.
Is it the case for everybody?
Is it a bug or is something that cannot be improved?
Below are the patches.
First Patch :
----------begin_max5_patcher---------- 689.3ocybGshZCDE.F95jmhPtrXCy4LyblY5c84nrTbsoayhFWVyRscY6ydi QszqKT7+BE73nHeHweBi405p162er+PayGZ9TSU0q0UUKiNMn5xiqZ2s93ls qOrrr1w9uu+9GaWc9ol5ONsL9c+55ngurLXdQuODuNb7kcCia6mVdOzKC+59 wow065WV+GedX81+Z46eY555kKSOOZ5GO0e9Cb6ggGFmeQM2cYAOsdZy2FFe 3yO2uY57Z7RoKtpQRVmDRNIupwqmlntN2edgm9jbX3mKuuh14NM8s55S2s5+ gKFFWhgNYFGIhvkDFWlwvkypHHbIiwEYlgXN6RHboPwkbtyokfKPfkniBKl0 4PHhbyEQyoSVnVna9lw3GhhJFWBZm5ipVP3hGiKyLnyGwUMDtDn3hTxcycKA UQ3RDiKnBciFFWPE5FSXbAUnaLiwETgtwBEWPE5ZNJrPIz0.D5Nej1HsPWSw 3BpPWyiwETgtVfhKrBcsHFWPE5ZFFWPE5ZILtfJz0xXbAUnqUn3BpP2jiBKT BcS.BcUk2YzMoXbAUnaxiwETgto.EWXE5lhXbAUnaxv3BpP2TBiKnBcSYLtf JzMUn3BpP2riBKTBc0aenqjK7NitphwETgtpGiKnBc0.EWXE5pQLtfJzUMLt fJzUSXbAUnqlw3BpPWsPwETgtdGEVnD55AD5FAtGc8JFWPE558XbAUnqOPwE Vgt9HFWPE55MLtfJz0mv3BpPWeFiKnBc8EJtfJzM3nvBkPWAPnqBbO5JJFWP E5JdLtfJzUBTbgUnqDw3BpPWwv3BpPWIgwETgtRFiKnBckBEWPE5pNJrPIz8 1+8jBvcnq3nvBqK4BTTg0+CMHp.ay4RQET8sYJpv5z3RQEVWQwnnBq8p.DUP 00JPP4eops4t52p+M.LNaDE -----------end_max5_patcher-----------
Second Patch :
----------begin_max5_patcher---------- 330.3oc6TujZCCCDF.ds8oP30tBMx5Y20yQIDbRTRUwuHVgllP5Yu1RNztKZ Q2TPaDn+QBM7wftlmUro+rYr.8L5UTV107rLezbP1x9rh15yaapG8Gqny7Q+ l2KJCkblyNe7v98tuPGrWZ6W2zWuq0fXDs.wtex88ctQ6Ey7oA.y0bPIWp0c p010Xb9Wf9SX+I28TXIcn1s8Ma2g0GMacg9VHwjRDUBXkPJIhRDHH9noUzpk KZ246yod+Ifn+cW0U256phWNZqatWI71tOGLgWoXzdnapLZ0b8a44yKk+2Qi IwZcE+wjAjDYAxnLL.5JJKh4LdBs.ZDBlx3PEMBzDIz7nARAtRRz7X9QSlPK fFmhYZgLhuzHpjYAynJrfR4xX9RqJgV.MBCKYppnlzXIz7noHXkjAZHBynIy 7lwCiaOhK3OhqoM2x+lZpIt7 -----------end_max5_patcher-----------
My config :
CPU : 2.8 Ghz Intel Core 2 Duo
I got similar results on pc.
1. 76 [*~]
max5 => 0%-1%
max6 => 1%-2%
2. 10 [pfft~]
max5 => 10%-13%
max6 => 8%-12%
Intel Core i7 3.4GHz
i’m having the same problem with my patches. My main patch which takes up 30% cpu in Max5 yet it takes up to 60%-100% cpu in Max6, rendering my patch useless in Max6!
OSX vers. 10.6.8
2.66hz intel core 2 duo
i was hoping this problem was just me overlooking something simple since i’m so excited for Max6, but now i see i’m not alone.
What can we do (besides not upgrade, since i do think Max6 sounds better, at least with those working example patches it does)?
The first thing I’ve tried is to load some of my usual patches to see if all works. All is fine, so far, except CPU is around 2 or 3 times higher than in Max5. I hope it’s due to beta and that’s not the price of the improvement in the quality of Max
The 64 bit signals will definitely consume more CPU cycles, but the apparent performance hit does seem a bit heavy.
I dearly hope that the beta is a slow debug build, otherwise I will most definitely not be upgrading. I recently bought a top of the line MBP to run Max 5, and now patches that used to top out at 30-40% CPU are crackling in Max 6. I could increase my latency something horrid, but I don’t see why I should have to. Before anybody blames my patching skills and accuses me of being "shit at programming", consider this:
The emergence of a set of "SSE optimised" externals for Max 5 indicates that Max 5 does NOT use SSE parallelism (a way of performing calculations on 2, 4, or even 8 pieces of data at a time using special CPU instructions – Intel’s version of Altivec). SSE instructions have been around for a long time, and IMHO Max ought to make use of them. From the way things perform in Max 6 I can only assume that this has not changed (somebody please correct me if I’m wrong)!
BTW, there still an option for Altivec optimisation in the Audio settings window, even though Max 6 doesn’t run on PPCs.
Given Max’s high system demands I think it is now a fair assumption that anyone running Max 6 will definitely have a PC capable of SSE3 instructions. All Intel Macs support this instruction set. I would prefer to spend my money on improvements to years-old code, rather than pretty GUI updates. I find the wheel menu and the patch cord arrows just get in my way.
Using a program like Max requires a certain level of computer-literacy. You have to be a bit of a geek in the first place. The more time spent on making things noob-friendly, the less time spent on bringing the rest of the package up to speed. I don’t care how user-friendly something is if it’s bloated and sluggish.
Before the petrol bombs fly, I will say that the improvements to [poly~] regarding resampling are an absolute joy. This is something we’ve desperately needed for a long time. And, the filters sound better. I don’t think I’ll be using dictionaries much, but that’s more because I approach things from a fairly low-level perspective. I can see their value.
But there are many things that seem trivial to implement but have been overlooked:
1. [groove~] has way improved sound quality but still cannot be triggered at audio rate. (How many threads have we seen about that!?!)
2. [play~] does not have improved interpolation. To all intents and purposes, [play~] IS [groove~] but without the internal counter or loop logic. Surely the new interpolation code in [groove~] could be re-used?
3. [phasor~] cannot be re-triggered by a signal.
Regarding [gen~], while I applaud the idea, I can’t quite bring myself to love it unless the rest of Max 6 speeds up. Otherwise it feels like a way of making up for lost speed, albeit one that requires a slightly different approach to patching. Don’t get me wrong, the [history] node in itself is going to make a lot of issues go away, but even with my meagre C skills I can write simple externals that run orders of magnitude faster than [gen~].
All persons portayed within this post are fictitious and any resemblance to persons living or dead is purely coincidental. The author accepts no responsiblity for any milk spillage, ego bruising, or kitty slaying that may occur as a result of reading. YMMV.
P.S. It’s obvious that work has gone into improving performance of FFT algorithms, as well as many other areas. This is great. I don’t want to give the impression that the developers haven’t been working hard, and I would be the first one to admit that they are vastly more talented and capable than me. But I am dismayed that a number of core objects seem to suffer such a large performance hit. Progress = getting more things done. What good is it if you can patch things easier if the patch itself won’t work anymore?
Interesting stuff, I’m not sure how many times I’d just use 76 *~ objects in my patches so I decided to make an audio ‘voice’ which contains:
amongst a few other things.
I copied this voice 50 times. One version of the patch houses the voices in a Poly~ (with the addition of gate~) and the other does not. The idea being to approximate the kind of things you might get in an actual performance patch. And to look at how the use of poly~ and multithreading might affect the CPU performance.
I tested the patch in Max 4.6.3, Max 5.1.9, Max 6.0.0 beta.
Results on a MacBook Pro 2.66 Intel Core i7.
I/O vect 256, Sig vect 265, Overdrive On, Audio Interrupt On.
Not i’m not sure what the Activity Monitor readings actually mean – they jump high when poly~ is in parallel mode.
50 voices non Poly~ version CPU% reported by Max CPU% reported by Activity Monitor Max 4.6 31-32% 50% Max 5.1 34-35% 46% Max 6.0 37 with spikes to 53% 56% 50 voices within Poly~ version CPU% Max (w/parallel) CPU% Activity Monitor (w/parallel) Max 4.6 32-34% n/a 40.6% n/a Max 5.1 35-36% 18-20% 48% 75% Max 6.0 39% sp 54% 21-23% sp 29% 58% 87%
As you can see the parallel processing option for poly~ seems to really reduce (spread) the load. Another interesting thing is that the performance between 4.6 and 5.1 is greater in some instances than between 5.1 and 6. My only slight concern is that 6.0’s CPU usage seemed to be quite spiky on my machine.
Obviously 6. is still a beta an I imagine they still have a few things to sort out so it’s a bit early to make any definitive statements on performance. It seems to me that Max 6 offers a lot of new functionality and objects, the gap-less playback, filter design tools, faster JS and better editor, brilliant new jitter tools (materials, lighting, physics, etc). It seems that if you are prepared to optimise your patch using poly~ the performance hit for all these new things is not so bad.
Patches attached – don’t forget to turn audio off/on when changing the parallel setting of poly~
(Shouldn’t this be posted in the beta forum? just sayin’ :D )
"The 64 bit signals will definitely consume more CPU cycles, but the apparent performance hit does seem a bit heavy."
"even with my meagre C skills I can write simple externals that run orders of magnitude faster than [gen~]"
you can… so have you? run a performance test. even gen~ compared to a max 5 external you write, the results would probably be helpful to show here if you can. otherwise, even with my meager lack of social-convention, i’ve still got a 14-inch dick, too. baaahahahaha! sorry, couldn’t resist. :)
"It seems that if you are prepared to optimise your patch using poly~ the performance hit for all these new things is not so bad. "
"1. [groove~] has way improved sound quality but still cannot be triggered at audio rate. (How many threads…
2. [play~] does not have improved interpolation…"
shouldn’t we move on to the sample interpolation options within gen~ anyways?
stop using groove~ and play~ already? what’s the matter with you?!
oh sorry, i got my panties in a wad because my kitty was chomping my leg while i was trying to slay it.
(only thing i write here in complete seriousness: this thread is a fun read. :)
That’s OK raja, my panties were knotted into a tight little ball :P
But I’ve been at a dinner gathering and I played with my friends’ kitties (no, really), which has lightened me up a bit :)
I’m ironing out the bugs in a sinc-interpolating playback object ATM, and it should be on the share pages within the week. Currently my naive implementation consumes about 1% CPU per instance. Out of curiosity, I started patching together an equivalent in [gen~]. I hadn’t even got half-way before the CPU meter was at 12%. Needless to say I gave up.
For 16-point interpolation you need more than 16 peeks, 16 multiplies, a frac or two, 16 adds, and then some, plus a bunch of other utility objects. For this sort of stuff it’s not possible to get anything close to ‘optimal machine code’ out of [gen~] (but then I didn’t think so in the first place). This is not to knock the new benefits though; [history] makes a lot of old headaches go away. Not everyone wants to write externals, so I see great things on the horizons for the more conventional Maxers.
Oh, and the new Jitter stuff IS badass, agreed. All I was saying about [play~] is that the same nice interpolation could be achieved with the smallest bit of copy n’ pasting. It all comes down to my old sentiment that before we get new goodies, it would be nice to have existing functionality brought up to ‘speed’ with competing software. I mean, we’ve already paid a lot of money for what was once somebody else’s codebase with a nicer GUI.
well, i do not see that anyone has investigated how the new preferences panel for controlling scheduler values (queue throttle, poll throttle, redraw queue throttle, event interval, enable/disable refresh, refresh rate, scheduler interval, scheduler slop) affects execution time.
we all know io-buffer size, but what about adjusting some of these?
Might well be different values are more appropriate for various max/msp/jitter applications.(throttle down redraw for better controller/synth work? whatever, needs examining)
just wanted to point out the new preferences…
oh, and strong parliamentary 2nd on the beta forum bit: this thread should really be moved. Beta software discussions shouldn’t be mixed with published software discussions.
And, as far as many forum readers are concerned, *some* beta discussions should stay in beta forums!!: once software is released, go ahead state your judgement (once!) and act upon it, but it is really useless to beat the horse *after* the race.
"It all comes down to my old sentiment that before we get new goodies, it would be nice to have existing functionality brought up to ‘speed’ with competing software."
"Beta software discussions shouldn’t be mixed with published software discussions."
That’s segregation! :D
(but ya, if people could follow the sticky instructing us to post in beta, that might make it easier for the devs to focus on them appropriately…)
Hi there christripledot,
Could you send me some details about the machine you are testing on, and the 16-point interpolation gen~ patcher? I think we should be able to get very good performance for this from gen~, and if you’re not, it may be a great example for us to use in our optimization testing.
Last. Post. Ever.
See attached screenshot: this is more expensive than my whole external.
OK, my knickers are untwisted. FWIW, I got the CPU down a great deal, and here’s a sinc interpolating playback [gen~] for y’all. I get ~6% CPU, which is aight but by no means great (not to diss [gen~], but this sort of thing is definitely much better in pure C). I reckon if [play~] had the same interpolation as [groove~], the CPU consumption would be negligible compared to this.
[edited for tidy patch cords and pretty colours]
[edited again for bugfix and added sine test]
----------begin_max5_patcher---------- 3842.3oc6c01iihbD9yy9qvxJQJYuYmzu2MQJeHe+9ADoSQmv13Y4VavxFe6 d6o69sGLz3AOigtvlAWNzewy.1Fp9gpddptpFyu+gGlNK8aQ6lN4eN4ml7vC +9Gd3ghccXGOX29goqC+17Ug6J9XSmmtdcTR1zGKeurnukUr+cwIQSxh1c7c 1DlM+ywIO+yailmUdF3LxSjGmHq8J07DYx+09UhWTbnRm8KehIpNNKSSxRBW GU7V+6swgqpdmj8qiSVEkUXXzW1Y59rp8RpcP1E+8hCBM+DeXu+wG9vgWd7Z G3ahhVzxflVNno5h+HZeTyw1nNI5q4F1aFzylva65LoXTZJuNaZaDSU8xHl2 vH1t6xOY1usIpz.mNKL44oO9p+N4+dA.z5nc6BeN5LwCeOJNYW35M6lPUbin M7JnzqnvhmDnJ1P0fKBqi.F6r.Fsi.1kANy1mkkl31SojKfc70yNvIcvef15 E9KZrzPjPdz+W9yI6R2ucdTaCTsMvu3O51iI55kXdubId4pzvrdEah91lsSx EF9a+kkzI+ixvfml7wIpmXFN0H4DMUGHMp+dKHmnzEgprdGpVgNZuPmLLQGM fZYShmrDfqToThv7jrY7vzKvAqivQ7AYx2CGp8eOtzKZBwcZFV5TUPaNLhdg M8ZkeN.X8INMqEzgUFHwKek0l2CM3l39b8hxM.K49iKJO3tPmRWGIqUtFyMg qo+SUYazlUgspdopGPI3skeBUeGkeR94bVz1+rxt1E+bQ5yGOMMCEkbvx1Ei jWHTrNcQT+ENkOpRNbBuJB47Y4LOaa5t4oah9SmdJL6jcJy1gIZHkNp3B7Hd eEeWuKKsHo81Fj1gGsLscktUm.9MgCsWtn2.FEmrLEPJu1bcsgJTlnUoFRu. SlKJm2bTZU7tZ4r.7e5UT8uBHrhAPzN3lv+Z825S.4G9WtQDaHX6Hh9tCQh9 9hv4sM5omPyJqd8bidUGFij2yBf73jkwqVcX9fyyiSmDtYypeaxr7LO9x5vD mWosQ.TYaIeHumx8ngT22ubYdJIV50IK1te8Ollt4ov3ktiFrUWj25TdtMBR GIM68r5qPruFmrH8qQKN3f4DprZSjV0tY+eFR8bTB.QlRmHNu0rZtIS84HkZ 8wPzVKPXQh7CW7pneMZ6t3zjZmkGlly3Ta2OT6qb.99kzhCj5wi6JNobWji6 ZazuFW88Ik6L+hxGpdyi.YI1InkQirhYInT0xBN+B3yySWUd7+o7YbD73ouT +CtJc9WhVT2RllmEdRbxlsQ6hRxBypLop2dQzxv8qx94yCrm99KOL0ul9xm8 R6CSeda7hzjCFwIeyC6t5zUoQQOYTW7IRB2blu7t7ww9cyB2d.hms5TaJKMc 0ou0wqp4QBgIwqCyhxhKMVF432Kd8lsEEWo1wJJIL+X74cy2ltZ0IGpx24WO y6rH+B+7nuFuH6ymLCwCuS9GOdS0kfoGwnEwOenaXmrurvm2c5dNo+a08HqG hex9aKT+UIPMwPCX0eqyUdUc8xqZcYqE0+1JrJqeDa1IoINfl4AZgKnUg2Gp HHswiuGHIkbrijMgjFKDR.hjA5wGPdnaImSn1ElVNwm.sSL0bgXJqQLkcoX5 iCHtl+gVuwAVpCNw+T4DKCtPrje+5e9QfXXYNRl2z6k2VVCRu6PdGvVpgAib aFmRmhND5Hkq7jpr4xqrjkTA.NYiSZxeHO2PgAllCy.MiHB2KjCTH2tdObKj SIBuRti38JOTkavT5kxaRChAVJWMFkxU.8EEfkx0dob2dkDvR4lwpTNmnYvT cfWbCRfWJGnTts8t.jxoDuTti38JOT2R4TpWJuIMHBTobJaLJkKA5KxfJkS4 dob2voApTNULVkxEj.W4Ypr2MILfR4Je00cpjWgoBfJ4Je00aFKom3e5THW4 qtdiXnBnNtdTVbcALTrZw25T2Q6qsN.eRAPUb8nsz5RJi.SvAbKx09JqCUDG bKx09Bq6j5DZKx095p2HFBsE45QYY04vPQvcHW6qpN.eRnMHWOZKpthJDvDb .2ebsul5PEwA2dbiuj5tB1A2cbiuh5MJ+.s43lQYA0Y.8Dg1abiud5.7Ig1Z bynsb5Zpx.SvAbmwMRuHNPQbvMF2n7h3NB1A2Wbi1Kh2j7Cz1haLiQQbJPOQ ncE2D3EwcilPaJdvHchNW3hxBbqbE9p.6Zga.tUtBeUfaDCg1JWwnrJvex.7 N6opjaNcE8kAFfSIzd4JFskAlJ4JWMy8zd45VwwWFX2p3cqUtReUfen8egj. 2IWouHvMAgPajqbTVC3OoAghUMx0oBtzWCX2tjP6iqbzVBXpfyUfTap5Sla0 FeIfAJfCtMtReEfcDpCtKtReAfaR5AZSbkix5+9IELGQATAbe8ec6RBsGtJx nU.myoLPpMU8Hy8suC0KfCS.GbKbULu.d6g5f6fqh6EvaP5AZCbUhQo.tDli HCn.tR5EvcBlP6eqRMZEvYLiq16XeZyT0oQmxMb+M0rSEbVG6DN2eSM2bvdG 6DN2eSM2HFBtS3ixap4OIfAiv6Dt+tZFfSI3NgOZuqloTlR.SxAbyF49IhCU FGbuv49Yh6j6Dr+oep3MhgP6FNebNWbNLXDb6v49IiCvoDZ+v4i2YiSXBBLI GvMDm4aHNTYbvcDm46HtqncvsDm4aIdi5OP6INab1SbFPWQnMEm4aJN.mRnc Em6uon.I9T8rMCZ2bYTu3SiXIoasykw7hOMfgf6mKiO9DefyZV4QBsUjrQ5h ANa6dmLkRKEYCO5WeMTRGgx4erXNjOACHsOXtYNARyX7goY.ipfMuQ3O4N7c FG5bwg+f6XzVsnO45GEh.UM9R2S+YL9LysCUz.9S+Dw3Kox7yryeiRroBoXP 0u6+axLRK33v.Ty1ubYzVX4NZieKkoUANwqKcxLj6alPKj1AMFKvJsO62A73 Debhr.qSI7GoQiyUMDEn.Cz096HbdMPldHWWKp1s7xHbRMK2FlCVflanEEIN +cS1Wxb2A1fWG5iyoxDm3L2Qarskgz8jB6c8590q7ncOcUbRztxO6qw0BX3v 6edz05AVdZJjEx0ElbJjrHZWVbRXVbZRsOXwSV8W8I+b7hEQIuFCVDuKb1pn BfEVBxc1nMfM57jGlPwgQqAZzmYzcyrYBPa1fHaFpug.MlrApMaz3wlAGCxA ZyySWkts7KRdxj+cdR7X0+Ebx2ec7hMowIY6p9k2L3vjHXL9g+HHur0ol26O l.NDmfmqiptDhiCpzC+jcCylU3AmEPsY7nyZ3PsYJdrYF13k3h57REaMz7RT nWGQjlHoKwKHgWBJ8+E64U7BwomGWW3qQoEddzfW1Zn87fdQbfgDanIpgD9. AILdcHoXKjBIZ8.AIbYcHoXKrBIzABRD55PRwVHERTxgldE6TIxfgkJA+LIR 9vxjfehDgdXIRzAnmHQLvbqT7CIb4PG2f9.G1fSthd1UFaXUfsSsFyRvTJeX wDM9mzGknG1PGM9CcnD5vxvpucLrZvs8.OkKWCdhY3ozyZnskPKwiMqvVYbE p5ZMEaMzwKPa6gFOciUK5R7BNJiqFZaOz3ob4Zns8PiHtTnskPEfGalfMdIo oNuTwVCMuDTHAOzRJnodnwS2XUltDhiCpTETeCEh7Mfl5gBOz+JnoFn33wlE ngJEKKfHEzLOT3Y1EJVWBWPBsD3LOPD8OzLOjHhJEbUOPiIKglYfDOqESoAY Lo29k7jDbhGHx0S0kHbbvjJgl3gDOJVRnIdHwC6uDZlAR7rTLkLjQKc6KgmD ZhGR7L2BIoKgK3fVR.VEGOz+BvqKA7PkJfJyJvSqED3o0B1luc6Kgm.pLt.O StPH5R7BR3kfJIJPDuDTMKNdJSuffnTOPRLNGpln.Oo8xMcIdAGw3bnZhb7v kxgpIxwSdobnZVb7Tyat.a7R294DwgN0VNdx6ky5R7BR3k.qiiH9en53L7vk xfpyxvSEjYFrwKc6KgLCrNNdxUmo5R7BN3kXP0wY3g+mAUGmgmbOX7aWL9.L 5fpHyvSFrLZW7hvQzJEp5VvEs39IOdxpYuUkBooTaHnPovndYqA12CLlXjCD lPs2.y01BqXhNXfvDltNlvzXFS3Carixf+XG0PwmHo0wDIEyXBcX4StCnSjx gkN4NfMQDLvJw3mLQHFVxDaxInlLgOvDrr6ALgNrgNr6fjXYCLCqESPMEKUO rBwVLA0JwT5.OaGg9N.THACbJa2CdJD9.mz1MjRAbk1wypofB9N7COUnk1o6 8.jTaMnUBu3WscF.a9UQAA1zKJWKJFl53VCcTfrK+hWe4iTZYWjTB0wsP6Hk dUiTlp9HkoP7Hs32wfq160NRQs2q55hSkj5izhsP6Hk2Gwo2AgoRceDldGDk Jo8QT5cPPpP1GAoVwTTGjx6E5H18vHk2GNur6fDjX8BejcjhZBohN7e8RLb7 qwT7no4pGo1qo3djRo8wP0bOLTIx9HR0bCiTgtnmPTU..eKnhm6OMJbFQJhL ZvqrcJCQVMuSDUXwpYX6NX71+Smy4t.0zkRAhtTR5TXCRpSIAdOfvyZilRf+ ivKhTvH5NkfAVrZzcSVe6ugBN2EnltTZPzkRQmBavBEEXkcBhjCHrN8jsEKV MsK8sBKFMAaLT29aESJ5ts4QPhkP6eGdbsg1GNfVbCOzZ3k+PFbbiNcc4kGl 4Kh1DkjeVm+a+77v4eN57OWyO9rXeSTzWdZ82Re4ww9zpmb5Si+wv+yzV.xi GjkaCmmc0Gkrs6Sle0Gke3pOBe7pOBy1ubYz1q9vLeU35MvNJ1mv8kdDEuZ8 IN8gaewI4MA.kmZGO5uah45jOyab3eqiq03dryViAh0vFTyg5xbFNzQC.cBF LqQBvZFtKUmT9eHxMuqVCGhiCYvLmSuQOap+eNLmWKoYeXIwYEq2hW13kSS+ Y+DH7BpACOoPXMkcCOqVZ+7Wfy5q+z915uZuyWa9F9gEWJsLebpc8zpdmFAf zIFNpPptGhu5QyQA3BrXXMGWbyLVGoeDlBOrx0WQEYD4cxeSAweqiQLbxKwH u+QLPTq0CmKADAxSoobimLcw7cs28XEzQL56DbRglnJcXvyC9dJW1y.x.A.d TnyZnnwZnWJ6b9bD+iO7+.Hl+9jG -----------end_max5_patcher-----------
I can’t reproduce your experience here. I have replicated the patch, however, without any outlets (or side-effects) there is no actual signal processing being done in the generated machine code. According to the gen~ object it is using about 0.01% of available time, which is probably under measurement error. In the parent patcher, 0.4% CPU is being used, which captures the overhead cost of the gen~ container. Measuring performance in top, or activity monitor, shows a greater percentage, but this appears unchanged whether the gen~ object is present or not.
Could I ask you what OS version and the details (model, cpu) of your Mac, and how you measured the high CPU cost of the gen~ patcher? There certainly shouldn’t be a high overhead of this nature for the patch you sent; if there is, this is a bug report.
Ah, sorry Graham. Please see the above post. I have no idea why my CPU meter was so high with that unfinished patch. If it helps, MBP 2.2GHz i7, 8GB RAM, Snow Leopard.
I guess I was writing my reply when you posted!
FWIW, with your new patcher, on my machine (MacBook Pro 2GHz Core i7, running 10.6.8) I’m getting about 0.5% from gen~ (according to the gen~ internal measurement), and around 2% for the parent patcher (according to the mixer engine measurement). The gen~ measurement goes up to about 0.8% if I drive the phasor~ at 100Hz.
There’s no doubt that it hand-coded C can generally be tuned and optimized to have better performance than something which has been generated from a more generic system, but overall we’ve been quite pleased with the performance gen~ is producing. It’s important that gen~ has good performance, on average significantly better than a comparable MSP patcher (of sufficient complexity), but performance is not the only motivation for Gen. Simply making available low level processing within an environment that doesn’t require knowledge of pointer arithmetic is very important; it makes available to any user (regardless of their programming background) a whole range of processes that were previously impossible or impractical in MSP, especially regarding the [history] operator as you say. The ability to generate and test live without needing to stop the program and recompile is also very important to support exploratory and live programming, both of which are very important creative activities. To expose this kind of generality may imply trade-offs for performance, but overall I think Gen is handling that trade-off quite well.
By the way, the 12 point interpolator sounds great, would you mind if we modified it slightly and added it to the distribution examples?
I’d be honoured! (Is it not 16-point though, or is there a hole in my understanding?)
For all my ranting recently, let it be known that I am seriously impressed by much of the work that’s gone into Max 6. As you say, the benefits of [gen~] extend far beyond processor savings.
Thank you all for the feedback. There are many things to balance w/r/t performance, quality, multi-threading, seamless audio, etc., and we will be working to improve performance both before and after the release.
Here are a few things to keep in mind regarding performance testing:
– Max 6 is still in Beta.
– What is in this beta is not a debug build, and there are some unresolved issues. We acknowledge that.
– We take performance seriously, and are working on these issues (as well as many other aspects of the software, which are equally important to address).
– Some things are faster, some things are slower in Max 6. Some of that will remain the case even after release.
– There are a variety of priorities we are balancing. Performance will sometimes suffer at the expense of quality, flexibility, and maintainability. You are always welcome to continue to use Max 5 (or Max 4) for the situations where you find it performs better if you prioritize performance over quality and flexibility.
– Multi-processor support does incur some costs and we’ll be working in the short and long term to improve this.To adequately compare a comparable Max 5 and Max 6 patch, please disable multi-threading support in the Max preferences to take any multi-threading overhead out of the equation. This is especially the case when trying to compare 1% vs. 3%. CPU.
– Whenever possible, please give us detailed examples of the performance tests you are making. Thank you to those who have already done so. We will make use of them and improve them where possible.
– Some things about using 64bit do come at a cost (e.g. among other things it uses more memory for signal vectors, and hence cache performance will not be as good). We think that the audio quality makes some of these performance costs worth it.
– Some things about the mixer also come at a cost (e.g. patcher cross fading while editing). We’ll be trying to make this easier to configure UI wise so that you can more easily configure for seamless audio vs. CPU performance.
– For the initial Max 6 release, we will not be focusing on less maintainable SIMD code, though over time we will be investigating this more, both in the existing object set and in code generation.
I hope this helps to address some of the questions and concerns raised in this thread. We have some good ideas in a variety of these areas, and we hope that in the next public release, you will find some improvements.
Your continued feedback is important to us. Please keep letting us know how we can make things better. It might not always happen in the time you like, but as a small team working hard on a project we care about, for a community of talented and interesting people, we try hard to make Max something that is enabling rather than limiting.
Thank you for taking the time to give such a thorough reply! Thumbs up to all the above! :)
I made the CPUtests of leafcutter, but needed to reduce the number of voices to 20…
White Macbook 2 GHz dual core OS 10.6.8
20 voices non Poly~
version CPU% reported by Max CPU% reported by Activity Monitor
Max 4.6 24% Activity Monitor: 31% after closing idle 9%
Max 5.1 29% Activity Monitor: 39% after closing idle 10%
Max 6.0 37% Activity Monitor: 53%
after closing the patch idle 20%
after closing a different patch (10*gizmos) idle consumption went down to 6%
20 voices within Poly~
version CPU% Max (w/parallel) CPU% Activity Monitor (w/parallel)
Max 4.6 25% – n/a – 32% – n/a
Max 5.1 31% – 19% – 41% – 44%
Max 6.0 40% – 26% – 52% – 55%-62%
The cost for 64-bit sound seems high at the moment. I appreciate the efforts to make it better. I really love the gen~ object and the overall enhancements within the work flow…
I updated Max6 now to 6.0.1
I must say (for the moment) that for me and my laptop:
MacBook Pro i7, 2,3 GHz, 8 GB, OSX.6.8
Max6 is useless.
The reasons are well explained in this post.
I also find that 64-bit is a feature at a great cost of CPU, firing numbers beyond any control.
And unfortunately I can’t estimate the audio quality with my ears on my own work.
Can be considered an improvement?
My patch is the outcome of three years of work on Max5,
that finally has found the right balance of Performance / CPU / GUI,
making large use of Max, Msp and Jitter togheter.
Max6 is simply unable to do the same job, also due to a very slow GUI response,
that can cause a crash if the patch opened has a relative density of patch cords to rebuild.
Yes, the GUI is more charming, more user friendly, more…
Can be considered an improvement?
I don’t consider myself a skilled user and I don’t want to belittle the work done at Cycling,
I’m just realistic about what it concerns my experience,
and at the moment I can’t glorify Max6.
Yes, I continue to use Max5.
You didn’t update. Max5 is still available on your computer.
Max 6 isn’t useless; I’ve found some good uses out of it. I’m sorry that you haven’t been able to notice differences in 64 bit audio. Here’s a hint to where you might find improvements: http://cycling74.com/2011/10/13/max-6-sneak-peek-msp-audio-quality/
You are an early adopter and may need to find out why some of these things are happening and report them. They could be bugs that help everyone. That’s part of the responsibility that comes with the benefit of using the software immediately.
All of the things you have mentioned can be tuned in preferences and options. I would try that as well. If you use this as a learning experience to figure out tuning max preferences and figuring out where bottlenecks are, you will certainly be a lot closer to being a skilled user. I don’t want to belittle your experience right now. I want you to realize that you have a lot of options that will inevitably make you a better coder.
> You didn’t update. Max5 is still available on your computer.
Can you be more clear? Am I forgetting to read some documentation about it? Or even some post?
>Max 6 isn’t useless; I’ve found some good uses out of it. I’m sorry…
I can’t estimate the audio quality, since my patch doesn’t run properly in Max6 as it does in Max5.
This great cost of CPU causes an enormous latency with obvious consequences on the audio signal.
Yes, I’ve seen all the documentation came out since the Beta release
but usually I don’t admire something that can improve my work till it really does it.
>All of the things you have mentioned can be tuned in preferences…
Unfortunately there’s nothing to tune, nothing that can magically quiet a nervous CPU performance.
Bugs > a very slow GUI response that can cause a crash.
I don’t think to be the only one here to experience this.
^ To be fair, both Max 5 and 6 crash on me on a pretty regular basis, even when patching simple things. I’ve learned to live with it, and to save often. This sucks big hairy plums, but I don’t think it’s got any worse with Max 6.
Max 6 isn’t useless; it’s a great new piece of software with teething troubles… but it IS a CPU hog, and the difference is noticeable. Those of us with big patches that Max 6 seemingly can’t sustain are entitled to our grumbling. It’s not fair to dismiss someone’s valid complaint by suggesting he become a "better coder", even if he was a bit brusque.
yes, I was brusque.
Because I think this topic must be on the top of the paradigms to take in consideration in Max6.
And because I don’t understand why I must start to think smaller in Max6
with the latest generation laptop. I love quality too, Max itself is quality,
64-bit processing audio means a great quality.
I plain to use just Max6 for any audio application
and don’t corrupt audio recordings / performances
through any plugin or other softwares with ambiguous algorithms.
But now I’ve a candy that I can’t unwrap
and I’d like to know that in the next future I can finally taste it.
As christripledot said, thanks… it happens especially to who is keen on building big patches.
Of course, it’s hard to find solutions for every taste.
Have a look at 6.0.1. We addressed a lot of performance issues. Hopefully this candy you can unwrap.
"But now I’ve a candy that I can’t unwrap"
I feel the same way because i am also building one big patch since a couple of years that i’m quite sure won’t work with max 6 because of performance issues. And i dodn’t want to stop the discussion, i just find that the point really is that a company decided to do the next step to early for our budget..
Max 5 is still here as somebody else said.
i just find it really dump to say things like max 6 is useless, although i also wanna taste the candy…
Thank you Wesley for your reply,
as I pointed above, my experience is the same on the 6.0.1.
I’ve grown sick of this discussion too. I don’t want to dump on Max 6; it’s a quality piece of software. The benefits [gen~] brings are staggering, particularly for the educational field.
I’ve gone and bought Max 6 because I don’t want to fall behind. In order to continue to realise my all-conquering performance patches, I now find myself writing more and more C and assembly. Such is life. In any case, I’m learning a lot more about DSP and programming in general, even if it does up the development time.
It appears that the majority of users aren’t so bothered about performance. I feel your pain.
I recognise and appreciate the huge amount of work that has gone, and continues to go, into Max. I’m sorry that you and your colleagues have to bear the brunt of such vocal complaints – it can’t be nice.
For the programmers, it must seem like we’re treating you with contempt. For this I am sorry.
It’s a two-way street though – I just bought a high-powered MBP, and even that can’t run my main patch anymore. That feels like a slap in the face. Plus there are new bugs that should never have seen the light of day. I’m sure they’ll be ironed out, don’t get me wrong, but it’s not fair to expect everyone to be happy.
Anyway, I have a feeling a certain somebody is going to be along any minute to put me in my place, so I’m going to make myself scarce once again.
To reiterate Wesley’s call, please keep sending us patches which illustrate performance issues and bugs. We are actively working in these areas. Anything concrete, we can act upon. General complaints without examples won’t get investigated in the same way.
Thanks for your continued feedback!
" but it’s not fair to expect everyone to be happy."
I’m pretty sure I didn’t say this, at least it wasn’t my intention. As for negative or harsh comments, it comes with the territory and is not that big of a deal. My aim is simply to turn them intro something constructive that we can use to make Max better. If you have patches that demonstrate serious performance deficiencies between Max5 and Max6 please send them on. Reading your comments above, I’m seeing something about gen~ and object feature requests, but nothing comparing Max5 to Max6. thanks!
Sorry, I think I was dragging you into an older debate – didn’t mean to put words into your mouth.
I must confess I find the whole, "send us your patch and we’ll look into the problem, but until then there is no problem" attitude a little bothersome. Are you seriously telling me you haven’t noticed a performance hit in your own patches? Or maybe everyone at c74 has an 8-core superMac?
Sorry for any miscommunication here, I was not trying to imply that there is "no problem". I just wanted to clarify that general complaints will not be investigated in the same way as concrete complaints. There are many issues, some we know about and some we don’t. We are actively working on improving the software in countless ways. The more people that present us examples of issues which are affecting them, the more we will focus on these issues.
If you don’t want to help us in this process by providing examples, that is fine, but I will repeat that clear demonstrations of issues will result in prioritization and action more effectively than a general complaint. Not that no action results from the general complaint.
yes I agree with you.
Because I’m sorry, but I can’t post a patch that is the result of 3 years of work.
In the past I always reported simple patches to the support@…
and in some case they’ve been usefull for all of us to solve a bug.
Anyway, I know that it could be usefull but I can’t think to pack the whole patch
and send it by email.
i mostly use max version 4.x until today – and i must say it rocks.
nobody forces you update to something you dont like.
>>To be fair, both Max 5 and 6 crash on me on a pretty regular basis, even when patching simple things.
That is not my experience (or at least not in the same way). Almost all the crashes I see with Max are caused by externals I am debugging. Other than that Max is very stable. I patch a lot. I patch in classes on max – I don’t ever expect to have regular random crashes. If you really are seeing this it suggests to me that there might be an issue with your installation / unreliable 3rd party externals or something else.
>>I must confess I find the whole, "send us your patch and we’ll look into the problem, but until then there is no problem" attitude a little bothersome. Are you seriously telling me you haven’t noticed a performance hit in your own patches?
You are assuming that there are uniform performance hits in Max6, which is not the case. You may have a patch that clearly demonstrates a specific performance problem / bug. Such patches highlight problems that are not obvious to programmers because it is not possible to anticipate all combinations of objects or user requirements. Let’s say you use one object 1000 times in your patch that is now twice as expensive as in Max5 – that might be a problem for you, but someone using 2 of them might not even notice any difference.
In Max 6.0.1 it is actually also possible to construct demo patches (useful or not) than run faster than in Max5.
If you want the software to improve please consider participating constructively by providing example patches.
Finally it is worth perhaps mentioning that if you are using a lot of 3rd party MSP externals that are 32 bit then the cost of wrapping them could be noticeably large. This is not a cycling issue and cannot be blamed on them. They could have decided not to perform this wrapping and so all 3rd party MSP stuff would be broken in Max6 until rewritten. Without a patch it is impossible to know the issues that are causing problems.
Almost all the crashes I see with Max are caused by externals I am debugging. Other than that Max is very stable.
Max5 almost never crashes on my Mac. But Max6 crashed very often (10 times a day), only trying new objects with extremely basic patches (but no 3rd party objects). Unfortunately, nothing reproductible so far, so no bug report…
Sorry to be unproductive! Let ‘s see if 601 is more stable!
When MAX5 was released, I experienced the same problems with 4 vs. 5 Back then I decided to make a benchmark test which could show all the differences on different platforms
I am very sad to say, that NOTHING in the audio performance in MAX5 has improved since then. Now I am experiencing the same sad feelings; I feel that I have to buy the new version because I do want the new features (only gen really), but at the same time MSP gets more and more useless since it is such a CPU hog.
So now I am in the situation where everything that is critical (I make a lot of software for embedded machines) Still has to be made in MAX4, unless I need the features of 5 (only multythreading really), then I’ll use 5, and If I really need the gen functionality, I’ll use 6….
But I think it is very sad that we have gone down in performance almost 4x since MAX4 :(
Mind you, it really is not my intention to be so negative, but I really, really would like to see a large performance stepup, since I really would like to use only MAX6 (I fear the day that externals will not be compatible anymore which I suspect won’t take a terrible long time anymore)
If anyone (the devs maybe?) feels that it is useful to have a new benchmark test I’d be happy to make that and collect all the results, but only if I have the feeling that something will be done with the outcome.
I have the same experiences with MSP and the same fears!
Forums > MaxMSP