ParallelAccelerator.jl icon indicating copy to clipboard operation
ParallelAccelerator.jl copied to clipboard

OptFramework failed to optimize function when using function wrapper

Open NaelsonDouglas opened this issue 7 years ago • 9 comments

Hello.

I'm trying to execute the below, but I'm getting the following message julia> include("simple_ips.jl") OptFramework failed to optimize function ##process#658 in optimization pass ParallelAccelerator.Driver.toDomainIR with error AssertionError("")

It's basically a wrapper on the gaussian-blur example.

What am I doing wrong since ParallelAccelerator is not able to optimize the function?

using Images
using ImageView
using ImageMagick
using TestImages
using FileIO
using ParallelAccelerator
using DocOpt
using Images


end

function blur(img, iterations)
    buf = copy(img)
    runStencil(buf, img, iterations, :oob_src_zero) do b, a
       b[0,0] =
      (a[-2,-2] * 0.003  + a[-1,-2] * 0.0133 + a[0,-2] * 0.0219 + a[1,-2] * 0.0133 + a[2,-2] * 0.0030 +
       a[-2,-1] * 0.0133 + a[-1,-1] * 0.0596 + a[0,-1] * 0.0983 + a[1,-1] * 0.0596 + a[2,-1] * 0.0133 +
       a[-2, 0] * 0.0219 + a[-1, 0] * 0.0983 + a[0, 0] * 0.1621 + a[1, 0] * 0.0983 + a[2, 0] * 0.0219 +
       a[-2, 1] * 0.0133 + a[-1, 1] * 0.0596 + a[0, 1] * 0.0983 + a[1, 1] * 0.0596 + a[2, 1] * 0.0133 +
       a[-2, 2] * 0.003  + a[-1, 2] * 0.0133 + a[0, 2] * 0.0219 + a[1, 2] * 0.0133 + a[2, 2] * 0.0030)
    return a, b
    end
    return img
end
    
##session_id doesnt do anything in the code yet
@acc function process(session_id,kernel,input, iterations)
	img = load(input)
	img2 = kernel(img,iterations)
	save("portinari-blur.png",img2)


process(1,blur,"portinari.png")

NaelsonDouglas avatar Sep 26 '17 20:09 NaelsonDouglas

One thing I notice directly is that you have @acc on process instead of blur. Is there a reason you did that?

DrTodd13 avatar Sep 26 '17 21:09 DrTodd13

hi @DrTodd13, cc @NaelsonDouglas

Thanks for the quick answer. We applied ParallelAccelerator to a generic function called process because our prototype doesn't know which function will be called by the user. It could be any function that ParallelAccelerator is able to accelerate, e.g., blur.

Would there be a better (or more appropriate) way of doing this?

lagefreitas avatar Sep 26 '17 23:09 lagefreitas

Hello @DrTodd13, thanks for the answer. It's because blur is working as a test function. In our project we are going to use generic functions/kernels.

That's the deal: 1: We create the process function (which is not fully implemented in this code snippet I posted) 2: This function gets another function (a kernel) and a path to an image 3: Then we apply this kernel to the image with

Since blur is very intuitive and it was avaliable in the example repository, we are using it for tests, but in the future we will be able to use any kernel we want.

But...is it wrong to use @acc in the process function?

NaelsonDouglas avatar Sep 26 '17 23:09 NaelsonDouglas

In general, you apply @acc to functions where you expect a lot of computation to take place directly in. So, if you had 10 kernels, you'd put @acc on all of them (or declare an @acc block and put them in the block). You don't expect a lot of computation in process itself, just a few function calls, so that should most likely not be @acc.

DrTodd13 avatar Sep 26 '17 23:09 DrTodd13

That makes a lot of sense. Thanks for the information.

I just put the @acc in the blur function instead of process, but the OptFramework failed to optimize function keeps showing up. 😢

Is there any lead for me to find what's going on?

Anyways, the blur filter is working properly, there's the before and after generated by the code I sent: portinari

NaelsonDouglas avatar Sep 26 '17 23:09 NaelsonDouglas

Can you post a minimal example of the new error?

DrTodd13 avatar Sep 27 '17 20:09 DrTodd13

Here's the error: https://asciinema.org/a/59YWI6IzZnIA4UJvf6JOhnZM9 It's actually the same error.

And here is the code:

using Images
using ImageView
using ImageMagick
using TestImages
using FileIO
using ParallelAccelerator

using DocOpt
using Images



@acc function blur(img, iterations)
    buf = copy(img)
    runStencil(buf, img, iterations, :oob_src_zero) do b, a
       b[0,0] =
      (a[-2,-2] * 0.003  + a[-1,-2] * 0.0133 + a[0,-2] * 0.0219 + a[1,-2] * 0.0133 + a[2,-2] * 0.0030 +
       a[-2,-1] * 0.0133 + a[-1,-1] * 0.0596 + a[0,-1] * 0.0983 + a[1,-1] * 0.0596 + a[2,-1] * 0.0133 +
       a[-2, 0] * 0.0219 + a[-1, 0] * 0.0983 + a[0, 0] * 0.1621 + a[1, 0] * 0.0983 + a[2, 0] * 0.0219 +
       a[-2, 1] * 0.0133 + a[-1, 1] * 0.0596 + a[0, 1] * 0.0983 + a[1, 1] * 0.0596 + a[2, 1] * 0.0133 +
       a[-2, 2] * 0.003  + a[-1, 2] * 0.0133 + a[0, 2] * 0.0219 + a[1, 2] * 0.0133 + a[2, 2] * 0.0030)
    return a, b
    end
    return img
end
    

function process(session_id,kernel,input, iterations)
	img = load(input)
	img2 = kernel(img,iterations)
	save("portinari-blur.png",img2)
end


process(1,blur,"portinari.png",1)
    
    
    





NaelsonDouglas avatar Sep 28 '17 04:09 NaelsonDouglas

I wasn't seeing the same problem you were but it may have just been manifesting differently. I think I may have fixed it. You can try to checkout the master branch of ParallelAccelerator and let me know if it works. Thanks for your patience!

DrTodd13 avatar Oct 05 '17 21:10 DrTodd13

Hello. I updated ParallelAccelerator, but the error persists to me. image

Can you show-me the environment you are using with Pkg.installed() in order to me use exactly the same versions you are using to make it work?

NaelsonDouglas avatar Oct 08 '17 18:10 NaelsonDouglas