class PAPI::EventSet

Public Class Methods

new() click to toggle source
# File lib/PAPI/EventSet.rb, line 23
def initialize
  number = FFI::MemoryPointer::new(:int)
  number.write_int(PAPI_NULL)
  error = PAPI::PAPI_create_eventset( number )
  @number = number.read_int
  PAPI::error_check(error)
  @size = 0
end

Public Instance Methods

accum(values) click to toggle source
# File lib/PAPI/EventSet.rb, line 185
def accum(values)
  values_p = FFI::MemoryPointer::new(:long_long, @size)
  values_p.write_array_of_long_long(values)
  error = PAPI::PAPI_accum(@number, values_p)
  PAPI::error_check(error)
  new_values = values_p.read_array_of_long_long(@size)
  values.replace(new_values)
  return self
end
add( events ) click to toggle source
# File lib/PAPI/EventSet.rb, line 52
def add( events )
  evts = [events].flatten
  evts.each { |ev|
    error = PAPI::PAPI_add_event(@number, ev.to_i)
    PAPI::error_check(error)
  }
  error = PAPI::PAPI_num_events(@number)
  PAPI::error_check(error)
  @size = error
  return self
end
add_named(events) click to toggle source
# File lib/PAPI/EventSet.rb, line 64
def add_named(events)
  evts = [events].flatten
  evts.each { |ev|
    error = PAPI::PAPI_add_named_event(@number, ev.to_s)
    PAPI::error_check(error)
  }
  error = PAPI::PAPI_num_events(@number)
  PAPI::error_check(error)
  @size = error
  return self
end
assign_component(component) click to toggle source
# File lib/PAPI/EventSet.rb, line 46
def assign_component(component)
  error = PAPI::PAPI_assign_eventset_component( @number, component.to_i )
  PAPI::error_check(error)
  return self
end
cleanup() click to toggle source
# File lib/PAPI/EventSet.rb, line 32
def cleanup
  error = PAPI::PAPI_cleanup_eventset( @number )
  PAPI::error_check(error)
  return self
end
destroy() click to toggle source
# File lib/PAPI/EventSet.rb, line 38
def destroy
  number = FFI::MemoryPointer::new(:int)
  number.write_int(@number)
  error = PAPI::PAPI_destroy_eventset( number )
  PAPI::error_check(error)
  return self
end
events() click to toggle source
# File lib/PAPI/EventSet.rb, line 160
def events
  events_p = FFI::MemoryPointer::new(:int, @size)
  size_p = FFI::MemoryPointer::new(:int)
  size_p.write_int(@size)
  error = PAPI::PAPI_list_events(@number, events_p, size_p)
  PAPI::error_check(error)
  evts = events_p.read_array_of_int(size_p.read_int)
  return evts.collect { |code| PRESET_EVENTS_HASH[code] }
end
Also aliased as: list_events
length()
Alias for: size
list_events()
Alias for: events
num_events()
Alias for: size
possible(preset = true) click to toggle source
# File lib/PAPI/EventSet.rb, line 100
def possible(preset = true)
  cid = nil
  begin
    e = PAPI::PAPI_get_eventset_component(@number)
    PAPI::error_check(e)
    cid = e
  rescue
    cid = 0
  end
  list = []
  return nil unless COMPONENTS[cid]
  if preset and COMPONENTS[cid].preset then
    events = COMPONENTS[cid].preset
  else
    events = COMPONENTS[cid].native
  end
  events.each { |event|
    error = PAPI::PAPI_add_event(@number, event.to_i)
    if( error >= OK ) then
      error = PAPI::PAPI_remove_event(@number, event.to_i)
      PAPI::error_check(error)
      list.push event
    elsif event.masks then
      event.masks.each { |mask|
        error = PAPI::PAPI_add_named_event(@number, mask.info[:symbol])
        if( error >= OK ) then
          error = PAPI::PAPI_remove_named_event(@number, mask.info[:symbol])
          PAPI::error_check(error)
          list.push event
          break
        end
      }
      event.masks.each { |mask|
        error = PAPI::PAPI_add_named_event(@number, mask.info[:symbol].to_ptr.read_string+":cpu=1")
        if( error >= OK ) then
          error = PAPI::PAPI_remove_named_event(@number, mask.info[:symbol].to_ptr.read_string+":cpu=1")
          PAPI::error_check(error)
          list.push event
          break
        end
      }
    else
      error = PAPI::PAPI_add_named_event(@number, (event.info[:symbol].to_ptr.read_string+":cpu=1").gsub(/.*::/,""))
      if( error >= OK ) then
        error = PAPI::PAPI_remove_named_event(@number, (event.info[:symbol].to_ptr.read_string+":cpu=1").gsub(/.*::/,""))
        PAPI::error_check(error)
        list.push event
      end
    end
  }
  return list
end
read() click to toggle source
# File lib/PAPI/EventSet.rb, line 195
def read
  values_p = FFI::MemoryPointer::new(:long_long, @size)
  error = PAPI::PAPI_read(@number, values_p)
  PAPI::error_check(error)
  return values_p.read_array_of_long_long(@size)
end
read_ts() click to toggle source
# File lib/PAPI/EventSet.rb, line 202
def read_ts
  values_p = FFI::MemoryPointer::new(:long_long, @size)
  ts_p = FFI::MemoryPointer::new(:long_long)
  error = PAPI::PAPI_read_ts(@number, values_p, ts_p)
  PAPI::error_check(error)
  return [values_p.read_array_of_long_long(@size), ts_p.read_long_long]
end
remove( events ) click to toggle source
# File lib/PAPI/EventSet.rb, line 76
def remove( events )
  evts = [events].flatten
  evts.each { |ev|
    error = PAPI::PAPI_remove_event(@number, ev.to_i)
    PAPI::error_check(error)
  }
  error = PAPI::PAPI_num_events(@number)
  PAPI::error_check(error)
  @size = error
  return self
end
remove_named( events ) click to toggle source
# File lib/PAPI/EventSet.rb, line 88
def remove_named( events )
  evts = [events].flatten
  evts.each { |ev|
    error = PAPI::PAPI_remove_named_event(@number, ev.to_s)
    PAPI::error_check(error)
  }
  error = PAPI::PAPI_num_events(@number)
  PAPI::error_check(error)
  @size = error
  return self
end
size() click to toggle source
# File lib/PAPI/EventSet.rb, line 153
def size
  return @size
end
Also aliased as: length, num_events
start() click to toggle source
# File lib/PAPI/EventSet.rb, line 172
def start
  error = PAPI::PAPI_start(@number)
  PAPI::error_check(error)
  return self
end
stop() click to toggle source
# File lib/PAPI/EventSet.rb, line 178
def stop
  values_p = FFI::MemoryPointer::new(:long_long, @size)
  error = PAPI::PAPI_stop(@number, values_p)
  PAPI::error_check(error)
  return values_p.read_array_of_long_long(@size)
end