Skip to content

Can' t use #pragma in DSL #6

@tmtoku

Description

@tmtoku

I tried to use #pragma in DSL, but an error has occured.

For example, I inserted #pragma unroll 2 in the second line of
sample/c++/Nbody/kernel.pikg.

F64 eps2
#pragma unroll 2
rij = EPI.pos - EPJ.pos
r2 = rij * rij + eps2
r_inv  = rsqrt(r2)
r2_inv = r_inv * r_inv
mr_inv  = EPJ.mass * r_inv
mr3_inv = r2_inv * mr_inv
FORCE.acc -= mr3_inv * rij
FORCE.pot -= mr_inv

Then, I ran make and got the following error message.

conversion type: reference
epi name: Particle
epj name: Particle
force name: Particle
class file: particle.hpp
output file name: kernel.hpp
input file: kernel.pikg
/home/tom/pikg/src/gen_hash.rb:20:in `block (2 levels) in fusion_iotag': undefined method `fusion_iotag' for #<Pragma:0x0000558cf91a1dd8 @name="unroll", @option=["2"]> (NoMethodError)
	from /home/tom/pikg/src/gen_hash.rb:19:in `each'
	from /home/tom/pikg/src/gen_hash.rb:19:in `block in fusion_iotag'
	from /home/tom/pikg/src/gen_hash.rb:18:in `each'
	from /home/tom/pikg/src/gen_hash.rb:18:in `fusion_iotag'
	from /home/tom/pikg/src/gen_hash.rb:313:in `generate_alias'
	from /home/tom/pikg/src/parserdriver.rb:1681:in `<top (required)>'
	from ../../..//bin/pikg:2:in `require_relative'
	from ../../..//bin/pikg:2:in `<main>'
make: *** [Makefile:50: kernel.hpp] Error 1

If we add the following fusion_iotag method to the Pragma class, the error will no longer occur, but the generated kernel will not be changed by #pragma.

def fusion_iotag(iotag)
  []
end

class Pragma
attr_accessor :name, :option
def initialize(x)
@name,@option = x
end
def get_related_variable
[]
end
def declare_temporal_var
[]
end
def convert_to_code(conversion_type="reference")
ret = String.new
if conversion_type != "reference"
ret = "#pragma #{@name}"
if @option != nil then
@option.each{ |x|
ret += " #{x}"
}
end
end
ret
end
end

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions