Vscode had been wildly, and widely successful for Microsoft.
I think that's the direction Office is going. I think that model will be used on other applications...
Personally, I keep thinking of switching to Linux because the performance (compile) is higher, and so much code is easier to build and use.
I would be beyond thrilled if Microsoft would allow users to uninstall/decrapify Windows. The hypocrisy of - the browser is part of the OS and cannot be uninstalled and then it was when edge was released is insulting to users.
Eric Mejdric from IBM called on Friday and said we have the chips, when are you guys getting here?
I took a red eye that night and got to Austin on Saturday morning.
We brought up the board, the IBM debugger, and then got stuck.
I remember calling you on Sunday morning. You had just got a big screen TV for the Super bowl and had people over and in-between hosting them you dropped us new bits to make progress.
I think Tracy came on Sunday or Monday and with you got the Kernel booted.
OMG Harjit! I saw you in the documentary! You and the entire team are total rockstars! I just cannot fathom ever being in a position to design something that provided so much joy and happy core memories to countless people around the world...you guys did it!
Just the thought of how many people you touched with your work....just amazing! :)
Had a question if you don't mind: Can you talk about the thought process behind the power supply design? Its very large even in the super slim models. Were you following a specific design driven by the hardware architecture or were there other reasons? I always wondered about that.
Actually Tracy never made it to Austin. He was going to fly in later in the week to continue bring-up, but since we were done by Wednesday, we just sent the chips to Redmond and he continued there. He was of course always available on the phone to answer my kernel questions I had.
You should also talk about the lwarx/stecx bug. IIRC - in the first version of the chip there was a bug in one or both of these instructions. Your code booted on SBox but didn't on the hardware. You compared the two and then figured out it was these instructions.
You filed a bug report and then dug into them and used SBox to figure out what must have been going wrong.
The chip supplier came back with a workaround and within five minutes you simulated it on SBox and said it wouldn't work, why, and then said how it should be fixed.
The supplier didn't believe you as yet. And you worked out a workaround so we could be unblocked. Two weeks later they agreed with your fix...
I recall an issue when trying to use lwarx/stwcx on Xbox 360 directly that the compiler (or maybe even the kernel, on program load? it's been a while) raised an error and said to use the Interlocked intrinsics instead -- is that related?
So the PPC instruction set uses lwarx (load word and reserve indexed), and stwcx (store word conditional indexed), along with variations for word size, to implement atomic operations such as interlocked-increment and test-and-set.
So on PPC interlocked-increment is implemented as:
loop: lwarx r4,0,r3 # Load and reserve r4 <- (r3)
addi r4,r4,1 # Increment the value
stwcx. r4,0,r3 # Store the incremented value if still reserved
bne- loop # Loop and try again if lost reservation
The idea is that the lwarx places a reservation on an address that it wants to update at some later time. It doesn't prevent any other thread or processor from reading or writing to that address, or cause any sort of stall, but if an address being reserved is written to, conditional or otherwise, then the reservation is lost. The stwcx instruction will perform the store to memory if the reservation still exists clears the NE flag, otherwise it doesn't do the write and sets the NE flag and software should just try again until it succeeds.
On the Xbox 360 we provided the compiler which would emit sequences like these for all atomic intrinsics, but developers could also write assembler code directly if they wanted to. We'll get back to this point in a moment.
As the V1 version of the Xbox 360 CPU was being tested by IBM, they discovered that an error with the hardware implementation of these two instructions and issued an errata for software to work around it, which we implemented. Unfortunately, after further testing IBM discovered that the errata was insufficient, so issued a second errata, which we also implemented and assumed all was well.
Then the V2 version of the CPU comes out and months go by. But early one morning I get a phone call from IBM letting me know that the latest errata was still insufficient and that the bug is in the final hardware. Further, Microsoft has already started final production of CPU parts, even before full testing was fully complete (risk buy), so that they could have sufficient supply for the upcoming November release. I was told that they are stopping manufacturing of additional CPUs, and that I had 48 hours to figure out if there is anything software can do that could work around the hardware issue. They also casually mentioned that millions of dollars of parts would need to be discarded, a hardware fixed implemented which would take weeks, then the production could resume from scratch.
Bottom line is that, yes, there was a set of software changes that would work around the bug, but it required very specific sequences of instructions, the disabling of interrupts around these sequences, a change to the hypervisor, and updating the compiler to emit the new sequences. To make sure that developers didn't introduce code sequences that uses lwarx/stwcx in a way that would expose the bug (via inline assembly, for example), the loader would scan the code and refuse to load code that didn't obey the new rules.
Interesting fact: the hardware bug existed in every version of the Xbox 360 ever shipped, because software needed to run on any console ever shipped, there was no advantage to ever fixing the bug since software always needed to work around it anyway.
Thank you so much. This is so awesome to know and learn.
I'm just curious, what are the instructions that replace the lwarx/stwcx "atomic" pair? From my understanding, basic you need to generate a pair of load reserved/save instructions, and you have to replace the pair with a series of instructions. But I don't understand why do you have to disable interrupts -- is it because actually multiple instructions were used to facilitate the load, and an interrupt may disturb a value stored in a register?
We still used the lwarx/stwcx pair to implement atomic operations, but to avoid the hardware bug a strict rule needed to be followed.
Rule: On a given hardware thread (there are two hardware threads per processor on the Xbox 360), every lwarx reservation of an address must be paired with a stwcx conditional store to that same address before a reservation is made to a different address. So a sequence like lwarx A / lwarx B / stwcx B / stwcx A is forbidden. But lwarx A / stwcx A / lwarx B / stwcx B is fine.
So I changed the compiler to emit atomic intrinsics that obeyed this rule.
But there was still the issue of logical thread scheduling. Imagine there are two logical threads running, one has a sequence of lwarx A / stwcx A and the other has lwarx B / stwcx B. The first thread is running on a hardware thread and just after executing lwarx A, the timer interrupt fires and the kernel decides to switch to the second logical thread, which executes lwarx B, and thus violates the rule.
To make sure that never happens, the compiler also emits disable-interrupts / lwarx A / stwcx A / enable-interrupts. That prevents the scheduler from switching threads in the middle of the atomic sequence.
But there was still one more problem. It is possible for a page-fault to occur in the middle of the sequence should it span the end of one page and the beginning of another, and the second page is not in the TLB. So the thread is running along and executes disable-interrupts / lwarx A, then when trying to fetch the next instruction it faults to the hypervisor because it isn't yet mapped by the TLB. The hypervisor executes a bunch of code to add the mapping of the new page to the TLB and then returns to the faulting thread to complete the stwcx A / enable-interrupts sequence.
The problem is that the TLB is a shared resource between the two hardware threads of a processor, so the two hardware threads need a way to atomically update the TLB, and the obvious way to do that is to use a spin-lock that is naturally implemented by a lwarx B / stwcx B pair of instructions. But the hypervisor TLB handler can't use those instructions because the code causing the TLB fault might be in the middle of using them and thus would cause the hardware bug to manifest.
The solution was to use non-reservation load/store instructions to implement a simple spin-lock. If the two hardware threads were both trying to update the TLB then hardware thread 2 would simply wait for hardware thread 1 to clear its lock before proceeding.
Thanks so much for the input! I vaguely know a little bit about everything you talked about--the threads, TLB and such, but I have never worked with them in practice. This is so interesting.
Thanks for your interest! For now, our generative features are focused on parts. However, the chat feature should be able to guide you through alignment textually. This has worked quite well in our tests with frontier reasoning models e.g. o1.
We’ve prioritized parts to ensure interoperability with SolidWorks, since assemblies are constructed quite differently there. Our goal in the development phase is to provide a uniform experience across CAD softwares.
Given current demand, you can expect to clear the waitlist within 4 weeks.
You could look into using the ChebyshevExpansion class directly. It takes as one of its arguments a callback that returns f(x) for a given x. In your case, f(x) would be your sensor values with some suitable interpolation. A more ambitious route is to add support for somehow importing tabular data into the app.
I'm a very long time Windows user and am very very frustrated with Microsoft's shenanigans in the last few releases of Windows.
I'm contemplating trying Linux but:
1. I don't know which distribution to start with.
2. I'm not thrilled about having to learn how to use Linux because I'd prefer to spend my time using the computer.
3. Fear, uncertainty, doubt alert: I've read about problems with power management or GPU drivers or audio or ... and I'm concerned about the time sink of going down the path of trying Linux and then having to go back to Windows.
So, I resort to using Windows but then doing registry hacks to disable or change things I don't like.
What would lower the bar enough for me to try Linux would be to use a performant Virtual box or similar VM, get it running well enough to know that Linux will work for me and then reuse or recreate that as the native/host OS. I don't want to use WSL because I don't want to get stuck in yet another Microsoft 'thing' with it's considerations.
I've used Linux as my primary OS for the past 15 years. I haven't had any more driver or hardware issues with Linux than with Windows for the past 10 years.
I've never had problems with Nvidia cards or Intel's integrated GPUs. Just make sure to stick to the proprietary drivers which can be installed through the OS package manager.
Your best choice for Linux is to choose one of the popular distributions. I'd recommend either Ubuntu or Fedora. The choice of distribution is largely arbitrary. Ubuntu is owned by Canonical, a UK company. Fedora is now owned by Oracle, a US company. I gravitate towards Ubuntu because I primarily use Ubuntu Server at my day job.
The next step is choosing the desktop environment: KDE or Gnome. KDE resembles Windows while Gnome resembles Mac. I prefer KDE personally.
try distrochooser.de as long as you use one of the more popular (ubuntu, fedora, popos) there isn't a wrong answer. You can always just flash multiple Distros on USBs (or Ventoy for multiple distros on one USB) and test them out in live mode without committing to any. Keep in mind you may need to disable secure boot in uefibios.
>I'm not thrilled about having to learn how to use Linux because I'd prefer to spend my time using the computer
People seem to think knowing windows is somehow a natural born skill. A OS is a tool and like any other and you need to understand the basics to properly use it, the better you can the more efficient you are with it.
>I've read about problems with power management or GPU drivers or audio
Issues exist but can be mitigated like on windows with research. "Does distro X / linux support hardware Y". For GPUs I generally would recommend AMD over Nvidia unless there are special requirements like Cuda.
>What would lower the bar enough for me to try Linux would be to use a performant Virtual box or similar VM, get it running well enough to know that Linux will work for me
A VM is a bad way to figure out compatibility for any OS. VM experience isn't comparable to bare metal.
The problem you may have is you won't have access to any of the Microsoft Office software - which may not be a big deal for you.
Honestly, if the available software works for you then Ubuntu is a great distro for a novice Linux user. It's the most "It Just Works" distro out there.
I have a long history using desktop linux and I deal with desktop linuxes on daily basis, and I’m far from being a noob, and I hate them. Just don’t. The issues, all of them are true and very likely. And you’ll find 10x more that weren’t worth mentioning in comparison.
If you want that linux cli experience, install msys2, put it in path, and that is the only linux you need. Rename few tools that name-clash with cmd commands.
Seriously, you’ll be very disappointed and ask why on earth you decided to spent so much (hard) time listening to nerds on the internet.
I think that's the direction Office is going. I think that model will be used on other applications...
Personally, I keep thinking of switching to Linux because the performance (compile) is higher, and so much code is easier to build and use.
I would be beyond thrilled if Microsoft would allow users to uninstall/decrapify Windows. The hypocrisy of - the browser is part of the OS and cannot be uninstalled and then it was when edge was released is insulting to users.
reply