Team Gryffindor: Difference between revisions

From Cpre584
Jump to navigation Jump to search
Line 9: Line 9:
}}
}}


=== Running the Sample Program using the Fabric ===
Section 10.5 of PDK Reference Manual explains how to run the sample software application.  It has been reproduced below in brief.
Section 10.5 of PDK Reference Manual explains how to run the sample software application.  It has been reproduced below in brief.


The rev version installed on the Convey machine is from 2010-8-9; to copy the sample app's source code run:
== Compiling the Project ==
The rev version installed on the Convey machine is from 2011-11-22; to copy the sample app's source code run:
  cd ~
  cd ~
  mkdir pdk_sample
  mkdir pdk_sample
  cp -r /opt/convey/pdk/2010_08_09/cae_pers_vadd pdk_sample
  cp -r /opt/convey/pdk/latest/hc-1/examples/* pdk_sample
cp -r /opt/convey/pdk/2010_08_09/pdk_apps/SampleAppVadd pdk_sample


To make the sample project.
To make the sample project, first make sure you have [[Convey environment setup|setup your environment variables]], then run:


  cd ~/pdk_sample/cae_pers_vadd/CaeSimPers/
  cd ~/pdk_sample/cae_pers_vadd/SampleAppVadd/
make
cd ~/pdk_sample/SampleAppVadd/
  make
  make


This compiles both an emulator (CaeSimPers) and a C program that makes a coprocessor call to use the vector adder (UserApp.exe).  You'll want to make sure that you haven't set your environmental variables.  You can do this by simply using a new terminal window or by running '''export CNY_SIM_THREAD='''To run the sample application on the coprocessor fabric, you'll need to make sure the CNY_SIM_THREAD environment variable is unset or 0. To run the software version of the app:
This compiles both an emulator (CaeSimPers) and a C program that makes a coprocessor call to use the vector adder (UserApp.exe).   
 
== Run the Project ==
Projects typically contain the following three executables:
# A software simulation of the FPGA design
# A hardware simulation (ModelSim) of the FPGA design
# The actual implementation (C code, Verilog code)The bitfiles are compiled, nicknamed, and added to a known file location.
 
=== Actual Implementation ===
To run the software version of the app that makes a call to the coprocessor, use the command:


  cd ~/pdk_sample/SampleAppVadd/
  cd ~/pdk_sample/cae_pers_vadd/SampleAppVadd/
  ./UserApp.exe
  ./UserApp.exe



Revision as of 21:22, 13 February 2012

Team Gryffindor
Error creating thumbnail: File missing
Gryffindor Team Logo
Team Members
Chad Nelson - cnel711
Mihir Awatramani - mihir
Mengduo Ma - marinama
Kuan-Hsing Ho - pm429015

Section 10.5 of PDK Reference Manual explains how to run the sample software application. It has been reproduced below in brief.

Compiling the Project

The rev version installed on the Convey machine is from 2011-11-22; to copy the sample app's source code run:

cd ~
mkdir pdk_sample
cp -r /opt/convey/pdk/latest/hc-1/examples/* pdk_sample

To make the sample project, first make sure you have setup your environment variables, then run:

cd ~/pdk_sample/cae_pers_vadd/SampleAppVadd/
make

This compiles both an emulator (CaeSimPers) and a C program that makes a coprocessor call to use the vector adder (UserApp.exe).

Run the Project

Projects typically contain the following three executables:

  1. A software simulation of the FPGA design
  2. A hardware simulation (ModelSim) of the FPGA design
  3. The actual implementation (C code, Verilog code). The bitfiles are compiled, nicknamed, and added to a known file location.

Actual Implementation

To run the software version of the app that makes a call to the coprocessor, use the command:

cd ~/pdk_sample/cae_pers_vadd/SampleAppVadd/
./UserApp.exe

You should see the program run and output the following:

You can also set the CNY_CALL_STATS environment variable; this variable gives back the number of times the coprocessor was called. I.E. for this application, the coprocessor is called once. Output from the terminal is reproduced in the following file:

Console Output

Running in the SW Model

To run the sample application on the Coprocessor simulator, you'll need to set some environmental variables:

# Use the Coprocessor Simulator
export CNY_SIM_THREAD=libcpSimLib2.so
# Point to the emulator
export CNY_CAE_EMULATOR=~/pdk_sample/cae_pers_vadd/CaeSimPers/CaeSimPers

After setting the environmental variables, rerun the app:

cd ~/pdk_sample/SampleAppVadd/
./UserApp.exe

The program will pause at the following screen for a 10-20 seconds...

...and then finish running the program.

Assignment #2

Description of Sobel's Algorithm - This is a great website teachs us how it works, and it also provide some examples, which help us to implement in C code.

Compiler:

gcc -O -lm sobel.c -o sobel
./sobel

Sobel edge detection algorithm code with C (Since the code is very long, I just show key part of algorithm):

  int sobel(double threshold) {
  unsigned int  x, y, i, v, u;             // for loop counter
  unsigned char R, G, B;         // color of R, G, B
  double val[MASK_N] = {0.0};
  int adjustX, adjustY, xBound, yBound;
  double total;

  for(y = 0; y != height; ++y) {
    for(x = 0; x != width; ++x) { 
      for(i = 0; i != MASK_N; ++i) {
        adjustX = (MASK_X % 2) ? 1 : 0;
                adjustY = (MASK_Y % 2) ? 1 : 0;
                xBound = MASK_X / 2;
                yBound = MASK_Y / 2;
            
        val[i] = 0.0;
        for(v = -yBound; v != yBound + adjustY; ++v) {
                    for (u = -xBound; u != xBound + adjustX; ++u) {
            if (x + u >= 0 && x + u < width && y + v >= 0 && y + v < height) {
              R = *(image_s + byte_per_pixel * (width * (y+v) + (x+u)) + 2);
              G = *(image_s + byte_per_pixel * (width * (y+v) + (x+u)) + 1);
              B = *(image_s + byte_per_pixel * (width * (y+v) + (x+u)) + 0);
              
                  val[i] +=    color_to_int(R, G, B) * mask[i][u + xBound][v + yBound];
            }
                    }
        }
      }

      total = 0.0;
      for (i = 0; i != MASK_N; ++i) {
              total += val[i] * val[i];
      }

          total = sqrt(total);
          
      if (total - threshold >= 0) {
        // black
        *(image_t + byte_per_pixel * (width * y + x) + 2) = BLACK;
        *(image_t + byte_per_pixel * (width * y + x) + 1) = BLACK;
        *(image_t + byte_per_pixel * (width * y + x) + 0) = BLACK;
      }
            else {
              // white
        *(image_t + byte_per_pixel * (width * y + x) + 2) = WHITE;
        *(image_t + byte_per_pixel * (width * y + x) + 1) = WHITE;
        *(image_t + byte_per_pixel * (width * y + x) + 0) = WHITE;
      }
    }
  }
  
  return 0;
}

We use color lena with 24bit bmp file

Error creating thumbnail: File missing
alt text
Error creating thumbnail: File missing
alt text

Profiling Sobel edge detection algorithm

This command will generate a test file:

gcc -lm -pg sobel.c
./a.out
gprof a.out > test
  

test file:

%      cumulative  self             self     total           
   
80.80      0.15    0.15        1   145.44   175.53  sobel
16.72      0.18    0.03  4706312     0.00     0.00  color_to_int
0.00      0.18     0.00        1     0.00     0.00  read_bmp
0.00      0.18     0.00        1     0.00     0.00  write_bmp