I've got a pure math problem implemented in C that will take about 3 years to solve using all 5pcs available to me (the algorithm is about as efficient as it will get without some major mathematical insights).
The funny thing about this problem is that I can easily split it into smaller problems each of which only requires about 1000 bytes of memory and only uses bitwise operations and additions mod 256.
I was considering the possibility of creating a network of microcontrollers, probably using I2C, with one main processor dishing out smaller sub problems and reporting results back to a PC. To date I have only used Microchip PICs, primarily the 18f4550 and done my programming in MPLAB ASM. I think I could easily implement this setup using these chips but they are too slow (40MHz about 20Mips I think).
I have heard that there are some high speed microcontrollers out there, I had a quick look at Freescales range of PowerPC based embedded processors. These are about $25/800Mips - as far as I can tell this would be significantly cheaper on a per MIP basis than buying computer hardware (even omitting the hdd and using minimal ram).
My questions:
- What is the best $/Mips microcontroller out there, preferably with I2C.
- What is the best $/Mips microcontroller that I will be able to understand without too much trouble given that I have only used Microchip products so far?
- The technical docs for the Freescale embedded processors left me somewhat confused (quite a jump up from microchip microcontrollers!!!) what external components do these devices need to run? In particular is the program code stored in the device or does it obtain this via the bus?
- Now I'm not sure about the gory technical details but I assume that given the simplicity of the instructions my program needs to execute the MIPS figures for microcontrollers should be fairly comparable with that for desktops. The main difference I can see here would be regarding branching - I've heard that modern processors go to great lengths to predict which instructions will be executed so that no time is wasted while retrieving program instructions...
- Another possibility that would keep me busy for a while is implementing the program in assembler on my PC. Unfortunately every computer that I have access to has a different architecture (Athlon,Sempron,Duron,2xPentium M) so I guess I would have to restrict myself to x86 instruction set? What sort of performance increase do you think this might produce?
Thank you very much for your time and I look forward to hearing from you!