Q:

Programming on future hardware? 

I want to practice programming code for future hardware.  What are these?  The two main things that come to mind is 64bits and multicore.  I also note that cache is important along and GPU have their own tech but right now i am not interested in any graphics programming.  
What else should i know about? 
-edit- i know a lot of these are in the present but pretty soon all cpus will be multicore and threading will be more important.  I consider endians (big vs little) but found that not to be important and already have a big endian CPU to test on. 

A:

If you'd like to dive into a "mainstream" OS that has full 64 bit support, I suggest you start coding against the beta of Mac OS X "Snow Leopard" (codename for 10.6).  One of the big enhancements is Grand Central, which is a "facility" for developers to code for multicore systems.  Grand Central should distribute workload not only between core, but also to the GPU. 
Also very important is the explosion of smart devices such as the iPhone, Android, etc.  I strongly believe that some upcoming so-called "netbooks" will rely on OS such as Android and iPhone OS, and as such knowing how to code against their SDK, and knowing how to optimize code for mobile devices is very important (e.g. optimizing performance graphic or otherwise, battery usage). 

A:

My recommendation for future :)

nVidia CUDA
nVidia Tegra

Or you can focusing on ray tracing. 

A:

I can't foretell the future, but one aspect to look into is something like the CELL processor used in the PS3, where instead of many identical general purpose cores, there is only one (although capable of symmetric multithreading) plus many cores that are more specific purpose. 

In a simple analysis, the Cell processor can be split into four components: external input and output structures, the main processor called the Power Processing Element (PPE) (a two-way simultaneous multithreaded Power ISA v.2.03 compliant core), eight fully-functional co-processors called the Synergistic Processing Elements, or SPEs, and a specialized high-bandwidth circular data bus connecting the PPE, input/output elements and the SPEs, called the Element Interconnect Bus or EIB. 

CUDA and OpenCL are similar in that you separate your general purpose code and high performance computations into separate parts that may run on different hardware and language/api.