November 2007 Archives
AMD taking a page from Intel’s marketing
AMD’s new Phenom processor comes with a new instruction set called SSE4a. For a while I’ve been running under the assumption that this also meant they caught up and added support for SSSE3, and that SSE4a was simply SSE4 with a few new instructions added on. This was pretty cool to me, because SSE4 has some nice instructions like DPPS that I was looking forward to using.
Turns out it’s not so – SSE4a doesn’t include any of the 54 new instructions in SSE4. What it does add is 8 new instructions, one of which is similar to but incompatible with a SSE4 instruction. SSE4 aside, the Phenom still doesn’t even have support for SSSE3.
Although they have improved quite a bit recently, Intel is well known for using anti–consumer tactics in marketing in the past. The "GHz myth" they started will undoubtedly be fresh in the minds of weary techies for years to come. I never expected AMD to sink to such underhanded marketing, but it appears they have: SSE4a is named to be nothing more than confusing to potential consumers.
C++0x work progressing
A bit delayed, but I just found the results of the October 2007 C++ meeting. In it, they voted in several really nice things for the C++0x draft:
- nullptr – no more using 0 or NULL and getting int/pointer overload issues. ( N2431)
- Atomic library – comes with several classes and utility functions for working with memory ordering and lock–free algorithms. ( N2427)
- Threading library – basic threading, mutexes, and condition variables. ( N2447)
- Unicode literals – UTF-8 and UTF-16 string literals. ( N2442)
- Unicode codecvt facets – UTF-8 and UTF-16 codecvt facets for reading Unicode streams. ( N2401)
Using proper punctuation marks
I recently learned that the lovable character between the 0 and the = key on QWERTY keyboards is not a hyphen (U+2010) nor a minus (U+2212), but a hyphen–minus (U+002D). Not just that, but I learned of the existence of various dashes, such as the figure dash (U+2012), en dash (U+2013), and em dash (U+2014).
Using proper punctuation marks can be especially hard for the simple fact that they don’t exist on my keyboard. Microsoft Word will automatically replace two hyphens with a dash, but what about the rest of the apps I use? For now, I’m stuck using the tedious Alt+Numpad formula, or copy–pasting from the Character Map. I think this auto–correction would be a great thing to integrate into Windows, perhaps into an IME. Call it the next evolution of input, like how speech recognition was added to Vista.
Working with cryptography; turns out it’s not so simple
While coming up with a new list format for PeerGuardian 3, I decided it should have built in digital signatures, so everyone getting lists can verify the integrity and who the list came from.
Although I’ve used crypto systems like GPG before and understood the basics of it, I’d never implemented one myself. So after much research, I decided on LibTomCrypt due to its simple API, stellar documentation, and support for modern algorithms like AES and ECC. Being entirely in the public domain is a good perk, too.
The first iteration is a very basic public key system. After further reading, I’ve decided it would be useful to implement a full public key infrastructure – that is, signed keys and possibility of revocation. This allows Phoenix Labs (or anyone else) to sign other public keys to verify they’re legit and trustworthy, and later revoke the key if something happens with it (such as the private key being leaked).
All in all, it’s turning out to be a lot more work than I expected, but I don’t mind – it’s something new and interesting, which seems to happen less and less these days.
Visual Studio 2008 released, TR1 support coming
Anyone following Visual Studio 2008 will know that although it offers a plethora of new features for the managed world, there was little focus on the unmanaged side of things. Now that it is finally out the door, I guess it’s a good time to look at what few new features are there for us unmanaged C++ coders.
- Improved standards conformance with support for friend templates, an uncommon but powerful C++ feature.
- Intrinsic support for SSSE3, SSE4.x, and SSE4a. These are modern vector instructions (SSE4a literally just came out with AMD’s Phenom processors!) that anyone interested in writing high‐performance code will want to be familiar with.
- Intrinsic support for the CMPXCHG16B instruction. This instruction is essential when writing many lock-free algorithms for the x64 platform. I’ve been lobbying to have it added for a long time, so I’m especially happy to finally see it. Unfortunately, the generated code in Beta 2 was very sub‐optimal (considering the instruction is typically used in very tight loops) so I may end up using assembly anyway! I’m anxious to see if it is improved in RTM.
- Improved optimizer, with support for inlining transcendental functions and scheduling for the latest CPUs.
- Linker options updated for Vista – ability to specify UAC and address space randomization properties. For some reason, still no support for DPI independence so we’ll end up writing manifests anyway.
- We can finally use those quad‐core CPUs that are coming out to reduce our compile times with Multi‐threaded compiling.
Not much, huh? That’s because Microsoft was running under the assumption that people would flock to C# and only use unmanaged C++ to maintain "legacy" code. Perhaps the best news so far, they’ve finally realized their mistake. Although they didn’t have time to put things into VC++ 2008, they have re‐committed to unmanaged code for the next version and in the meantime made a small separate announcement that they will be bringing VC++ 2008 users a mostly complete TR1 implementation update in early January.