cumo 0.2.5 → 0.3.0.pre1

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.
@@ -769,6 +769,29 @@ cumo_na_get_offset(VALUE self)
769
769
  return 0;
770
770
  }
771
771
 
772
+ char*
773
+ cumo_na_get_offset_pointer(VALUE a)
774
+ {
775
+ return cumo_na_get_pointer(a) + cumo_na_get_offset(a);
776
+ }
777
+
778
+ char*
779
+ cumo_na_get_offset_pointer_for_write(VALUE a)
780
+ {
781
+ return cumo_na_get_pointer_for_write(a) + cumo_na_get_offset(a);
782
+ }
783
+
784
+ char*
785
+ cumo_na_get_offset_pointer_for_read(VALUE a)
786
+ {
787
+ return cumo_na_get_pointer_for_read(a) + cumo_na_get_offset(a);
788
+ }
789
+
790
+ char*
791
+ cumo_na_get_offset_pointer_for_read_write(VALUE a)
792
+ {
793
+ return cumo_na_get_pointer_for_read_write(a) + cumo_na_get_offset(a);
794
+ }
772
795
 
773
796
  void
774
797
  cumo_na_index_arg_to_internal_order(int argc, VALUE *argv, VALUE self)
@@ -866,6 +889,12 @@ cumo_na_check_contiguous(VALUE self)
866
889
  return Qfalse;
867
890
  }
868
891
 
892
+ VALUE
893
+ cumo_na_as_contiguous_array(VALUE a)
894
+ {
895
+ return cumo_na_check_contiguous(a) == Qtrue ? a : rb_funcall(a, rb_intern("dup"), 0);
896
+ }
897
+
869
898
  //----------------------------------------------------------------------
870
899
 
871
900
  /*
data/lib/cumo/cuda.rb CHANGED
@@ -9,3 +9,4 @@ require_relative 'cuda/device'
9
9
  require_relative 'cuda/module'
10
10
  require_relative 'cuda/link_state'
11
11
  require_relative 'cuda/nvrtc_program'
12
+ require_relative 'cuda/cudnn'
@@ -0,0 +1,88 @@
1
+ require 'cumo'
2
+
3
+ module Cumo
4
+ [SFloat, DFloat].each do |klass|
5
+ klass.class_eval do
6
+ alias_method :conv_backward_data, :conv_transpose
7
+ alias_method :conv_backward_filter, :conv_grad_w
8
+
9
+ def max_pool(*args, **kwargs)
10
+ self.pooling_forward(Cumo::CUDA::CUDNN::CUDNN_POOLING_MAX, *args, **kwargs)
11
+ end
12
+
13
+ def max_pool_backward(*args, **kwargs)
14
+ self.pooling_backward(Cumo::CUDA::CUDNN::CUDNN_POOLING_MAX, *args, **kwargs)
15
+ end
16
+
17
+ def avg_pool(*args, **kwargs)
18
+ pad_value = kwargs.delete(:pad_value)
19
+ if pad_value == 0
20
+ mode = Cumo::CUDA::CUDNN::CUDNN_POOLING_AVERAGE_COUNT_INCLUDE_PADDING
21
+ elsif pad_value.nil?
22
+ mode = Cumo::CUDA::CUDNN::CUDNN_POOLING_AVERAGE_COUNT_EXCLUDE_PADDING
23
+ else
24
+ raise "pad_value: #{pad_value} is not supported"
25
+ end
26
+ self.pooling_forward(mode, *args, **kwargs)
27
+ end
28
+
29
+ def avg_pool_backward(*args, **kwargs)
30
+ pad_value = kwargs.delete(:pad_value)
31
+ if pad_value == 0
32
+ mode = Cumo::CUDA::CUDNN::CUDNN_POOLING_AVERAGE_COUNT_INCLUDE_PADDING
33
+ elsif pad_value.nil?
34
+ mode = Cumo::CUDA::CUDNN::CUDNN_POOLING_AVERAGE_COUNT_EXCLUDE_PADDING
35
+ else
36
+ raise "pad_value: #{pad_value} is not supported"
37
+ end
38
+ self.pooling_backward(mode, *args, **kwargs)
39
+ end
40
+ end
41
+ end
42
+ end
43
+
44
+ module Cumo
45
+ module CUDA
46
+ module CUDNN
47
+ class << self
48
+ def conv(a, *args, **kwargs)
49
+ a.conv(*args, **kwargs)
50
+ end
51
+
52
+ def conv_transpose(a, *args, **kwargs)
53
+ a.conv_transpose(*args, **kwargs)
54
+ end
55
+ alias_method :conv_backward_data, :conv_transpose
56
+
57
+ def conv_grad_w(a, *args, **kwargs)
58
+ a.conv_grad_w(*args, **kwargs)
59
+ end
60
+ alias_method :conv_backward_filter, :conv_grad_w
61
+
62
+ def batch_norm(a, *args, **kwargs)
63
+ a.batch_norm(*args, **kwargs)
64
+ end
65
+
66
+ def batch_norm_backward(a, *args, **kwargs)
67
+ a.batch_norm_backward(*args, **kwargs)
68
+ end
69
+
70
+ def max_pool(a, *args, **kwargs)
71
+ a.max_pool(*args, **kwargs)
72
+ end
73
+
74
+ def max_pool_backward(a, *args, **kwargs)
75
+ a.max_pool_backward(*args, **kwargs)
76
+ end
77
+
78
+ def avg_pool(a, *args, **kwargs)
79
+ a.avg_pool(*args, **kwargs)
80
+ end
81
+
82
+ def avg_pool_backward(a, *args, **kwargs)
83
+ a.avg_pool_backward(*args, **kwargs)
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cumo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.3.0.pre1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Naotoshi Seo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-03-04 00:00:00.000000000 Z
11
+ date: 2019-04-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: numo-narray
@@ -90,6 +90,8 @@ files:
90
90
  - cumo.gemspec
91
91
  - docs/src-tree.md
92
92
  - ext/cumo/cuda/cublas.c
93
+ - ext/cumo/cuda/cudnn.c
94
+ - ext/cumo/cuda/cudnn_impl.cpp
93
95
  - ext/cumo/cuda/driver.c
94
96
  - ext/cumo/cuda/memory_pool.cpp
95
97
  - ext/cumo/cuda/memory_pool_impl.cpp
@@ -103,12 +105,14 @@ files:
103
105
  - ext/cumo/include/cumo.h
104
106
  - ext/cumo/include/cumo/compat.h
105
107
  - ext/cumo/include/cumo/cuda/cublas.h
108
+ - ext/cumo/include/cumo/cuda/cudnn.h
106
109
  - ext/cumo/include/cumo/cuda/cumo_thrust.hpp
107
110
  - ext/cumo/include/cumo/cuda/cumo_thrust_complex.hpp
108
111
  - ext/cumo/include/cumo/cuda/driver.h
109
112
  - ext/cumo/include/cumo/cuda/memory_pool.h
110
113
  - ext/cumo/include/cumo/cuda/nvrtc.h
111
114
  - ext/cumo/include/cumo/cuda/runtime.h
115
+ - ext/cumo/include/cumo/hash_combine.hpp
112
116
  - ext/cumo/include/cumo/indexer.h
113
117
  - ext/cumo/include/cumo/intern.h
114
118
  - ext/cumo/include/cumo/intern_kernel.h
@@ -202,6 +206,8 @@ files:
202
206
  - ext/cumo/narray/gen/tmpl/aref.c
203
207
  - ext/cumo/narray/gen/tmpl/aref_cpu.c
204
208
  - ext/cumo/narray/gen/tmpl/aset.c
209
+ - ext/cumo/narray/gen/tmpl/batch_norm.c
210
+ - ext/cumo/narray/gen/tmpl/batch_norm_backward.c
205
211
  - ext/cumo/narray/gen/tmpl/binary.c
206
212
  - ext/cumo/narray/gen/tmpl/binary2.c
207
213
  - ext/cumo/narray/gen/tmpl/binary2_kernel.cu
@@ -219,6 +225,9 @@ files:
219
225
  - ext/cumo/narray/gen/tmpl/cond_binary.c
220
226
  - ext/cumo/narray/gen/tmpl/cond_binary_kernel.cu
221
227
  - ext/cumo/narray/gen/tmpl/cond_unary.c
228
+ - ext/cumo/narray/gen/tmpl/conv.c
229
+ - ext/cumo/narray/gen/tmpl/conv_grad_w.c
230
+ - ext/cumo/narray/gen/tmpl/conv_transpose.c
222
231
  - ext/cumo/narray/gen/tmpl/cum.c
223
232
  - ext/cumo/narray/gen/tmpl/each.c
224
233
  - ext/cumo/narray/gen/tmpl/each_with_index.c
@@ -251,6 +260,8 @@ files:
251
260
  - ext/cumo/narray/gen/tmpl/new_dim0.c
252
261
  - ext/cumo/narray/gen/tmpl/new_dim0_kernel.cu
253
262
  - ext/cumo/narray/gen/tmpl/poly.c
263
+ - ext/cumo/narray/gen/tmpl/pooling_backward.c
264
+ - ext/cumo/narray/gen/tmpl/pooling_forward.c
254
265
  - ext/cumo/narray/gen/tmpl/pow.c
255
266
  - ext/cumo/narray/gen/tmpl/pow_kernel.cu
256
267
  - ext/cumo/narray/gen/tmpl/powint.c
@@ -319,6 +330,7 @@ files:
319
330
  - lib/cumo/cuda.rb
320
331
  - lib/cumo/cuda/compile_error.rb
321
332
  - lib/cumo/cuda/compiler.rb
333
+ - lib/cumo/cuda/cudnn.rb
322
334
  - lib/cumo/cuda/device.rb
323
335
  - lib/cumo/cuda/link_state.rb
324
336
  - lib/cumo/cuda/module.rb
@@ -343,11 +355,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
343
355
  version: '0'
344
356
  required_rubygems_version: !ruby/object:Gem::Requirement
345
357
  requirements:
346
- - - ">="
358
+ - - ">"
347
359
  - !ruby/object:Gem::Version
348
- version: '0'
360
+ version: 1.3.1
349
361
  requirements: []
350
- rubygems_version: 3.0.1
362
+ rubyforge_project:
363
+ rubygems_version: 2.7.6
351
364
  signing_key:
352
365
  specification_version: 4
353
366
  summary: Cumo is CUDA aware numerical library whose interface is highly compatible