BOAST 0.994 → 0.995

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'BOAST'
3
- s.version = "0.994"
3
+ s.version = "0.995"
4
4
  s.author = "Brice Videau"
5
5
  s.email = "brice.videau@imag.fr"
6
6
  s.homepage = "https://forge.imag.fr/projects/boast/"
@@ -661,6 +661,127 @@ EOF
661
661
  end
662
662
  end
663
663
 
664
+ def load_ref_inputs(path = "", suffix = ".in" )
665
+ return load_ref_files( path, suffix, :in )
666
+ end
667
+
668
+ def load_ref_outputs(path = "", suffix = ".out" )
669
+ return load_ref_files( path, suffix, :out )
670
+ end
671
+
672
+ def compare_ref(ref_outputs, outputs, epsilon = nil)
673
+ res = {}
674
+ @procedure.parameters.each_with_index { |param, indx|
675
+ if param.direction == :in or param.constant then
676
+ next
677
+ end
678
+ if param.dimension then
679
+ diff = (outputs[indx] - ref_outputs[indx]).abs
680
+ if epsilon then
681
+ diff.each { |elem|
682
+ raise "Error: #{param.name} different from ref by: #{elem}!" if elem > epsilon
683
+ }
684
+ end
685
+ res[param.name] = diff.max
686
+ else
687
+ raise "Error: #{param.name} different from ref: #{outputs[indx]} != #{ref_outputs[indx]} !" if epsilon and (outputs[indx] - ref_outputs[indx]).abs > epsilon
688
+ res[param.name] = (outputs[indx] - ref_outputs[indx]).abs
689
+ end
690
+ }
691
+ return res
692
+ end
693
+
694
+ def load_ref_files( path = "", suffix = "", intent )
695
+ proc_path = path + "/#{@procedure.name}."
696
+ res = []
697
+ @procedure.parameters.collect { |param|
698
+ if intent == :out and ( param.direction == :in or param.constant ) then
699
+ res.push nil
700
+ next
701
+ end
702
+ f = File::new( proc_path+param.name+suffix, "rb" )
703
+ if param.dimension then
704
+ if param.type.class == BOAST::Real then
705
+ case param.type.size
706
+ when 4
707
+ type = NArray::SFLOAT
708
+ when 8
709
+ type = NArray::FLOAT
710
+ else
711
+ STDERR::puts "Unsupported Float size for NArray: #{param.type.size}, defaulting to byte" if BOAST::debug
712
+ type = NArray::BYTE
713
+ end
714
+ elsif param.type.class == BOAST::Int then
715
+ case param.type.size
716
+ when 1
717
+ type = NArray::BYTE
718
+ when 2
719
+ type = NArray::SINT
720
+ when 4
721
+ type = NArray::SINT
722
+ else
723
+ STDERR::puts "Unsupported Int size for NArray: #{param.type.size}, defaulting to byte" if BOAST::debug
724
+ type = NArray::BYTE
725
+ end
726
+ else
727
+ STDERR::puts "Unkown array type for NArray: #{param.type}, defaulting to byte" if BOAST::debug
728
+ type = NArray::BYTE
729
+ end
730
+ if f.size == 0 then
731
+ res.push NArray::new(type, 1)
732
+ else
733
+ res.push NArray.to_na(f.read, type)
734
+ end
735
+ else
736
+ if param.type.class == BOAST::Real then
737
+ case param.type.size
738
+ when 4
739
+ type = "f"
740
+ when 8
741
+ type = "d"
742
+ else
743
+ raise "Unsupported Real scalar size: #{param.type.size}!"
744
+ end
745
+ elsif param.type.class == BOAST::Int then
746
+ case param.type.size
747
+ when 1
748
+ type = "C"
749
+ when 2
750
+ type = "S"
751
+ when 4
752
+ type = "L"
753
+ when 8
754
+ type = "Q"
755
+ else
756
+ raise "Unsupported Int scalar size: #{param.type.size}!"
757
+ end
758
+ if param.type.signed? then
759
+ type.downcase!
760
+ end
761
+ end
762
+ res.push f.read.unpack(type).first
763
+ end
764
+ f.close
765
+ }
766
+ if @lang == BOAST::CUDA or @lang == BOAST::CL then
767
+ f = File::new( proc_path +"problem_size", "r")
768
+ s = f.read
769
+ local_dim, global_dim = s.scan(/<(.*?)>/)
770
+ local_dim = local_dim.pop.split(",").collect!{ |e| e.to_i }
771
+ global_dim = global_dim.pop.split(",").collect!{ |e| e.to_i }
772
+ (local_dim.length..2).each{ |i| local_dim[i] = 1 }
773
+ (global_dim.length..2).each{ |i| global_dim[i] = 1 }
774
+ if @lang == BOAST::CL then
775
+ local_dim.each_index { |indx| global_dim[indx] *= local_dim[indx] }
776
+ res.push( { :global_work_size => global_dim, :local_work_size => local_dim } )
777
+ else
778
+ res.push( { :block_number => global_dim, :block_size => local_dim } )
779
+ end
780
+ f.close
781
+ end
782
+ return res
783
+ end
784
+
664
785
  def cost(*args)
665
786
  @cost_function.call(*args)
666
787
  end
@@ -163,6 +163,10 @@ module BOAST
163
163
  return Int::new(hash)
164
164
  end
165
165
 
166
+ def signed?
167
+ return @signed
168
+ end
169
+
166
170
  def decl
167
171
  return "integer(kind=#{@size})" if BOAST::get_lang == FORTRAN
168
172
  if BOAST::get_lang == C then
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: BOAST
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.994'
4
+ version: '0.995'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-06-25 00:00:00.000000000 Z
12
+ date: 2014-06-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: narray