[Coco] Devastated. Long term OVCC project falls short

James Jones jejones3141 at gmail.com
Fri Oct 4 23:07:34 EDT 2019


Without profiling data (or complexity theory analysis of algorithms),
you're shooting in the dark when it comes to trying to speed up code.
Compile a version for each target with profiling turned on, run it, and
take a look at the data it generates to see where the code is really
spending its time, and work on that.

On Thu, Oct 3, 2019 at 11:16 PM Walter Zambotti <zambotti at iinet.net.au>
wrote:

> Hello all.
>
> As you all know I have been working on OVCC which is the portable
> version of VCC for Linux/OSX and Windows.
>
> I have just released version 1.1.0 which has finally added the CPU 6309
> Turbo feature.
>
> The 6309 turbo feature is a reworking of the 6309 cpu emulator written
> in C rewritten in X86 assembly.
>
> I actually targeted this project for VCC 1.43 and started before writing
> OVCC. So it was put on hold until OVCC was complete.
>
> It is now complete.
>
> As I was writing the assembly emulator I ran across some major obstacles
> that I had to overcome.
>
> The first was functional testing.  To address this I wrote a
> verification suite that could execute any instruction in isolation for
> all its data and condition code combinations and compare the results to
> another assumed working 6309 emulator (already available in VCC).
>
> After many months work all 437 6309 instructions with countless billions
> of test iterations was completed about two weeks ago. Some instructions
> that work with 16 x 16 bit data take 4-8 billion iterations to test. A
> single test of one of these instructions takes about 10-20 minutes on a
> decent Intel system and there about a hundred or so of these.
>
> During the testing the verification suite which was also timing the
> execution of each instruction was indicating the assembly was twice the
> performance or efficiency of the C code.
>
> However late in the testing stage I remember the C code was not being
> compiled optimized for debugging purposes.
>
> After recompiling the C code with optimization the assembly was only 25%
> faster. Wow I was taken back but at the same time really impressed with
> the optimizations of modern compilers.
>
> But the real performance test is where the rubber meets the road and
> until I got the new 6309 emulator into OVCC then I couldn't be sure what
> the performance gain would be.
>
> Well I have now completed the integration of the new 6309 turbo emulator
> into OVCC.
>
> Along the way I had some major hurdles.  At first the new emulator
> wouldn't work at all even with all the verification testing. How was I
> going to find which instruction(s) was causing the problem!
>
> I had an awful (but incorrect) realization that I was going to have to
> make a special version of OVCC that ran both the old and new cpu
> emulators side by side comparing all results after each instruction.
>
> I was beside myself for a few days until I remember to divide and concur
> the problem.
>
> Basically each CPU emulator contains a jump table (3 actually) to each
> of the cpu instructions.  The only difference is the C emulator has C
> functions and the assembly emulator has assembly functions.
>
> The jump table or the CPU executive doesn't care or know that they are
> one or the other type of function.
>
> So I just substituted a hand full of the C functions pointers for
> assembly function pointers (in the jump table) at a time and waited for
> OVCC to crash.
>
> In the end there were only a few instructions that were causing problems
> and I managed to get it all going.
>
> So what are the results?
>
> Disappointing!!!!!!!!!!!!!!!!!!!!!!!!!!!!
>
> On Windows the assembly 6309 CPU runs about 1-1.5% SLOWER!
>
> On Linux the assembly 6309 CPU runs about 45%-50% SLOWER!!!
>
> I can't accurately estimate the amount of time I spent on this project
> but it is a lot (I guesstimate about 6 months worth).
>
> The only recompense is along the way I did learn a lot about X86 machine
> instructions.
>
> And...
>
> The new cpu emulator can also gather instruction usage statistics.
>
> And, and ...
>
> As I was verifying/comparing the 6309 C code to the assembly code I
> added all the missing 6309 instructions and made some corrections to
> existing instructions that did not fully comply with the 6309
> instruction manual.
>
> So the 6309 emulation in OVCC is full and complete with all
> instructions, both the C and assembly.  This would be easily back ported
> to VCC!!!
>
> For now I will leave the 6309 turbo option in OVCC out of interest only.
>
> I have also placed an additional indicator on the OVCC message bar that
> shows whether the 6309 is running in emulation or native mode.  You will
> see either:
>
> 6309E at 0.89mhz  <-- 6309 in emulation mode
>
> 6309N at 0.89mhz  <-- 6309 in native mode
>
> 6309XE at 0.89mhz  <-- 6309 turbo in emulation mode
>
> 6309XN at 0.89mhz  <-- 6309 turbo in native mode
>
> Hope I didn't rant for to long!
>
> Walter
>
>
> --
> Coco mailing list
> Coco at maltedmedia.com
> https://pairlist5.pair.net/mailman/listinfo/coco
>


More information about the Coco mailing list