aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
...
* Make vm_call_cfunc_with_frame a fastpath (#3027)Takashi Kokubun2020-04-134-4/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | when there's no need to call CALLER_SETUP_ARG and CALLER_REMOVE_EMPTY_KW_SPLAT (i.e. !rb_splat_or_kwargs_p(ci) && !calling->kw_splat). Micro benchmark: ``` $ benchmark-driver -v --rbenv 'before;after' benchmark/vm_send_cfunc.yml --repeat-count=4 before: ruby 2.8.0dev (2020-04-13T23:45:05Z master b9d3ceee8f) [x86_64-linux] after: ruby 2.8.0dev (2020-04-14T00:48:52Z no-splat-fastpath 418d363722) [x86_64-linux] Calculating ------------------------------------- before after vm_send_cfunc 69.585M 88.724M i/s - 100.000M times in 1.437097s 1.127096s Comparison: vm_send_cfunc after: 88723605.2 i/s before: 69584737.1 i/s - 1.28x slower ``` Optcarrot: ``` $ benchmark-driver -v --rbenv 'before;after' benchmark.yml --repeat-count=12 --output=all before: ruby 2.8.0dev (2020-04-13T23:45:05Z master b9d3ceee8f) [x86_64-linux] after: ruby 2.8.0dev (2020-04-14T00:48:52Z no-splat-fastpath 418d363722) [x86_64-linux] Calculating ------------------------------------- before after Optcarrot Lan_Master.nes 50.76119601545175 42.73858236484051 fps 50.76388649761503 51.04211379912850 50.80930672252514 51.39455790755538 50.90236000778749 51.75656936556145 51.01744746340430 51.86875277356489 51.06495279015112 51.88692482485558 51.07785337168974 51.93429603190578 51.20163525187862 51.95768145071314 51.34671771913112 52.45577266040274 51.35918340835583 52.53163888762858 51.46641337418146 52.62172484121034 51.50835463462257 52.85064021113239 ```
* Unwrap vm_call_cfunc indirection on JITTakashi Kokubun2020-04-132-21/+38
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | for VM_METHOD_TYPE_CFUNC. This has been known to decrease optcarrot fps: ``` $ benchmark-driver -v --rbenv 'before --jit;after --jit' benchmark.yml --repeat-count=24 --output=all before --jit: ruby 2.8.0dev (2020-04-13T16:25:13Z master fb40495cd9) +JIT [x86_64-linux] after --jit: ruby 2.8.0dev (2020-04-13T23:23:11Z mjit-inline-c bdcd06d159) +JIT [x86_64-linux] Calculating ------------------------------------- before --jit after --jit Optcarrot Lan_Master.nes 66.38132676191719 67.41369177299630 fps 69.42728743772243 68.90327567263054 72.16028300263211 69.62605130880686 72.46631319102777 70.48818243767207 73.37078877002490 70.79522887347566 73.69422431217367 70.99021920193194 74.01471487018695 74.69931965402584 75.48685183295630 74.86714575949016 75.54445264507932 75.97864419721677 77.28089738169756 76.48908637569581 78.04183397891302 76.54320932488021 78.36807984096562 76.59407262898067 78.92898762543574 77.31316743361343 78.93576483233765 77.97153484180480 79.13754917503078 77.98478782102325 79.62648945850653 78.02263322726446 79.86334213878064 78.26333724045934 80.05100635898518 78.60056756355614 80.26186843769584 78.91082645644468 80.34205717020330 79.01226659142263 80.62286066044338 79.32733939423721 80.95883033058557 79.63793060542024 80.97376819251613 79.73108936622778 81.23050939202896 80.18280109433088 ``` and I deleted this capability in an early stage of YARV-MJIT development: https://github.com/k0kubun/yarv-mjit/commit/0ab130feeefc2b9078a1077e4fec93b3f5e45d07 I suspect either of the following things could be the cause: * Directly calling vm_call_cfunc requires more optimization effort in GCC, resulting in 30ms-ish compilation time increase for such methods and decreasing the number of methods compiled in a benchmarked period. * Code size increase => icache miss hit These hypotheses could be verified by some methodologies. However, I'd like to introduce this regardless of the result because this blocks inlining C method's definition. I may revert this commit when I give up to implement inlining C method definition, which requires this change. Microbenchmark-wise, this gives slight performance improvement: ``` $ benchmark-driver -v --rbenv 'before --jit;after --jit' benchmark/mjit_send_cfunc.yml --repeat-count=4 before --jit: ruby 2.8.0dev (2020-04-13T16:25:13Z master fb40495cd9) +JIT [x86_64-linux] after --jit: ruby 2.8.0dev (2020-04-13T23:23:11Z mjit-inline-c bdcd06d159) +JIT [x86_64-linux] Calculating ------------------------------------- before --jit after --jit mjit_send_cfunc 41.961M 56.489M i/s - 100.000M times in 2.383143s 1.770244s Comparison: mjit_send_cfunc after --jit: 56489372.5 i/s before --jit: 41961388.1 i/s - 1.35x slower ```
* * 2020-04-14 [ci skip]git2020-04-141-1/+1
|
* Add a a list of cases for which clock_getres() has been observed to be ↵Benoit Daloze2020-04-131-1/+4
| | | | | | inaccurate * See [Bug #16740]
* Improve Hash documentation.Burdette Lamar2020-04-141-35/+62
|
* Allow simple R-assign in endless defNobuyoshi Nakada2020-04-132-3/+18
|
* delete CACHELINE卜部昌平2020-04-131-11/+0
| | | | | Since https://github.com/ruby/ruby/pull/2888 this macro is no longer used in any place.
* include what you use.卜部昌平2020-04-1340-21/+57
| | | | | | | | | | | | | | | | | | | | | | This reverts commit 443389effc37308ce1a3c3a840082a344fc6af56. This reverts commit d94960f22ec2de3a3855305cb51343806d2b46c7. Inclusion of header files must be explicit. Every file shall directly include what is necessary. https://github.com/include-what-you-use/include-what-you-use says: > When every file includes what it uses, then it is possible to edit any > file and remove unused headers, without fear of accidentally breaking > the upwards dependencies of that file. It also becomes easy to > automatically track and update dependencies in the source code. Though we don't use iwyu itself, the principle quoted above is a good thing that we can agree. Now that include guards were added to every and all of the headers inside of our project this changeset does not increase compile time, at least on my machine.
* add #include guard hack卜部昌平2020-04-13255-1038/+1141
| | | | | | | | | | | | | | | | | | | | | | According to MSVC manual (*1), cl.exe can skip including a header file when that: - contains #pragma once, or - starts with #ifndef, or - starts with #if ! defined. GCC has a similar trick (*2), but it acts more stricter (e. g. there must be _no tokens_ outside of #ifndef...#endif). Sun C lacked #pragma once for a looong time. Oracle Developer Studio 12.5 finally implemented it, but we cannot assume such recent version. This changeset modifies header files so that each of them include strictly one #ifndef...#endif. I believe this is the most portable way to trigger compiler optimizations. [Bug #16770] *1: https://docs.microsoft.com/en-us/cpp/preprocessor/once *2: https://gcc.gnu.org/onlinedocs/cppinternals/Guard-Macros.html
* Add MJIT_COUNTER macro to dump total_callsTakashi Kokubun2020-04-121-0/+20
|
* Avoid UB with flexible array memberAlan Wu2020-04-122-4/+4
| | | | | | | Accessing past the end of an array is technically UB. Use C99 flexible array member instead to avoid the UB and simplify allocation size calculation. See also: DCL38-C in the SEI CERT C Coding Standard
* * 2020-04-13 [ci skip]git2020-04-131-1/+1
|
* Make rb_scan_args implementations sameNobuyoshi Nakada2020-04-122-36/+52
| | | | | between rb_scan_args_set and rb_scan_args_assign + rb_scan_args_result.
* Honor COLUMNS [Feature #16754]Nobuyoshi Nakada2020-04-121-6/+9
|
* Hightlight usage [Feature #16754]Nobuyoshi Nakada2020-04-121-14/+27
|
* Set up environment variable for pager [Feature #16754]Nobuyoshi Nakada2020-04-121-0/+8
|
* PAGER without fork&exec too [Feature #16754]Nobuyoshi Nakada2020-04-123-7/+37
|
* View the help message with PAGER [Feature #16754]Nobuyoshi Nakada2020-04-122-0/+37
| | | | | View the help message wth pager designed by RUBY_PAGER or PAGER environment variable, unless that value is empty.
* Enable fastpath on invokesuper (#3021)Takashi Kokubun2020-04-111-2/+3
| | | | | | | | | | | | | | | | | | Fastpath has not been used for invokesuper since it has set vm_call_super_method on every invocation. Because it seems to be blocked only by refinements, try enabling fastpath on invokesuper when cme is not for refinements. While this patch itself should be helpful for VM performance, a part of this patch's motivation is to unblock inlining invokesuper on JIT. $ benchmark-driver -v --rbenv 'before;after' benchmark/vm2_super.yml --repeat-count=4 before: ruby 2.8.0dev (2020-04-11T15:19:58Z master a01bda5949) [x86_64-linux] after: ruby 2.8.0dev (2020-04-12T02:00:08Z invokesuper-fastpath c171984ee3) [x86_64-linux] Calculating ------------------------------------- before after vm2_super 20.031M 32.860M i/s - 6.000M times in 0.299534s 0.182593s Comparison: vm2_super after: 32859885.2 i/s before: 20031097.3 i/s - 1.64x slower
* * 2020-04-12 [ci skip]git2020-04-121-1/+1
|
* Relaxed of R-assign value to argNobuyoshi Nakada2020-04-122-6/+3
|
* Support version ranges for MSVC [Feature #16763]Nobuyoshi Nakada2020-04-112-1/+12
|
* Assertions for basic use of `encoding:` optionNobuyoshi Nakada2020-04-111-0/+14
|
* Assertions for enumerators of DirNobuyoshi Nakada2020-04-111-0/+12
|
* Removed unnecessary `to_a` callNobuyoshi Nakada2020-04-111-1/+1
| | | | `Dir.entries` returns an array.
* [ci skip] Enumerator doc cleanupgerero202020-04-111-3/+3
| | | | | | This is my first attempt at a pull request. I was reading the ruby docs the other day and noticed that the output didn't match the code sample on the with_object documentation. Inserted spaces to fix it.
* Don't require sub-word atomicsAndreas Schwab2020-04-111-2/+2
| | | | | | | | | On some architectures (like RISC-V) sub-word atomics are only available when linking against -latomic, but the configure script doesn't do that, causing the atomic checks to fail and the resulting ruby binary is non-functional. Ruby does not use sub-word atomic operations, rb_atomic_t is defined to unsigned int, so use unsigned int when checking for atomic operations.
* Silence broken pipe error messages on STDOUT [Feature #14413]Nobuyoshi Nakada2020-04-113-16/+69
| | | | Raise `SignalException` for SIGPIPE to abort when EPIPE occurs.
* Fix articles.Tanaka Akira2020-04-111-2/+2
|
* * 2020-04-11 [ci skip]git2020-04-111-1/+1
|
* Replace Fixnum by Integer in a document.Tanaka Akira2020-04-111-3/+3
|
* RUBY3_HAS_ATTRIBUTE: fix fallbacks卜部昌平2020-04-101-20/+20
| | | | Same as 133ae0807d661eac174b59c6e91c11a40975baea
* [DOC] Fixed POSIX clock_getres(3) link [ci skip]Nobuyoshi Nakada2020-04-101-1/+1
| | | | It should not be linked to `Process.clock_getes`.
* include/ruby/3: do not skip RUBY3_UNREACHABLE_RETURN卜部昌平2020-04-102-4/+0
| | | | | | | | | | | | | | | Revert "Revert "include/ruby/3/core/rtypeddata.h: Use 0 instead of NULL for C++ compiler"" Revert "include/ruby/3/core/rtypeddata.h: Use 0 instead of NULL for C++ compiler" Revert "include/ruby/3: Skip RUBY3_UNREACHABLE_RETURN for icc" Revert "include/ruby/3: Stop RUBY3_UNREACHABLE_RETURN to suppress a SunC warning" This reverts commit b965e7e05e4307e3c4b396673e63dbc493ef2f20. This reverts commit d2bb2e066b5a914283dd3ea473fc1762183af013. This reverts commit 8ab4c55e7a70f5a5bd041d93f425eeef4a47c01e. This reverts commit 78eec3cdc5ff0664b421e041f4f70a814542b914. After https://github.com/ruby/ruby/pull/3011, we no longer need these ifdef guards.
* Warn about Process#clock_getres being unreliable in documentationBenoit Daloze2020-04-101-11/+12
| | | | | | * [Bug #16740] * Remove the GETTIMEOFDAY_BASED_CLOCK_REALTIME example because the caveat applies to all clock ids, not just the Symbol clock ids.
* Reference to [Feature #16746] [ci skip]Nobuyoshi Nakada2020-04-101-0/+1
|
* Endless method definition [Feature #16746]Nobuyoshi Nakada2020-04-104-38/+132
|
* R-assign is still experimental [Feature #15921] [ci skip]Nobuyoshi Nakada2020-04-101-1/+2
|
* Turn class variable warnings into exceptionsJeremy Evans2020-04-109-34/+37
| | | | | | | | | | | | | | | | | | This changes the following warnings: * warning: class variable access from toplevel * warning: class variable @foo of D is overtaken by C into RuntimeErrors. Handle defined?(@@foo) at toplevel by returning nil instead of raising an exception (the previous behavior warned before returning nil when defined? was used). Refactor the specs to avoid the warnings even in older versions. The specs were checking for the warnings, but the purpose of the related specs as evidenced from their description is to test for behavior, not for warnings. Fixes [Bug #14541]
* ext/-test-/cxxanyargs: add #pragma for icc.卜部昌平2020-04-101-0/+3
|
* ruby3_rstring_getmem: suppres warning卜部昌平2020-04-101-0/+8
| | | | | | | | | | | icc warns at this line. > include/ruby/3/core/rstring.h(126): warning #413: variable "retval" has an uninitialized const field > struct RString retval; > ^ This must not be a problem because uninitialized const field is not used at all. But the warnings are annoying. Let us suppress them.
* RUBY3_ASSUME: suppress warnings on icc卜部昌平2020-04-101-1/+11
| | | | | | | | | | | | icc warns side effects for RUBY3_ASSUME like this: > ./include/ruby/3/value_type.h(202): warning #2261: __assume expression with side effects discarded > RUBY3_ASSUME(RB_FLONUM_P(obj)); > ^ Which is a false positive (RB_FLONUM_P has no side effect). It seems there is no way for us to tell icc that a functin is safe inside of __assume. Just suppress the warning instead.
* configure: suppress SunPro warning卜部昌平2020-04-101-0/+7
| | | | | | | | To this date there is no way for Oracle developer Studio to suppress warnings about unreachable codes (12.6 manual says it implemented __builtin_unreachable "as a no-op to C++. It might be added to C.") There is no way but globally kill the warning.
* configure: suppress icc warnings卜部昌平2020-04-101-1/+1
| | | | | | | | | | | Every time a pointer to/from VALUE conversion happens, these two warnings are issued: - warning #1684: conversion from pointer to same-sized integral type (potential portability problem) - warning #2312: pointer cast involving 64-bit pointed-to type Thank you, but we are well aware of the "potential portability problem". Let us ignore them all.
* configure: always check for __builtin_unreachable卜部昌平2020-04-101-1/+1
| | | | | Non-gcc compilers tend to have this intrinsic these days (e.g. icc). Better check it regardless of $GCC.
* RUBY3_HAS_BUILTIN: fix __builtin_unreachable卜部昌平2020-04-101-1/+1
| | | | | This macro has to be truthy, otherwise the `+0` trick above evalues RUBY3_HAS_BUILTIN(__builtin_unreachable) to be always false.
* mjit_worker: __GNUC__ is too lax卜部昌平2020-04-101-1/+1
| | | | Namely icc defines __GNUC__, but doesn't have -Wdeprecated-declarations
* Rightward-assign by ASSOCNobuyoshi Nakada2020-04-103-2/+52
| | | | [Feature #15921]
* update dependenciesKoichi Sasada2020-04-101-1/+17
|
* reduce duplicate include.Koichi Sasada2020-04-1040-56/+9
| | | | | | | Without this patch, 20k files are opened (openat syscall) because of duplicate includes. This patch reduced it to 3k and build time was reduced compile time of range.o from 15sec -> 3sec on my machine. [Bug #16772]