Do you think much about your shorts?
-
I mean: where does the code in question run? And what does the compiler generate, and how does that mesh with the target CPU? If it's hardware that's going to space, it's probably not running on a common commercial CPU, so you can't make assumptions about word size and what a 'short' is, etc.. [I don't actually know which code you're talking about]
Gerry Schmitz wrote:
And refactoring is not an option?
if it's commented as being there for performance reasons, you can probably assume it was profiled and tested for performance.
-
Working in industrial sector... there are still devices that struggle with memory and therefore I use BYTES for counters when I can, same for the states machine controller variable... So for me it's a yes.
www.robotecnik.com[^] - robots, CNC and PLC programming
I worked with PLC's, etc. Never had to sweat 1 or 2 bytes; getting the storage architecture right was more important.
It was only in wine that he laid down no limit for himself, but he did not allow himself to be confused by it. ― Confucian Analects: Rules of Confucius about his food
-
You make a lot of assumptions.
It was only in wine that he laid down no limit for himself, but he did not allow himself to be confused by it. ― Confucian Analects: Rules of Confucius about his food
WTF. if you don't know anything about the hardware that runs it, you can't make assumptions about the software.
-
Well,
Gerry Schmitz wrote:
In some cases, their loop variable is an int; in others a short; in others a long.
Modern compilers will promote those loop variables to 32/64 bit depending on target architecture. If you are looking at old code... there were reasons to use integer BOOL for performance and 8 bit bool for smaller code-size many years ago. Optimizing compilers today make most of that pointless. I am finally getting around to reviewing that json library @code-witch keeps obsessing over. First thing I noticed was the liberal use of bool. But in the end... it does't really matter the compiler should promote some of these. Best Wishes, -David Delaune
I expect promotion. The reason I use things like bytes and half words is so they fit better on 8bit. I am expecting a lot out of it in terms optimization on a 32 or 64 bit machine. My code favors 8bit it as a result
Real programmers use butterflies
-
Well,
Gerry Schmitz wrote:
In some cases, their loop variable is an int; in others a short; in others a long.
Modern compilers will promote those loop variables to 32/64 bit depending on target architecture. If you are looking at old code... there were reasons to use integer BOOL for performance and 8 bit bool for smaller code-size many years ago. Optimizing compilers today make most of that pointless. I am finally getting around to reviewing that json library @code-witch keeps obsessing over. First thing I noticed was the liberal use of bool. But in the end... it does't really matter the compiler should promote some of these. Best Wishes, -David Delaune
I have the whole application up and running and have gone through all the code and docs. They use random access binary files containing millions of doubles. Storage is / was not a problem. I thought it was an interesting mental exercise in light of some of the "performance" discussions going on. Nothing more. We can all stop "thinking" now.
It was only in wine that he laid down no limit for himself, but he did not allow himself to be confused by it. ― Confucian Analects: Rules of Confucius about his food
-
In looking at this JPL/Nasa code, it makes references to doing this and that for "performance". In some cases, their loop variable is an int; in others a short; in others a long. Given a choice which is best? Probably an int, unless you "need" a long. Ironic that for the sake of "storage" (2 bytes), they've sacrificed performance. [asp.net - Why should I use int instead of a byte or short in C# - Stack Overflow](https://stackoverflow.com/questions/1097467/why-should-i-use-int-instead-of-a-byte-or-short-in-c-sharp)
It was only in wine that he laid down no limit for himself, but he did not allow himself to be confused by it. ― Confucian Analects: Rules of Confucius about his food
Depends on the processor: a lot of NASA stuff was for seriously old processors - for example the US military did use some Z80 based stuff right up to the end of the century, so it's possible NASA did as well. And like many other processors of it's age, the Z80 had eight bit and sixteen bit registers: a "tight loop" could optimise to a DJNZ operation (using an 8 bit register) or an LDI / LDD / LDIR / LDDR (using sixteen bit). If your loop needed a 32 bit integer, then machine code got a lot more complex. So variable size choice could easily have a bit effect on performance - and given the old processors ran as speed we would consider unacceptable for a digital watch these days every little helped! :laugh:
"I have no idea what I did, but I'm taking full credit for it." - ThisOldTony "Common sense is so rare these days, it should be classified as a super power" - Random T-shirt AntiTwitter: @DalekDave is now a follower!
-
WTF. if you don't know anything about the hardware that runs it, you can't make assumptions about the software.
-
I expect promotion. The reason I use things like bytes and half words is so they fit better on 8bit. I am expecting a lot out of it in terms optimization on a 32 or 64 bit machine. My code favors 8bit it as a result
Real programmers use butterflies
-
Depends on the processor: a lot of NASA stuff was for seriously old processors - for example the US military did use some Z80 based stuff right up to the end of the century, so it's possible NASA did as well. And like many other processors of it's age, the Z80 had eight bit and sixteen bit registers: a "tight loop" could optimise to a DJNZ operation (using an 8 bit register) or an LDI / LDD / LDIR / LDDR (using sixteen bit). If your loop needed a 32 bit integer, then machine code got a lot more complex. So variable size choice could easily have a bit effect on performance - and given the old processors ran as speed we would consider unacceptable for a digital watch these days every little helped! :laugh:
"I have no idea what I did, but I'm taking full credit for it." - ThisOldTony "Common sense is so rare these days, it should be classified as a super power" - Random T-shirt AntiTwitter: @DalekDave is now a follower!
It was ported from Fortran to C in 1993; not exactly the dark ages. "High performance" update (double doubles) around 2013. [JPL Planetary and Lunar Ephemerides](https://ssd.jpl.nasa.gov/?planet\_eph\_export) (This whole thing started because I made a solar calendar and said it was "accurate"; which begged the question "how accurate", etc. Anyway, I do a lot of calcs in real-time for a simulation; ergo...)
It was only in wine that he laid down no limit for himself, but he did not allow himself to be confused by it. ― Confucian Analects: Rules of Confucius about his food
-
It can run on anything with a C compiler. I could put it on my phone / watch.
It was only in wine that he laid down no limit for himself, but he did not allow himself to be confused by it. ― Confucian Analects: Rules of Confucius about his food
maybe it can run on anything with a C compiler ... as long as it was deliberately written to work on any OS with any CRT implementation, using no system-specific libraries, and making no assumptions about the underlying hardware. :laugh: :laugh: :laugh: the C spec only specifies minimum sizes for short, int and long. int and short must be at least 16 bits. long must be at least 32 bits. so what any of those types means in terms of storage and CPU handling (aka performance) depends on the compiler and the target architecture.
-
I worked with PLC's, etc. Never had to sweat 1 or 2 bytes; getting the storage architecture right was more important.
It was only in wine that he laid down no limit for himself, but he did not allow himself to be confused by it. ― Confucian Analects: Rules of Confucius about his food
-
Lucky you. If I choose the material to be used I never have to... but when the customer gives me the material then everything can happen.
www.robotecnik.com[^] - robots, CNC and PLC programming
The customer ordered it, the hardware company built it, I had to program it (contract). There were no choices. The hardware company used my software to debug their firmware. (Only way to avoid finger pointing).
It was only in wine that he laid down no limit for himself, but he did not allow himself to be confused by it. ― Confucian Analects: Rules of Confucius about his food
-
maybe it can run on anything with a C compiler ... as long as it was deliberately written to work on any OS with any CRT implementation, using no system-specific libraries, and making no assumptions about the underlying hardware. :laugh: :laugh: :laugh: the C spec only specifies minimum sizes for short, int and long. int and short must be at least 16 bits. long must be at least 32 bits. so what any of those types means in terms of storage and CPU handling (aka performance) depends on the compiler and the target architecture.
-
The customer ordered it, the hardware company built it, I had to program it (contract). There were no choices. The hardware company used my software to debug their firmware. (Only way to avoid finger pointing).
It was only in wine that he laid down no limit for himself, but he did not allow himself to be confused by it. ― Confucian Analects: Rules of Confucius about his food
-
In looking at this JPL/Nasa code, it makes references to doing this and that for "performance". In some cases, their loop variable is an int; in others a short; in others a long. Given a choice which is best? Probably an int, unless you "need" a long. Ironic that for the sake of "storage" (2 bytes), they've sacrificed performance. [asp.net - Why should I use int instead of a byte or short in C# - Stack Overflow](https://stackoverflow.com/questions/1097467/why-should-i-use-int-instead-of-a-byte-or-short-in-c-sharp)
It was only in wine that he laid down no limit for himself, but he did not allow himself to be confused by it. ― Confucian Analects: Rules of Confucius about his food
Only when targeting (a) an extremely memory-limited system, or (b) a 16-bit or less processor. (a) may be the case with industrial controllers or the first stage of a bool loader (it is an advantage if the code can run in the processor's internal memory) (b) may be the case for some embedded devices
Freedom is the freedom to say that two plus two make four. If that is granted, all else follows. -- 6079 Smith W.
-
"Not thinking" is not something I ever boasted about. It was a thought exercise; regardless of what the compiler "might do".
It was only in wine that he laid down no limit for himself, but he did not allow himself to be confused by it. ― Confucian Analects: Rules of Confucius about his food
an
int
is just fine. for me, it is a no brainer. If you want to spend hours thinking about it, go for it. -
Only when targeting (a) an extremely memory-limited system, or (b) a 16-bit or less processor. (a) may be the case with industrial controllers or the first stage of a bool loader (it is an advantage if the code can run in the processor's internal memory) (b) may be the case for some embedded devices
Freedom is the freedom to say that two plus two make four. If that is granted, all else follows. -- 6079 Smith W.
Yes. My first job was an IBM installation. Little signboards around the office, and all they said was "Think". One of the few joys left in life when you can.
It was only in wine that he laid down no limit for himself, but he did not allow himself to be confused by it. ― Confucian Analects: Rules of Confucius about his food
-
I worked with PLC's, etc. Never had to sweat 1 or 2 bytes; getting the storage architecture right was more important.
It was only in wine that he laid down no limit for himself, but he did not allow himself to be confused by it. ― Confucian Analects: Rules of Confucius about his food
I have always preferred the 2 bytes distribution for variables (WORD or INT) due to the endian changes, it is already painful enough to deal with it without having to increase the difficulty messing with more than a variable in the "same space" On the other hand, when staying in the PLC I have used a lot of BYTE variables. Specially when grouping bits to be masked or moved from one place to another.
M.D.V. ;) If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about? Help me to understand what I'm saying, and I'll explain it better to you Rating helpful answers is nice, but saying thanks can be even nicer.
-
In looking at this JPL/Nasa code, it makes references to doing this and that for "performance". In some cases, their loop variable is an int; in others a short; in others a long. Given a choice which is best? Probably an int, unless you "need" a long. Ironic that for the sake of "storage" (2 bytes), they've sacrificed performance. [asp.net - Why should I use int instead of a byte or short in C# - Stack Overflow](https://stackoverflow.com/questions/1097467/why-should-i-use-int-instead-of-a-byte-or-short-in-c-sharp)
It was only in wine that he laid down no limit for himself, but he did not allow himself to be confused by it. ― Confucian Analects: Rules of Confucius about his food
More so now because of winter my legs are shockingly white.
I'm not sure how many cookies it makes to be happy, but so far it's not 27. JaxCoder.com
-
In looking at this JPL/Nasa code, it makes references to doing this and that for "performance". In some cases, their loop variable is an int; in others a short; in others a long. Given a choice which is best? Probably an int, unless you "need" a long. Ironic that for the sake of "storage" (2 bytes), they've sacrificed performance. [asp.net - Why should I use int instead of a byte or short in C# - Stack Overflow](https://stackoverflow.com/questions/1097467/why-should-i-use-int-instead-of-a-byte-or-short-in-c-sharp)
It was only in wine that he laid down no limit for himself, but he did not allow himself to be confused by it. ― Confucian Analects: Rules of Confucius about his food
It depends on the target environment. I work on HPC stuff using CUDA and GPUs and with them using a short instead of an int can make a significant difference in performance and Nvidia includes this point in their documentation. With CUDA, using an signed value is almost always preferred over an unsigned value for performance reasons also. They have quite a number of odd, little quirks regarding optimal performance. For standard desktop CPUs I rarely concern myself with that issue. The only other environment I work in these days is embedded code in scanning cameras and I don't care there either.
"They have a consciousness, they have a life, they have a soul! Damn you! Let the rabbits wear glasses! Save our brothers! Can I get an amen?"