Le 06/05/2015 21:15, Mauro a écrit :
On Wed, 2015-05-06 at 18:25, Stéphane Mottelet <[email protected]> 
wrote:
As I already answered to Steven, these matrices are not just "data"
because their elements change at each iteration of an optimization
process. So i need "code" to update the matrices.
Anything you can achieve with metaprogramming you can also achieve in
any Turning complete language.  But don't run from Julia and port your
program to Brainfuck now ;-)

For instance your first nzval update could be:

locs = Vector{Int}[[-1, 18, 63, 103],
             [1, 63],
             [1, 18],
             ...
             ]
function update_nzval!(nzval, v, locs)
     for i =1:length(locs)
         nzval[i] = 0
         for j=2:length(locs[i])
             nzval[i] += v[locs[i][j]]
         end
         nzval[i] *= locs[i][1]
     end
end
Thank you, I didn't knew I can use vectors of vectors !

S.

S.

Le 06/05/2015 16:47, Stefan Karpinski a écrit :
Yes, this seems like a severe abuse of the compiler. It makes much
more sense for this to be input as data rather than code.

On Wed, May 6, 2015 at 8:42 AM, Steven G. Johnson
<[email protected] <mailto:[email protected]>> wrote:

     It doesn't make sense to me to use code generation to spit out a
     literal expression for inputting a large sparse matrix on each
     iteration of optimization. In no conceivable compiler will this be
     faster than just using a loop to generate the sparse matrix data
     structure, rather than using a loop to generate the code to
     generate the sparse matrix and then compiling the generated code.
     It should be O(n) work in either case, but the constant factor
     will inevitably be worse for a compiler.



Reply via email to