/*
* Copyright (C) 2014 - Anja Pohan and Stefan Nottrott
* CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
*/
package edu.stanford.rsl.conrad.data.numeric.opencl;
import ij.ImageJ;
import edu.stanford.rsl.conrad.data.numeric.NumericPointwiseOperators;
import edu.stanford.rsl.tutorial.phantoms.Phantom;
import edu.stanford.rsl.tutorial.phantoms.UniformCircleGrid2D;
public class OpenCLSynchProblemExample {
public static void main(String[] args){
Phantom grid = new UniformCircleGrid2D(512,512);
OpenCLGrid2D grid1 = new OpenCLGrid2D(grid);
float val = 1.f;
// This is a device operation
NumericPointwiseOperators.addBy(grid1, val);
// This is a host operation (because getSubGrid returns a grid that is no OpenCL grid!)
NumericPointwiseOperators.addBy(grid1.getSubGrid(256),8);
//grid1.notifyAfterWrite();
// This is a device operation again BUT: The previous host operation was executed on a subgrid --> No host update flag was set in the 2D grid!!
// Thus, the previous host change will just be ignored and the "old" memory state from the GPU will be used
NumericPointwiseOperators.addBy(grid1, val);
//grid1.deactivateCL();
new ImageJ();
grid1.show();
}
}