Download presentation
Presentation is loading. Please wait.
1
Sieve of Eratosthenes Lecture L7.2
2
Sieve of Eratosthenes in Java package com.research.hanna; import com.ajile.drivers.gptc.TimerCounter; /** * @author Darrin Hanna */ public class Sieve { private static int j, a, b; private static int primeCount; private static int flags[] = new int[1024]; private static int size; private static TimerCounter tc; public static void main(String[] args) { int count2; size = 1024;
3
TimerCounter.setPrescalerClockSource( TimerCounter.INTERNAL_PERIPHERAL_CLOCK ); // Assuming Internal Peripheral clock is 50MHz, // then Prescaler clock out is 1MHz TimerCounter.setPrescalerReloadRegisterValue( 50 ); TimerCounter.setPrescalerEnabled( true ); // setup timer 0 tc = new TimerCounter( 0 ); //tc.setMode_IO_Line_B( TimerCounter.TIMER_0_OUTPUT_DIVIDE_BY_2 ); tc.setExternalTimerEnableMode( TimerCounter.TIMER_ENABLED_ONLY_VIA_MTEN_AND_TRIGGER ); System.out.println("timer start at: " + tc.getCurrentTimeRegisterValue()); tc.setReloadRegisterValue( 5000000 ); tc.setMasterTimerEnabled( true );
4
// first create an array of flags, where // each member of the array stands for a odd number // starting with 3. for (j = 0; j < size; j++) { flags[j] = 1; } primeCount = 0; for (j = 0; j < size; j++) { if (flags[j] == 1) { // found a prime, count it primeCount++; // now set all of the multiples of // the current prime number to false // because they couldn't possibly be // prime a = 2*j + 3;// odd numbers starting with 3 b = a + j; while(b < size) { flags[b] = 0; b = b + a; }
5
count2 = tc.getCurrentTimeRegisterValue(); // output the number of primes System.out.println("Number of primes = " + primeCount); System.out.println("count2: " + count2); //Processor clock is 73.728MHz }
6
: FILL ( b u c -- ) \ fill u bytes at addr b with char c -ROT\ c b u FOR\ c b OVER OVER \ c b c b C! 1+\ c b+1 NEXT DROP DROP ; Sieve of Eratosthenes in Forth
7
: sieve ( -- n ) \ n = no. of prime #s 0 1024 1 FILL \ fill flags array 0 \ cnt 1024 FOR \ cnt 1024 R@ - \ cnt j DUP C@ \ cnt j flags[j] IF \ cnt j DUP 2* 3 + \ cnt j a = (2*j + 3) TUCK + \ cnt a b = (a + j) BEGIN \ cnt a b DUP 1024 < \ cnt a b f WHILE \ cnt a b 0 OVER C! \ store 0 at flags[b] OVER + \ cnt a b = (a + b) REPEAT 2DROP 1+ \ cnt = cnt+1 ELSE DROP\ cnt THEN NEXT ;
8
Flowpath datapath : sieve ( -- n ) \ n = no. of prime #s 0 1024 1 FILL \ fill flags array 0 \ cnt 1024 FOR \ cnt 1024 R@ - \ cnt j DUP C@ \ cnt j flags[j] IF \ cnt j DUP 2* 3 + \ cnt j a = (2*j + 3) TUCK + \ cnt a b = (a + j) BEGIN \ cnt a b DUP 1024 < \ cnt a b f WHILE \ cnt a b 0 OVER C! \ store 0 at flags[b] OVER + \ cnt a b = (a + b) REPEAT 2DROP 1+ \ cnt = cnt+1 ELSE DROP\ cnt THEN NEXT ;
9
Flowpath controller : sieve ( -- n ) \ n = no. of prime #s 0 1024 1 FILL \ fill flags array 0 \ cnt 1024 FOR \ cnt 1024 R@ - \ cnt j DUP C@ \ cnt j flags[j] IF \ cnt j DUP 2* 3 + \ cnt j a = (2*j + 3) TUCK + \ cnt a b = (a + j) BEGIN \ cnt a b DUP 1024 < \ cnt a b f WHILE \ cnt a b 0 OVER C! \ store 0 at flags[b] OVER + \ cnt a b = (a + b) REPEAT 2DROP 1+ \ cnt = cnt+1 ELSE DROP\ cnt THEN NEXT ;
10
FPGA-VHDL datapath
11
FPGA-VHDL controller
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.