• Stars
    star
    297
  • Rank 140,075 (Top 3 %)
  • Language
    Julia
  • License
    MIT License
  • Created over 4 years ago
  • Updated 11 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Parallelized Base functions

Threadsโจ‰: Parallelized Base functions

Dev GitHub Actions Aqua QA

tl;dr

Add prefix ThreadsX. to functions from Base to get some speedup, if supported. Example:

julia> using ThreadsX

julia> ThreadsX.sum(gcd(42, i) == 1 for i in 1:10_000)
2857

To find out functions supported by ThreadsX.jl, just type ThreadsX. + TAB in the REPL:

julia> ThreadsX.
MergeSort       any             findfirst       map!            reduce
QuickSort       collect         findlast        mapreduce       sort
Set             count           foreach         maximum         sort!
StableQuickSort extrema         issorted        minimum         sum
all             findall         map             prod            unique

Interoperability

Rich collection support

The reduce-based functions support any collections that implement SplittablesBase.jl interface including arrays, Dict, Set, and iterator transformations. In particular, these functions support iterator comprehension:

julia> ThreadsX.sum(y for x in 1:10 if isodd(x) for y in 1:x^2)
4917

For advanced usage, they also support Transducers.eduction constructed with parallelizable transducers.

OnlineStats.jl

ThreadsX.reduce supports an OnlineStat from OnlineStats.jl as the first argument as long as it implements the merging interface:

julia> using OnlineStats: Mean

julia> ThreadsX.reduce(Mean(), 1:10)
Mean: n=10 | value=5.5

API

ThreadsX.jl is aiming at providing API compatible with Base functions to easily parallelize Julia programs.

All functions that exist directly under ThreadsX namespace are public API and they implement a subset of API provided by Base. Everything inside ThreadsX.Implementations is implementation detail. The public API functions of ThreadsX expect that the data structure and function(s) passed as argument are "thread-friendly" in the sense that operating on distinct elements in the given container from multiple tasks in parallel is safe. For example, ThreadsX.sum(f, array) assumes that executing f(::eltype(array)) and accessing elements as in array[i] from multiple threads is safe. In particular, this is the case if array is a Vector of immutable objects and f is a pure function in the sense it does not mutate any global objects. Note that it is not required and not recommended to use "thread-safe" array that protects accessing array[i] by a lock.

In addition to the Base API, all functions accept keyword argument basesize::Integer to configure the number of elements processed by each thread. A large value is useful for minimizing the overhead of using multiple threads. A small value is useful for load balancing when the time to process single item varies a lot from item to item. The default value of basesize for each function is currently an implementation detail.

ThreadsX.jl API is deterministic in the sense that the same input produces the same output, independent of how julia's task scheduler decide to execute the tasks. However, note that basesize is a part of the input which may be set based on Threads.nthreads(). To make the result of the computation independent of Threads.nthreads() value, basesize must be specified explicitly.

Limitations

  • Keyword argument dims is not supported yet.
  • (There are probably more.)

Implementations

Most of reduce-based functions are implemented as thin wrappers of Transducers.jl.

Custom collections can support ThreadsX.jl API by implementing SplittablesBase.jl interface.

More Repositories

1

emacs-jedi

Python auto-completion for Emacs
Emacs Lisp
655
star
2

emacs-request

Request.el -- Easy HTTP request for Emacs Lisp
Emacs Lisp
625
star
3

emacs-ipython-notebook

IPython notebook client in Emacs
Emacs Lisp
546
star
4

InteractiveCodeSearch.jl

Interactively search Julia code from terminal
Julia
106
star
5

python-epc

EPC (RPC stack for Emacs Lisp) for Python
Python
89
star
6

rash

Rash Advances Shell History
Python
83
star
7

emacs-jedi-direx

Tree style source code viewer for Python buffer
Emacs Lisp
71
star
8

emacs-python-environment

Python virtualenv API for Emacs Lisp
Emacs Lisp
59
star
9

BenchmarkCI.jl

Julia
52
star
10

org-mode

Emacs Lisp
41
star
11

ipython-hierarchymagic

`%hierarchy` and `%%dot` magics for IPython
Python
40
star
12

Kaleido.jl

Some useful lenses
Julia
33
star
13

ShowCode.jl

A tool for exploring and visualizing Julia code
Julia
24
star
14

Mutabilities.jl

Julia
24
star
15

Try.jl

Zero-overhead and debuggable error handling
Julia
22
star
16

inkscape-export-layers

Export selected layers from Inkscape SVG.
Python
21
star
17

DisplayAs.jl

Julia
19
star
18

Baselet.jl

Base API optimized for tuples
Julia
18
star
19

Run.jl

Julia
17
star
20

ne2wm

E2WM superpack
Emacs Lisp
14
star
21

PublicAPI.jl

PublicAPI.jl provides a simple API for declaring API without exporting the names
Julia
12
star
22

orgviz

Browser based app to view org-mode files from different directions -- calendar / table / histogram / time line
Python
12
star
23

Referenceables.jl

Julia
12
star
24

Terminators.jl

Julia
11
star
25

JuliaCLI.jl

Julia
11
star
26

LyapunovExponents.jl

A hackable Lyapunov exponents calculator
Julia
10
star
27

ipython-sqlitemagic

SQLite magics for IPython
Python
10
star
28

DocumentationOverview.jl

Julia
10
star
29

TaskDAGAnalyzers.jl

Julia
10
star
30

ContextVariablesX.jl

Julia
10
star
31

UnderscoreOh.jl

call graphs as recompilation-free capture-by-value closures
Julia
9
star
32

auto-complete-rst

Auto-complete extension for ReST and Sphinx
Python
9
star
33

conda-julia

Conda recipes for JuliaLang and its packages
Shell
9
star
34

JuliaManager.jl

System image manager for Julia
Python
8
star
35

Restacker.jl

Put immutables back in the stack
Julia
8
star
36

PyBase.jl

Python
8
star
37

matplotlibrc-zenburn

8
star
38

IPython.jl

Run IPython inside Julia to exchange data interactively
Python
8
star
39

ColorfulCodeGen.jl

Syntax-highlighted version of @code_llvm etc.
Julia
7
star
40

git-blackhole

Continuous backup and recoverable trash can for Git
Python
6
star
41

fillplots

Library to plot regions and boundaries given inequalities
Python
6
star
42

Restarts.jl

Julia
6
star
43

ipython-doctestmagic

Run and debug doctest in IPython
Python
6
star
44

auto-complete-chunk

Auto-completion for dot.separated.words.
Emacs Lisp
6
star
45

Awaits.jl

[WIP] Structured concurrency for parallel computing
Julia
6
star
46

InteractiveFormatter.jl

Julia
6
star
47

PyVenvs.jl

Julian interface for Pythonic virtual environments
Julia
6
star
48

Schedulers.jl

Multi-scheduler for/in Julia
Julia
5
star
49

mplchaco

Matplotlib to Chaco converter
Python
5
star
50

balance-tutorial-ja

Python
5
star
51

VegaStreams.jl

"Real-time" plotting with VegaLite.jl and ElectronDisplay.jl
Julia
5
star
52

IndirectImports.jl

Import and extend packages without importing them
Julia
5
star
53

sphinx-eldomain

Emacs Lisp domain -- Sphinx extension for Emacs Lisp
Python
5
star
54

JuliaProjectFormatter.jl

Julia
5
star
55

ThreadedArrays.jl

"Easy" parallelism injection
Julia
5
star
56

railgun

ctypes utilities for faster and easier simulation programming in C and Python
Python
4
star
57

ipython-importfilemagic

Python
4
star
58

julia-code-style-suggesters

4
star
59

ShowGraphviz.jl

Julia
4
star
60

Recalls.jl

Julia
4
star
61

BroadcastableStructs.jl

Julia
4
star
62

SparseXX.jl

Sparse arrays with eXperimental eXtensions
Julia
4
star
63

ipython-tempmagic

Python
4
star
64

julia-python-snippets

Julia
4
star
65

MIMEFileExtensions.jl

Julia
4
star
66

ConsoleProgressMonitor.jl

Julia
4
star
67

uniquify

Python
4
star
68

ExternalDocstrings.jl

Julia
4
star
69

Tofu.jl

โ—ปโ—ปโ—ป
Julia
3
star
70

zeroein

zeoroein is merged to EIN
Python
3
star
71

ParallelIncrements.jl

Julia
3
star
72

emacs-plugin-template

Minimal emacs plug-in template with setup for Travis CI
Emacs Lisp
3
star
73

TmuxDisplays.jl

Julia
3
star
74

NDReducibles.jl

Julia
3
star
75

GroundEffects.jl

Julia
3
star
76

emacs-pythonista

Preconfigured Python modes for Pythonista
Emacs Lisp
3
star
77

Reconstructables.jl

Tools for easy "modification" of nested immutable structs
Julia
3
star
78

ipyjulia_hacks

๐Ÿ’ Horrible hacks ๐Ÿ
Python
3
star
79

traitscli

CLI generator for Python based on class traits
Python
3
star
80

rstcheck

reStructuredText checker
Python
3
star
81

emacs-pinot-search

Use pinot desktop meta search engine via Emacs anything/helm interface
Emacs Lisp
3
star
82

AtBackslash.jl

Julia
3
star
83

ContextManagers.jl

Julia
3
star
84

Kwonly.jl

Macro to generate keyword-only version of a function
Julia
3
star
85

julia-venv

Virtual Julia environments for PyJulia
Python
3
star
86

cheat_sheet

my cheat sheet
2
star
87

reflected-buffers

Indirect buffer-like feature, but without sharing text properties such as font lock.
Emacs Lisp
2
star
88

ChainCutters.jl

Julia
2
star
89

InferableTasks.jl

Julia
2
star
90

mybin

my scripts
Shell
2
star
91

emacs-codethumb

Emacs Lisp
2
star
92

dotfiles

linux dotfiles
Emacs Lisp
2
star
93

websocket-el-pre

Emacs Lisp
2
star
94

BenchmarkConfigSweeps.jl

Julia
2
star
95

PyPreferences.jl

Julia
2
star
96

emacs-deferred-flyspell

Emacs Lisp
2
star
97

EventTracker.jl

Julia
2
star
98

UnsafeFields.jl

Julia
2
star
99

bvcs

Batched VCS command runner
Python
2
star
100

BenchSweeps.jl

Julia
2
star