Page 17 of 17 FirstFirst ... 7151617
Results 161 to 167 of 167

Thread: The Programming Thread

  1. Top | #161
    Contributor
    Join Date
    Nov 2017
    Location
    seattle
    Posts
    7,116
    Rep Power
    22
    Pre computed look up tables can be faster but there is always a trasde off between speed and memory usage. For 32 or 64 bit ints how big do thearray need to be?

    For x = n1 * n2; there are 2 memory moves and the mult instruction.

    Disregarding the table generation the lookup algorithm has 4 moves, 2 subtractions, and 1 addition. I haven’t figured out how to count instruction cycles with VS yet but I’d say it is not likely faster, but I could be wrong. Does two sub and 1 add execute faster than a mult?

    And BTW a function call incurs a time penalty. It would be faster to make osq[n1 + n2] - osq[n1 – n2] a macro instead of a function.

    #define BOUND 20000
    void main() {
    int a, b,c = 0,n1=21000,n2 = 21000,x;
    for (a = 0; a < BOUND * 2; a++)osq[-a] = osq[a] = a * a / 4;
    c = osq[n1 + n2] - osq[n1 - n2];
    x = n1 * n2;
    printf("n1 %d n2 %d x %d c %d \n", n1, n2, x,c);

    }

    c = osq[n1 + n2] - osq[n1 - n2];
    005F5B32 mov eax,dword ptr [n1]
    005F5B35 add eax,dword ptr [n2]
    005F5B38 mov ecx,dword ptr [n1]
    005F5B3B sub ecx,dword ptr [n2]
    005F5B3E mov edx,dword ptr [eax*4+621240h]
    005F5B45 sub edx,dword ptr [ecx*4+621240h]
    005F5B4C mov dword ptr [c],edx
    x = n1 * n2;
    005F5B4F mov eax,dword ptr [n1]
    005F5B52 imul eax,dword ptr [n2]
    005F5B56 mov dword ptr [x],eax

  2. Top | #162
    Contributor
    Join Date
    Nov 2017
    Location
    seattle
    Posts
    7,116
    Rep Power
    22
    ttps://www.agner.org/optimize/instruction_tables.pdf
    https://en.wikipedia.org/wiki/Cycles_per_instruction

    Looking at the lateness for imult, mov, add, and sub I'd say at best it is a wash. The additional moves and adds/subtracts offset the imult latency.

  3. Top | #163
    Contributor
    Join Date
    Nov 2017
    Location
    seattle
    Posts
    7,116
    Rep Power
    22
    Is there any reaso why anyone would use FORTRAN instead of C?

    Apparently it is active, Intel offers a comiler.

  4. Top | #164
    Administrator lpetrich's Avatar
    Join Date
    Jul 2000
    Location
    Eugene, OR
    Posts
    15,612
    Archived
    16,829
    Total Posts
    32,441
    Rep Power
    95
    What keeps Fortran going?
    • High-performanice number crunching.
    • A big existing codebase. Much like what keeps COBOL alive.

    However, Fortran doesn't work well with more recent programming languages, and I've found tools to convert Fortran code to C and C++:

  5. Top | #165
    the baby-eater
    Join Date
    May 2011
    Location
    Straya
    Posts
    4,380
    Archived
    1,750
    Total Posts
    6,130
    Rep Power
    45
    Quote Originally Posted by steve_bank View Post
    Is there any reaso why anyone would use FORTRAN instead of C?

    Apparently it is active, Intel offers a comiler.
    A former workmate of mine was using Fortran at uni, around about 2018, as part of his civil engineering undergraduate studies. Apparently it was to create simulations that run on a supercomputer.

    I'm not sure if he actually had to write code - I forgot to ask - although I would assume that engineers have graphical programs for that sort of thing.

  6. Top | #166
    Contributor
    Join Date
    Nov 2017
    Location
    seattle
    Posts
    7,116
    Rep Power
    22
    If anybody is interested...

    I installed the Intel C++ compiler. It is command line and also integrates into VS C++. It comes with math, video processing, cryptography, an neural net toolkits/libraries. The math library looks comprehensive, that is what I was interested in.

    Once installed you select Intel in the VS project options window.

  7. Top | #167
    Contributor
    Join Date
    Nov 2017
    Location
    seattle
    Posts
    7,116
    Rep Power
    22
    The Discrete Fourier Trasform.

    https://en.wikipedia.org/wiki/Discre...rier_transform


    I coud not get the C++ complex number functions to work so I just summed the series terms as scalars. Not practical but a demo if yiu want to explore signal analysis.

    If you run it a few things. It is a power of 2 algorith. If you run it on a ata set not exact power of 2 in length yiu can pad it with zeros.

    Be nindful of aliasing. If signal is greater than sample frequency/2 it will show up at another frequncy line. You can demo it for yourself. You can substitude any signal for y[].

    Real and imaginatru terms are summed and magnitue is foundby root sum square. Phase atan(inag/real);

    The mag[] output is a mirror spectrum, so in display only use 0-N/2. The amplitude of the mirrored signal is 0.5 so to get te correct signal amplitude mag is multiplied by 2.

    For signal plot y vs x, for spectrum mag vs f. You can vary transform time, sample frequency, and trasform size. The max time must be enough to accommodate the lowest frequncy cycle. Sample frequency must be 2 x highest frequency. For demo code is set so the signal length always equals the transform length.

    I use memory allocatio on the heap for the arrays because the compiler can give warnings about running out of stack memory. Also the compiler will not allow variables for fixed array size.

    You can change the output to csv and plot in a spreadsheet.

    Run time

    N--size ---Time
    10 1024 - .2
    11 2048 - .5
    12 4096 - .8
    13 8192 - 3
    14 16384 - 10



    class _sin {
    public:
    double DC = 0,fsig2 = 1, fsig1 = 1, fsamp = 1000, A2 = 2,A1 = 1, tmax = 1;
    double *y, *x, *f;
    int N = 1024;
    void make_sin(void) {
    // creates signal,
    //frequency scale for DFT,
    //and time scale for signal
    int i;
    double t = 0, dt, freq = 0, df;
    df = fsamp / N;
    dt = tmax / fsamp;
    for (i = 0; i < N; i++) {
    y[i] = A1 * sin(_PI2 * fsig1 * t) + DC;
    y[i] = y[i] + (A2 * sin(_PI2 * fsig2 * t) + DC);
    x[i] = t;
    t += dt;
    f[i] = freq;
    freq += df;
    }
    }//make_sin()
    };//_sin

    class DFT{
    public:
    double *y, *mag, *ph;
    int N;

    void run_dft(void){
    // real DFT
    double C1,C2,C3, re, im;
    int j, k;
    C1 = _PI2 / N;
    C3 = 2 / double(N);
    for (j = 0; j < N; j++) {
    re = 0;
    im = 0;
    for (k = 0; k < N; k++) {
    C2 = double(j) * double(k) * C1;
    re += (y[k] * cos(C2));
    im += (y[k] * sin(C2));
    }//for k
    mag[j] = C3 * sqrt(pow(re, 2) + pow(im, 2));
    ph[j] = atan(im / re);
    }//for j
    }//run_dft()
    };//DFT

    void save(double *ph,double *x,double *y,double * f, double *mag,int N){
    int i;
    ofstream magfile; ofstream sigfile;
    sigfile.open("sig.txt");
    magfile.open("mag.txt");
    magfile << N << "\n"; //first line in data file is trasform size
    sigfile << N << "\n";
    for (i = 0; i < N; i++) {
    sigfile << x[i] << setw(20) << y[i] << "\n";
    magfile << f[i] << setw(20) << mag[i] << setw(20) << ph[i] << "\n";
    }//for
    sigfile.close();
    magfile.close();

    }//save()

    int main(){
    int i,N = pow(2,14); //power of 2 transform size
    int g;
    _sin s1; DFT dft;
    double* y = new double[N];// signal
    double* mag = new double[N]; // transform magnitude
    double* f = new double[N]; // trasform frequenct scale
    double* ph = new double[N];// transform phase
    double* x = new double[N]; // signal time scale
    s1.x = x; s1.y = y; s1.f = f;
    s1.N = N; s1.fsamp = 1000;
    s1.fsig1 = 172; s1.fsig2 = 200;
    s1.A1 = 1; s1.A2 = 0;
    s1.make_sin();
    dft.N = N;
    dft.y = y; dft.ph = ph; dft.mag = mag;
    auto begin = std::chrono::high_resolution_clock::now();
    dft.run_dft();
    save(ph,x, y, f, mag, N);
    }//main()

Similar Threads

  1. Python programming project
    By excreationist in forum Computers and Technology
    Replies: 11
    Last Post: 05-11-2019, 05:37 AM
  2. Some new programming languages
    By lpetrich in forum Computers and Technology
    Replies: 6
    Last Post: 04-17-2019, 02:36 AM
  3. Web Programming - Web Assembly?
    By lpetrich in forum Computers and Technology
    Replies: 4
    Last Post: 04-16-2019, 11:16 PM
  4. Metaphysical programming
    By DracoAstreus in forum Metaphysics
    Replies: 4
    Last Post: 08-02-2016, 03:24 PM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •