Module: FFTW3::Threads
- Defined in:
- lib/fftw3/threads.rb
Class Method Summary collapse
- .cleanup(precision: :double) ⇒ Object
- .init(precision: :double) ⇒ Object
- .make_planner_thread_safe(precision: :double) ⇒ Object
- .plan_with_nthreads(nthreads, precision: :double) ⇒ Object
- .planner_nthreads(precision: :double) ⇒ Object
- .set_callback(callback = nil, data: nil, precision: :double, &block) ⇒ Object
- .set_callback_supported?(precision: :double) ⇒ Boolean
Class Method Details
.cleanup(precision: :double) ⇒ Object
25 26 27 28 29 30 31 |
# File 'lib/fftw3/threads.rb', line 25 def self.cleanup(precision: :double) return unless @initialized[precision] pfx = FFTW3::FFI.prefix_for(precision) thread_module_for(precision).send(:"#{pfx}cleanup_threads") @initialized[precision] = false end |
.init(precision: :double) ⇒ Object
9 10 11 12 13 14 15 16 17 |
# File 'lib/fftw3/threads.rb', line 9 def self.init(precision: :double) return if @initialized[precision] pfx = FFTW3::FFI.prefix_for(precision) result = thread_module_for(precision).send(:"#{pfx}init_threads") raise FFTW3::Error::PlanError, "Failed to init FFTW threads" if result == 0 @initialized[precision] = true end |
.make_planner_thread_safe(precision: :double) ⇒ Object
41 42 43 44 45 46 47 |
# File 'lib/fftw3/threads.rb', line 41 def self.make_planner_thread_safe(precision: :double) init(precision: precision) unless @initialized[precision] return nil unless thread_module_for(precision).make_planner_thread_safe_supported? pfx = FFTW3::FFI.prefix_for(precision) thread_module_for(precision).send(:"#{pfx}make_planner_thread_safe") end |
.plan_with_nthreads(nthreads, precision: :double) ⇒ Object
19 20 21 22 23 |
# File 'lib/fftw3/threads.rb', line 19 def self.plan_with_nthreads(nthreads, precision: :double) init(precision: precision) unless @initialized[precision] pfx = FFTW3::FFI.prefix_for(precision) thread_module_for(precision).send(:"#{pfx}plan_with_nthreads", nthreads) end |
.planner_nthreads(precision: :double) ⇒ Object
33 34 35 36 37 38 39 |
# File 'lib/fftw3/threads.rb', line 33 def self.planner_nthreads(precision: :double) init(precision: precision) unless @initialized[precision] return nil unless thread_module_for(precision).planner_nthreads_supported? pfx = FFTW3::FFI.prefix_for(precision) thread_module_for(precision).send(:"#{pfx}planner_nthreads") end |
.set_callback(callback = nil, data: nil, precision: :double, &block) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/fftw3/threads.rb', line 53 def self.set_callback(callback = nil, data: nil, precision: :double, &block) callback ||= block validate_callback!(callback) thread_mod = thread_module_for(precision) return nil unless thread_mod.threads_set_callback_supported? pfx = FFTW3::FFI.prefix_for(precision) function = build_parallel_loop_function(callback) data_ptr = normalize_data_pointer(data) thread_mod.send(:"#{pfx}threads_set_callback", function, data_ptr) @callback_state[precision] = { callback: callback, function: function, data: data } true end |
.set_callback_supported?(precision: :double) ⇒ Boolean
49 50 51 |
# File 'lib/fftw3/threads.rb', line 49 def self.set_callback_supported?(precision: :double) thread_module_for(precision).threads_set_callback_supported? end |