Changeset 7531


Ignore:
Timestamp:
01/13/11 16:13:33 (9 years ago)
Author:
rlentz
Message:
 
Location:
branches/maven/projects/opencl-decon/src
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • branches/maven/projects/opencl-decon/src/demos/OpenCL_SobelFilter.java

    r7525 r7531  
    11package demos; 
     2 
     3import java.io.IOException; 
     4 
     5import org.imagejdev.api.StreamToString; 
    26 
    37import ij.IJ; 
     
    1620        private ImagePlus imagePlus;  // image plus object needed for processing 
    1721    private String argumentString;  // input arguments  
     22    private String openCLString; 
    1823     
    1924        @Override 
     
    2429                 
    2530                // run the OpenCL Filter Example 
    26                 SobelFilterExample sobelFilterExample =  new SobelFilterExample( imageProcessor.getWidth(), imageProcessor.getHeight(), false ); 
     31                SobelFilterExample sobelFilterExample = null; 
     32                try { 
     33                        sobelFilterExample = new SobelFilterExample().init( imageProcessor.getWidth(), imageProcessor.getHeight(), false, openCLString ); 
     34                } catch (IOException e) { 
     35                        // TODO Auto-generated catch block 
     36                        e.printStackTrace(); 
     37                } 
    2738                 
    2839                sobelFilterExample.run( imageFloatData ); 
     
    3041 
    3142        @Override 
    32         public int setup( String argumentString, ImagePlus imagePlus ) { 
     43        public int setup( String argumentString, ImagePlus imagePlus )  
     44        {        
     45                // get the OpenCL code string 
     46                try { 
     47                        this.openCLString = StreamToString.getString( SobelFilterExample.class.getResourceAsStream("sobel.cl"), true ); 
     48                } catch (Exception e) { 
     49                        // TODO Auto-generated catch block 
     50                        e.printStackTrace(); 
     51                } 
     52                 
    3353                this.argumentString = argumentString; 
    3454                this.imagePlus = imagePlus; 
  • branches/maven/projects/opencl-decon/src/demos/SobelFilterExample.java

    r7525 r7531  
    1111import javax.imageio.ImageIO; 
    1212 
    13  
     13import org.imagejdev.api.StreamToString; 
     14 
     15import com.jogamp.common.os.Platform; 
    1416import com.jogamp.opencl.CLBuffer; 
    1517import com.jogamp.opencl.CLCommandQueue; 
    1618import com.jogamp.opencl.CLContext; 
     19import com.jogamp.opencl.CLErrorHandler; 
     20import com.jogamp.opencl.CLDevice.Type; 
    1721import com.jogamp.opencl.CLKernel; 
     22import com.jogamp.opencl.CLMemory.Mem; 
    1823import com.jogamp.opencl.CLPlatform; 
    19 import com.jogamp.opencl.CLDevice.Type; 
    20 import com.jogamp.opencl.CLMemory.Mem; 
    2124import com.jogamp.opencl.CLProgram; 
    22 import com.jogamp.common.os.Platform; 
    2325 
    2426/** 
     
    3335        static boolean COMPARERESULTS = true; 
    3436        static boolean DISPLAYIMAGE = true; 
    35         static CLProgram program; 
     37        static CLProgram program = null; 
     38        static CLPlatform platform = null; 
    3639        static CLContext context; 
    3740        static CLKernel kernel; 
     
    5154                context.release(); 
    5255        } 
    53  
    54         public SobelFilterExample ( int w, int h, boolean printDebugStatements ) 
    55         { 
     56         
     57         
     58        public SobelFilterExample () 
     59        {;} 
     60         
     61        public synchronized SobelFilterExample init( int w, int h, boolean printDebugStatements, String openCLCodeString ) throws IOException 
     62        { 
     63                //Create a context from GPU 
     64                context = CLContext.create( Type.GPU ); 
     65                 
     66                // create the program 
     67                program = context.createProgram( openCLCodeString ).build( "" ); 
     68                 
    5669                // Display java.libary.path -Djava.library.path="" 
    5770                if( DEBUG )  System.out.println(" Java.library.path is " + System.getProperty("java.library.path")); 
     
    5972                imageHeight = h; 
    6073                imageWidth = w; 
    61  
     74                 
     75                 
    6276                final boolean DEBUG = printDebugStatements; 
    63                 try { 
    64  
    65                         if( DEBUG )  System.out.println( "Local work size dimensions are max array size of"); 
     77                         
     78                if( DEBUG )  { 
    6679                        CLPlatform[] platforms = CLPlatform.listCLPlatforms(); 
    6780                        if( DEBUG ) for(CLPlatform clPlatform : platforms) 
    6881                                System.out.println("Discovered " + clPlatform.getName() ); 
    69                         context = CLContext.create( Type.GPU ); 
    70  
    71                         this.program = context.createProgram( SobelFilterExample.class.getResourceAsStream("sobel.cl") ).build(); 
    72                 } 
    73                 catch (IOException e) 
    74                 { 
    75                         e.printStackTrace(); 
    76                 } 
    77  
     82                } 
     83                                 
    7884                if( DEBUG )  System.out.println( "assign the kernel" ); 
    7985                kernel = program.createCLKernel("sobel"); 
     
    96102                kernel.setArg( 2, imageWidth ); 
    97103                kernel.setArg( 3, imageHeight ); 
     104                 
     105                return this; 
     106        } 
     107 
     108        private void sleepInSeconds( int seconds ) { 
     109                try { 
     110                        Thread.sleep( seconds * 1000 ); 
     111                } catch (InterruptedException e) { 
     112                        // TODO Auto-generated catch block 
     113                        e.printStackTrace(); 
     114                } 
     115                 
    98116        } 
    99117 
     
    142160        } 
    143161 
    144         public static synchronized void main(String[] args) 
    145         { 
     162        public static void main(String[] args) 
     163        { 
     164                 
    146165                // get an image  
    147166                if( DEBUG )  System.out.println("Retrieving test image...  "); 
     
    151170                        image = ImageIO.read(url);  
    152171                } catch (IOException e) { }  
    153                  
     172 
     173                int testWidth = image.getWidth(null); 
     174                int testHeight = image.getHeight(null); 
     175                 
     176                 
     177                 
     178                // get the OpenCL code 
     179                String openCLCodeString = null; 
     180                try { 
     181                        openCLCodeString = StreamToString.getString( SobelFilterExample.class.getResourceAsStream("sobel.cl"), true ); 
     182                } catch (Exception e1) { 
     183                        // TODO Auto-generated catch block 
     184                        e1.printStackTrace(); 
     185                } 
     186 
    154187                final int numVariables = 4; 
    155                 final int numIterations = 50; 
     188                final int numIterations = 1; 
    156189                long[] times = new long[numVariables]; 
    157190 
    158191                //run test 
    159                 runTest( image, numIterations, times ); 
     192                runTest( image, numIterations, times, openCLCodeString, testWidth, testHeight ); 
    160193 
    161194                System.out.println("The average OpenCL set up time is " + times[0]/numIterations); 
     
    174207 
    175208 
    176         public static synchronized void runTest( Image image, int numIterations, long[] totalTime) 
    177         { 
    178                 int testWidth = image.getWidth(null); 
    179                 int testHeight = image.getHeight(null); 
    180  
    181                 //grab the pixels 
    182                 int[] inputImage = new int[testWidth*testHeight]; 
    183                 PixelGrabber pixelGrabber = new PixelGrabber( image, 0, 0, testWidth, testHeight, inputImage, 0, testWidth ); 
    184                 try { 
    185                         pixelGrabber.grabPixels(); 
    186                 } catch (InterruptedException e) { 
    187                         e.printStackTrace(); 
    188                 } 
     209        public static synchronized void runTest( Image image, int numIterations, long[] totalTime, String openCLCodeString, int testWidth, int testHeight ) 
     210        { 
    189211 
    190212                for(int iteration = 0; iteration < numIterations; iteration++) 
    191213                { 
     214                        //grab the pixels 
     215                        int[] inputImage = new int[testWidth*testHeight]; 
     216                        PixelGrabber pixelGrabber = new PixelGrabber( image, 0, 0, testWidth, testHeight, inputImage, 0, testWidth ); 
     217                        try { 
     218                                pixelGrabber.grabPixels(); 
     219                        } catch (InterruptedException e) { 
     220                                e.printStackTrace(); 
     221                        } 
     222                         
     223                        //Convert Image to float 
     224                        float[] testImage = new float[testWidth*testHeight]; 
     225                        for( int i = 0; i < testWidth; i++ ) 
     226                                for( int j = 0; j < testHeight; j++ ) 
     227                                        testImage[ i*testHeight+j ] = getAvg( inputImage[ i*testHeight+j ]); 
     228 
     229                        //Clone the input data 
     230                        float[] testImageCopy = testImage.clone(); 
     231                         
    192232                        try { 
    193233                                System.out.println("Starting iteration... " + iteration ); 
    194234 
    195                                 //Convert Image to float 
    196                                 float[] testImage = new float[testWidth*testHeight]; 
    197                                 for( int i = 0; i < testWidth; i++ ) 
    198                                         for( int j = 0; j < testHeight; j++ ) 
    199                                                 testImage[ i*testHeight+j ] = getAvg( inputImage[ i*testHeight+j ]); 
    200  
    201                                 //Clone the input data 
    202                                 float[] testImageCopy = testImage.clone(); 
    203  
    204235                                //Start the performance timer 
    205236                                long time = System.currentTimeMillis(); 
    206237 
    207238                                //setup OpenCL 
    208                                 SobelFilterExample generateSobelFilterData = new SobelFilterExample( testWidth, testHeight, true ); 
     239                                SobelFilterExample generateSobelFilterData = new SobelFilterExample().init( testWidth, testHeight, true, openCLCodeString ); 
    209240 
    210241                                //Stop the performance timer 
  • branches/maven/projects/opencl-decon/src/demos/sobel.cl

    r7525 r7531  
    1 #pragma OPENCL EXTENSION cl_khr_fp64: enable 
    21__kernel void sobel( __global float* input, 
    32        __global float* output, 
     
    3029            output[offset] = sqrt(  sum1*sum1 + sum2*sum2 ); 
    3130        } 
    32 } 
     31} //#pragma OPENCL EXTENSION cl_khr_fp64: enable 
Note: See TracChangeset for help on using the changeset viewer.