Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

5 x decrease in performance with new Julia build #7000

Closed
jfrolich opened this issue May 27, 2014 · 10 comments
Closed

5 x decrease in performance with new Julia build #7000

jfrolich opened this issue May 27, 2014 · 10 comments
Labels
performance Must go faster regression Regression in behavior compared to a previous version

Comments

@jfrolich
Copy link

I am currently working on a high performance text analytics package for Julia.

When today I installed the new release I got a 5 times decrease in performance with the current Julia build (Version 0.3.0-prerelease+3225 (2014-05-27 03:45 UTC)) when compared to an older build (Version 0.3.0-prerelease+2727 (2014-04-23 18:25 UTC)). It is not clear why this is happening. When reinstalling the old version it works as expected. I used the windows x64 build.

The code is quite long but perhaps the bottleneck is clear. Otherwise I can try to make a more simple showcase of the performance problem. I am still learning Julia so perhaps it is an obvious mistake.

using DataFrames
using Base
using Datetime

import Base.length

PATH = "C:\\Users\\JFrolich\\Documents\\Data sets\\Reuters\\fetch\\full_dataset"
metadata = readtable(string(PATH, "/", "metadata.csv"))
y = array(metadata[:acq])

typealias Vocabulary Dict{UTF8String, Uint32}
typealias UnweightedDTM SparseMatrixCSC{Uint32}
typealias WeightedDTM SparseMatrixCSC{Float64}
typealias DTM Union(WeightedDTM, UnweightedDTM)
typealias Document UTF8String

function preprocess(d::Document)
    lowercase(d)
end

function tokenize(s::Document)
    [utf8(s) for s in matchall(r"\b\w\w+\b", preprocess(s))]
end

# A document collection is a collection of documents.
# The implementation needs the following interface:
#
# text: returns the plain text for the given document
# length: returns the length of the collection
#
abstract DocumentCollection

# Text files implementation
# This implementation of documentcollection iterate through
# text files to create the DTM
type TextFiles <: DocumentCollection
    filenames::Vector{String}
    buffer_ptr::Int
    buffer_size::Int
    buffer::Vector{Document}
end

TEXT_BUFFER_SIZE = 30000

function text_files(files)
    TextFiles(files, -1, TEXT_BUFFER_SIZE, [])
end

# returns the text for index 'i', it pre-filles a buffer of text
# for all the files in the collection when necesary, because
# loading it file by file is much slower (factor 3)
function text(dc::TextFiles, i::Int)
    if dc.buffer_ptr < 0 || i >= (dc.buffer_ptr + dc.buffer_size) || i < dc.buffer_ptr
        fill_buffer!(dc, i)
    end

    dc.buffer[i-dc.buffer_ptr+1]
end

function fill_buffer!(dc::TextFiles, i::Int)
    dc.buffer_ptr = i
    dc.buffer = Document[]
    for i in dc.buffer_ptr:(dc.buffer_ptr + dc.buffer_size)
        if i > length(dc)
            break
        end
        push!(dc.buffer, open(dc.filenames[i]) do f
            Document(readbytes(f))
        end)
    end
end

length(dc::TextFiles) = Base.length(dc.filenames)

# TextArray: This implementation of documentcollection is simply
# given as an array of strings
type TextArray <: DocumentCollection
    texts::Vector{Document}
end

function text(dc::TextArray, i::Int)
    dc.texts[i]
end

function text_array(texts)
    TextArray(texts)
end

length(dc::TextArray) = Base.length(dc.texts)

Base.start(dc::DocumentCollection) = 1
Base.next(dc::DocumentCollection, i) = (text(dc, i), i+1)
Base.done(dc::DocumentCollection, i) = i > length(dc)

# calculates Chi squared scores of a sparse matrix on a binary variable (y)
function chi2(X::DTM, y::Array{Int, 1})
    f_obs = y * X
    feature_count = ones(Float64, size(X)[1]) * X
    class_prob    = mean(y)
    f_exp = (class_prob * feature_count)'
    chisq = Float64[]
    for i in 1:length(f_obs)
        push!(chisq, (f_obs[i] - f_exp[i])^2/(f_exp[i]))
    end
    chisq
end

# Feature selection
function select_k_best(X::DTM, y::Vector{Int}, score_fnc, k::Int)
    scores = score_fnc(X,y)
    sortperm(scores::Array{Float64,1}, rev=true, alg=MergeSort)[1:k]
end

function ngramize(tokens::Array{UTF8String,1}, n_grams::Int64=2)
    n_tokens::Int64 = length(tokens)
    for i in 1:n_tokens
        gram = ""
        for j in 1:n_grams
            token = tokens[i+j-1]
            if j == 1
                gram = token
            elseif j > 1 && i+j-1 <= n_tokens
                gram = string(gram, " ", token)
                push!(tokens, gram)
            end
        end
    end
    tokens
end



function text_from_files(files)
    texts = UTF8String[]
    for file in files
        push!(texts, open(file) do f
            UTF8String(readbytes(f))
        end)
    end
    texts
end

# TODO: Add ngram range feature
function dtm(dc::DocumentCollection, n_grams::Int)
    vocabulary = Vocabulary()
    is = Uint32[]
    js = Uint32[]
    vs = Uint32[]
    for (i, text) in enumerate(dc)
        tokens::Array{UTF8String,1} = ngramize(tokenize(text), n_grams)
        for token in tokens
            push!(is, i)
            push!(js, get!(vocabulary, token, length(vocabulary)+1))
            push!(vs, 1)
        end
    end
    (sparse(is, js, vs, length(dc), maximum(js)),
     vocabulary_to_feature_names(vocabulary))
end

function vocabulary_to_feature_names(vocabulary::Vocabulary)
    inv_voc = Dict{Uint32, UTF8String}()
    for (k,v) in vocabulary
        inv_voc[v] = k
    end
    [inv_voc[convert(Uint32, i)] for i in 1:length(inv_voc)]
end

files = [string(PATH, "/text/", id) for id in (metadata[:id])]

dc = text_array(text_from_files(files))

@time X, feature_names = dtm(dc,3)
@lindahua
Copy link
Contributor

Can you do git bisect to pin down the culprit?

@jfrolich
Copy link
Author

I use the binary builds, so I guess I cannot do that?

@JeffBezanson
Copy link
Member

You could try running the fast and slow versions each with @profile followed by Profile.print(). That might help identify the bottleneck.

@jfrolich
Copy link
Author

I can tell the slowdown is in this part:

for (i, text) in enumerate(dc)
  tokens::Array{UTF8String,1} = ngramize(tokenize(text), n_grams)
  for token in tokens
    push!(is, i)
    push!(js, get!(vocabulary, token, length(vocabulary)+1))
    push!(vs, 1)
  end
end

Will do a profile now..

@jfrolich
Copy link
Author

Good:

5    ...lia RF\text_proc_2.jl; tokenize; line: 22
  1 string.jl; bytestring; line: 653
    1 ...lia RF\text_proc_2.jl; ngramize; line: 123
7    array.jl; lexcmp; line: 817
14   array.jl; push!; line: 445
2    array.jl; push!; line: 446
1    inference.jl; builtin_tfunction; line: 511
2    inference.jl; typeinf; line: 1212
1    iobuffer.jl; ensureroom; line: 147
68   profile.jl; anonymous; line: 9
    68 profile.jl; anonymous; line: 14
                   2  ...\text_proc_2.jl; dtm; line: 145
1    reflection.jl; _methods; line: 80
1    regex.jl; matchall; line: 131
1    regex.jl; matchall; line: 133
1    regex.jl; matchall; line: 134
1    regex.jl; matchall; line: 136
7    regex.jl; matchall; line: 138
1    regex.jl; matchall; line: 146
1    regex.jl; matchall; line: 154
 1 array.jl; push!; line: 447
28   regex.jl; matchall; line: 167
        1  regex.jl; matchall; line: 164
                              21 regex.jl; matchall; line: 138
                              1  regex.jl; matchall; line: 146
                              4  regex.jl; matchall; line: 154
                                 1 array.jl; push!; line: 440
                                     1 string.jl; SubString; line: 601
                                     +2 1 array.jl; push!; line: 445
                                     +4 1 string.jl; SubString; line: 600
                              1  regex.jl; matchall; line: 155
2    string.jl; isequal; line: 521
4    string.jl; map; line: 804
        1 utf8.jl; getindex; line: 56
        1 utf8.jl; getindex; line: 72
10   string.jl; map; line: 805
        1 string.jl; lowercase; line: 787
             1 string.jl; lowercase; line: 787
10   string.jl; map; line: 809
     1 iobuffer.jl; write; line: 220
     2 iobuffer.jl; write; line: 221
             1 string.jl; lowercase; line: 787
               1 array.jl; append!; line: 462
                 1 iobuffer.jl; ensureroom; line: 131
     2 iobuffer.jl; write; line: 226
     1 iobuffer.jl; write; line: 228
      1 utf8.jl; endof; line: 33
      1 utf8.jl; endof; line: 35
          1 io.jl; write; line: 68
           1 iobuffer.jl; write; line: 220
          1 io.jl; write; line: 70
1    utf8.jl; endof; line: 32
1    utf8.jl; endof; line: 35
4    utf8.jl; isvalid; line: 95
 2    ...lia RF\text_proc_2.jl; tokenize; line: 22
                     1 string.jl; map; line: 805
                     1 string.jl; map; line: 809
 1    array.jl; getindex; line: 111
 2    array.jl; push!; line: 445
     2 array.jl; push!; line: 440
 1    inference.jl; without_linenums; line: 1819
 1    iobuffer.jl; ensureroom; line: 131
 3    iobuffer.jl; ensureroom; line: 145
 1    iobuffer.jl; ensureroom; line: 146
 2    iobuffer.jl; ensureroom; line: 149
 2    reflection.jl; _methods; line: 80
 1    reflection.jl; _methods; line: 97
                 1 reflection.jl; _methods; line: 80
 1    string.jl; isequal; line: 521
 1    utf8.jl; string; line: 135
 61   utf8.jl; string; line: 138
 4    utf8.jl; string; line: 139
 77   utf8.jl; string; line: 140
    2  array.jl; append!; line: 457
     1 array.jl; append!; line: 457
     8 array.jl; append!; line: 462
       1 array.jl; copy!; line: 55
             2 array.jl; copy!; line: 52
             5 array.jl; copy!; line: 55
              2 array.jl; unsafe_copy!; line: 42
      1 array.jl; append!; line: 463
 11   utf8.jl; string; line: 142
  6    array.jl; append!; line: 457
  1    array.jl; append!; line: 460
  120  array.jl; append!; line: 461
  12   array.jl; append!; line: 462
   1 array.jl; copy!; line: 52
   2 array.jl; copy!; line: 55
    2 array.jl; copy!; line: 52
  2    array.jl; lexcmp; line: 817
      2 dict.jl; hashindex; line: 360
  39   array.jl; push!; line: 445
      39 array.jl; push!; line: 440
  1    dict.jl; _setindex!; line: 503
  4    dict.jl; _setindex!; line: 505
  1    inference.jl; typeinf; line: 1465
                               1 inference.jl; stupdate; line: 1146
  9    string.jl; bytestring; line: 34
  1    string.jl; isequal; line: 521
  1    string.jl; lowercase; line: 787
      1 iobuffer.jl; ensureroom; line: 145
   15   ...ia RF\text_proc_2.jl; tokenize; line: 22
     15 string.jl; bytestring; line: 653
       3  ...a RF\text_proc_2.jl; ngramize; line: 123
       12 ...a RF\text_proc_2.jl; ngramize; line: 124
               11 string.jl; bytestring; line: 653
                   10 array.jl; push!; line: 445
                   1  array.jl; push!; line: 446
   47   array.jl; append!; line: 462
           47 array.jl; copy!; line: 55
              1  array.jl; unsafe_copy!; line: 42
               2  array.jl; unsafe_copy!; line: 42
                3  array.jl; unsafe_copy!; line: 48
                 1  array.jl; unsafe_copy!; line: 48
                  37 array.jl; unsafe_copy!; line: 42
                  3  array.jl; unsafe_copy!; line: 48
   25   array.jl; lexcmp; line: 817
       2 dict.jl; hashindex; line: 360
           2 string.jl; isequal; line: 521
   6    array.jl; lexcmp; line: 819
   530  dict.jl; hashindex; line: 360
      137 utf8.jl; endof; line: 32
      165 utf8.jl; endof; line: 33
      173 utf8.jl; endof; line: 35
      1   utf8.jl; endof; line: 36
       54 string.jl; isequal; line: 521
         1  utf8.jl; endof; line: 32
             17 utf8.jl; endof; line: 32
             15 utf8.jl; endof; line: 33
             16 utf8.jl; endof; line: 35
   2    dict.jl; ht_keyindex2; line: 467
   6    dict.jl; ht_keyindex2; line: 470
     1 dict.jl; int64hash; line: 219
     1 dict.jl; int64hash; line: 220
     2 dict.jl; int64hash; line: 224
   29   dict.jl; ht_keyindex2; line: 475
   9    dict.jl; ht_keyindex2; line: 486
   1    dict.jl; skip_deleted; line: 639
   3    dict.jl; skip_deleted; line: 640
   1    dict.jl; skip_deleted; line: 641
   2    dict.jl; skip_deleted; line: 643
   1    string.jl; bytestring; line: 653
       1 array.jl; push!; line: 440
   1    string.jl; lowercase; line: 787
     1 array.jl; append!; line: 462
       1 iobuffer.jl; ensureroom; line: 146
   2    string.jl; map; line: 802
       1 dict.jl; hashindex; line: 360
         1 utf8.jl; endof; line: 35
   24   string.jl; map; line: 804
    1  utf8.jl; getindex; line: 54
     1  utf8.jl; getindex; line: 65
      3  utf8.jl; getindex; line: 54
           1 utf8.jl; getindex; line: 54
           1 utf8.jl; getindex; line: 56
           1 utf8.jl; getindex; line: 67
           2 utf8.jl; getindex; line: 68
           3 utf8.jl; getindex; line: 72
           3 utf8.jl; getindex; line: 74
           3 utf8.jl; getindex; line: 77
   77   string.jl; map; line: 805
           4  string.jl; lowercase; line: 787
                8 string.jl; lowercase; line: 787
   51   string.jl; map; line: 809
    1  utf8.jl; endof; line: 32
     3  io.jl; write; line: 70
      1  io.jl; write; line: 70
        2  iobuffer.jl; write; line: 220
        9  iobuffer.jl; write; line: 221
         1 iobuffer.jl; ensureroom; line: 149
          2 iobuffer.jl; ensureroom; line: 131
           1 iobuffer.jl; ensureroom; line: 131
            3 iobuffer.jl; ensureroom; line: 131
            1 iobuffer.jl; ensureroom; line: 149
        1  iobuffer.jl; write; line: 222
        3  iobuffer.jl; write; line: 224
        2  iobuffer.jl; write; line: 226
        1  iobuffer.jl; write; line: 229
        3  iobuffer.jl; write; line: 230
         2 utf8.jl; endof; line: 32
         6 utf8.jl; endof; line: 35
             6 io.jl; write; line: 68
              1 iobuffer.jl; write; line: 220
               1 iobuffer.jl; write; line: 220
               1 iobuffer.jl; write; line: 224
                1 iobuffer.jl; write; line: 220
             1 io.jl; write; line: 70
             1 io.jl; write; line: 77
             1 io.jl; write; line: 86
    131  array.jl; push!; line: 445
      2  dict.jl; get!; line: 535
      42 dict.jl; get!; line: 536
       2  string.jl; isequal; line: 521
        5  string.jl; isequal; line: 521
         5  string.jl; isequal; line: 521
            4  string.jl; isequal; line: 521
             2  string.jl; isequal; line: 521
                      22 string.jl; isequal; line: 521
                       1  array.jl; lexcmp; line: 817
                        1 array.jl; lexcmp; line: 817
                           1 array.jl; lexcmp; line: 817
                           2 array.jl; lexcmp; line: 819
                            1 array.jl; lexcmp; line: 817
                             1 array.jl; lexcmp; line: 817
                                  2 array.jl; lexcmp; line: 817
                                  2 array.jl; lexcmp; line: 819
      16 dict.jl; get!; line: 540
       1  dict.jl; ht_keyindex2; line: 467
        1  dict.jl; ht_keyindex2; line: 467
         1  dict.jl; ht_keyindex2; line: 467
          1 dict.jl; ht_keyindex2; line: 467
            1 dict.jl; ht_keyindex2; line: 487
              1 dict.jl; ht_keyindex2; line: 467
              1 dict.jl; ht_keyindex2; line: 487
                      6 string.jl; isequal; line: 521
                          1 dict.jl; ht_keyindex2; line: 467
                          2 dict.jl; ht_keyindex2; line: 486
                              1 string.jl; isequal; line: 521
                          3 dict.jl; ht_keyindex2; line: 487
      59 dict.jl; get!; line: 542
      1  dict.jl; get!; line: 545
      1  string.jl; SubString; line: 600
       1 utf8.jl; endof; line: 34
      1  string.jl; SubString; line: 607
       1 utf8.jl; isvalid; line: 95
      1  string.jl; SubString; line: 608
      8  string.jl; SubString; line: 612
    1    dict.jl; hashindex; line: 360
        1 string.jl; isequal; line: 521
    1    inference.jl; typeinf; line: 1212
    1    regex.jl; matchall; line: 138
    1    regex.jl; matchall; line: 154
      1 array.jl; push!; line: 440
    57   string.jl; isequal; line: 521
        2  dict.jl; ht_keyindex2; line: 469
        55 dict.jl; ht_keyindex2; line: 470
         1  dict.jl; hashindex; line: 360
          1  dict.jl; hashindex; line: 360
             1  dict.jl; hashindex; line: 360
                50 array.jl; lexcmp; line: 817
                    50 dict.jl; hashindex; line: 360
                     1  array.jl; sizeof; line: 23
                      6  array.jl; sizeof; line: 23
      28   ...a RF\text_proc_2.jl; tokenize; line: 22
                          1  regex.jl; matchall; line: 133
                          4  string.jl; map; line: 804
                                  2 utf8.jl; getindex; line: 56
                                  1 utf8.jl; getindex; line: 67
                                  1 utf8.jl; getindex; line: 77
                          9  string.jl; map; line: 805
                                       2 string.jl; lowercase; line: 787
                          14 string.jl; map; line: 809
                           1  utf8.jl; endof; line: 34
                              1  io.jl; write; line: 86
                               1 iobuffer.jl; write; line: 220
                               2 iobuffer.jl; write; line: 221
                                  1 iobuffer.jl; ensureroom; line: 131
                               2 iobuffer.jl; write; line: 226
                               1 iobuffer.jl; write; line: 229
                                2 utf8.jl; endof; line: 35
                                    2 io.jl; write; line: 68
                                       1 ...ffer.jl; write; line: 220
                                        1 ...ffer.jl; write; line: 224
                                    1 io.jl; write; line: 70
      1    array.jl; cumsum_pairwise; line: 1354
          1 array.jl; cumsum_pairwise; line: 1350
      1    dict.jl; _setindex!; line: 503
      156  string.jl; isequal; line: 521
          2   dict.jl; ht_keyindex2; line: 469
          3   dict.jl; ht_keyindex2; line: 472
          114 dict.jl; ht_keyindex2; line: 475
          1   dict.jl; ht_keyindex2; line: 476
          34  dict.jl; ht_keyindex2; line: 486
          1   dict.jl; ht_keyindex2; line: 490
          1   dict.jl; ht_keyindex2; line: 492
       1    ...a RF\text_proc_2.jl; tokenize; line: 22
       1    array.jl; push!; line: 445
       21   dict.jl; hashindex; line: 360
           21 string.jl; isequal; line: 521
            1  array.jl; lexcmp; line: 819
               1  array.jl; lexcmp; line: 819
                  3  array.jl; lexcmp; line: 817
                       15 array.jl; lexcmp; line: 817
                       1  array.jl; lexcmp; line: 819
       2    dict.jl; ht_keyindex; line: 444
         1 dict.jl; int64hash; line: 225
       4    dict.jl; setindex!; line: 523
         1 dict.jl; ht_keyindex2; line: 467
           1 dict.jl; ht_keyindex2; line: 476
             1 dict.jl; ht_keyindex2; line: 467
              1 dict.jl; ht_keyindex2; line: 476
       1    dict.jl; setindex!; line: 526
       7    dict.jl; setindex!; line: 528
        1 dict.jl; _setindex!; line: 503
                   3 dict.jl; _setindex!; line: 503
                   1 dict.jl; _setindex!; line: 508
                   1 dict.jl; _setindex!; line: 510
       1    sparse/csparse.jl; sparse; line: 30
       4    sparse/csparse.jl; sparse; line: 31
       1    sparse/csparse.jl; sparse; line: 45
       1    sparse/csparse.jl; sparse; line: 46
       1    sparse/csparse.jl; sparse; line: 49
       6    sparse/csparse.jl; sparse; line: 50
       3    sparse/csparse.jl; sparse; line: 51
       1    sparse/csparse.jl; sparse; line: 56
       28   string.jl; isequal; line: 521
        1  utf8.jl; endof; line: 32
         1  utf8.jl; endof; line: 32
           3  dict.jl; ht_keyindex2; line: 470
             2 utf8.jl; endof; line: 32
             1 utf8.jl; endof; line: 35
           22 dict.jl; ht_keyindex2; line: 486
             8  utf8.jl; endof; line: 33
             14 utf8.jl; endof; line: 35
       1    string.jl; map; line: 802
           1 dict.jl; hashindex; line: 360
             1 utf8.jl; endof; line: 35
       1    utf8.jl; utf8; line: 161
        39   ... RF\text_proc_2.jl; vocabulary_to_feature_names; line: 163
         1  dict.jl; skip_deleted; line: 639
        5    ... RF\text_proc_2.jl; vocabulary_to_feature_names; line: 164
          1 dict.jl; setindex!; line: 517
          1 dict.jl; setindex!; line: 531
            1 dict.jl; setindex!; line: 517
        2    ... RF\text_proc_2.jl; vocabulary_to_feature_names; line: 166
        2    dict.jl; _setindex!; line: 504
        1    string.jl; isequal; line: 521
        1    string.jl; map; line: 805
         8    dict.jl; _setindex!; line: 505
         1    dict.jl; _setindex!; line: 508
         2    dict.jl; setindex!; line: 517
          1    abstractarray.jl; compute_dims; line: 629
           1 abstractarray.jl; compute_dims; line: 629
            1 abstractarray.jl; compute_dims; line: 622
                            1 ...e/csparse.jl; sparse; line: 72
          10   array.jl; push!; line: 445
          1    array.jl; push!; line: 446
          1    array.jl; shift!; line: 521
           1 array.jl; shift!; line: 519
            1 task.jl; wait; line: 279
                            1 ...e/csparse.jl; sparse; line: 74
          1    base.jl; append_any; line: 139
           1 base.jl; append_any; line: 139
                            1 ...e/csparse.jl; sparse; line: 73
          2    cell.jl; setindex!; line: 32
           2 cell.jl; setindex!; line: 32
            1 inference.jl; anonymous; line: 201
                            1 ...e/csparse.jl; sparse; line: 74
                            1 ...e/csparse.jl; sparse; line: 74
          1    dict.jl; ht_keyindex; line: 460
           1 dict.jl; ht_keyindex; line: 460
            1 dict.jl; ht_keyindex; line: 441
                            1 ...e/csparse.jl; sparse; line: 72
          1    inference.jl; abstract_call; line: 757
           1 inference.jl; abstract_call; line: 757
            1 inference.jl; abstract_call; line: 752
                            1 ...e/csparse.jl; sparse; line: 72
          1    inference.jl; abstract_call; line: 833
           1 inference.jl; abstract_call; line: 833
            1 inference.jl; abstract_call; line: 814
                            1 ...e/csparse.jl; sparse; line: 76
                                1 inference.jl; abstract_call; line: 814
          1    inference.jl; abstract_call_gf; line: 638
           1 inference.jl; abstract_call_gf; line: 638
            1 inference.jl; abstract_call_gf; line: 706
                            1 ...e/csparse.jl; sparse; line: 69
          1    inference.jl; abstract_call_gf; line: 655
           1 inference.jl; abstract_call_gf; line: 655
            1 inference.jl; abstract_call_gf; line: 635
                            1 ...e/csparse.jl; sparse; line: 76
          1    inference.jl; abstract_eval; line: 928
           1 inference.jl; abstract_eval; line: 928
            1 inference.jl; abstract_eval; line: 931
                            1 ...e/csparse.jl; sparse; line: 71
          1    inference.jl; abstract_eval_symbol; line: 1012
           1 inference.jl; abstract_eval_symbol; line: 1012
            1 inference.jl; abstract_eval_arg; line: 852
                            1 ...e/csparse.jl; sparse; line: 73
          1    inference.jl; abstract_eval_symbol; line: 1014
           1 inference.jl; abstract_eval_symbol; line: 1014
            1 inference.jl; abstract_eval_symbol; line: 1012
                            1 ...e/csparse.jl; sparse; line: 74
          1    inference.jl; anonymous; line: 216
           1 inference.jl; anonymous; line: 216
            1 inference.jl; anonymous; line: 212
                            1 ...e/csparse.jl; sparse; line: 71
          1    inference.jl; anonymous; line: 277
           1 inference.jl; anonymous; line: 277
            1 inference.jl; anonymous; line: 277
                            1 ...e/csparse.jl; sparse; line: 74
          1    inference.jl; anonymous; line: 357
           1 inference.jl; anonymous; line: 357
            1 inference.jl; anonymous; line: 321
                            1 ...e/csparse.jl; sparse; line: 69
          1    inference.jl; anonymous; line: 592
           1 inference.jl; anonymous; line: 592
            1 reflection.jl; _methods; line: 86
                            1 ...e/csparse.jl; sparse; line: 76
          1    inference.jl; anonymous; line: 2538
           1 inference.jl; anonymous; line: 2538
            1 inference.jl; anonymous; line: 2538
                            1 ...e/csparse.jl; sparse; line: 73
          1    inference.jl; eval_annotate; line: 1586
           1 inference.jl; eval_annotate; line: 1586
            1 inference.jl; eval_annotate; line: 1582
                            1 ...e/csparse.jl; sparse; line: 72
          1    inference.jl; find_sa_vars; line: 2572
           1 inference.jl; find_sa_vars; line: 2572
                            1 ...e/csparse.jl; sparse; line: 73
          2    inference.jl; inlineable; line: 2035
           2 inference.jl; inlineable; line: 2035
            2 inference.jl; inlineable; line: 2033
                            1 ...e/csparse.jl; sparse; line: 71
                            1 ...e/csparse.jl; sparse; line: 72
          1    inference.jl; inlineable; line: 2153
           1 inference.jl; inlineable; line: 2153
            1 inference.jl; inlineable; line: 2151
                            1 ...e/csparse.jl; sparse; line: 76
                                1 inference.jl; inlineable; line: 2151
                                    1 int.jl; +; line: 33
          1    inference.jl; inlineable; line: 2173
           1 inference.jl; inlineable; line: 2173
            1 inference.jl; inlineable; line: 2197
                            1 ...e/csparse.jl; sparse; line: 73
          1    inference.jl; inlining_pass; line: 2429
           1 inference.jl; inlining_pass; line: 2429
            1 inference.jl; inlining_pass; line: 2418
                            1 ...e/csparse.jl; sparse; line: 72
          1    inference.jl; is_known_call; line: 2514
           1 inference.jl; is_known_call; line: 2514
            1 inference.jl; is_known_call; line: 2515
                            1 ...e/csparse.jl; sparse; line: 69
          1    inference.jl; typeinf; line: 1226
           1 inference.jl; typeinf; line: 1214
            1 inference.jl; typeinf; line: 1395
                            1 ...e/csparse.jl; sparse; line: 73
          1    inference.jl; typeinf_ext; line: 1185
           1 inference.jl; typeinf_ext; line: 1185
            1 array.jl; reinterpret; line: 81
                            1 ...e/csparse.jl; sparse; line: 69
          1    inference.jl; unique_names; line: 2490
           1 inference.jl; unique_names; line: 2490
            1 expr.jl; copy; line: 30
                            1 ...e/csparse.jl; sparse; line: 73
          1    multi.jl; call_on_owner; line: 743
           1 multi.jl; call_on_owner; line: 743
            1 operators.jl; isequal; line: 9
                            1 ...e/csparse.jl; sparse; line: 69
          1    path.jl; joinpath; line: 58
           1 path.jl; joinpath; line: 58
            1 path.jl; joinpath; line: 61
                            1 ...e/csparse.jl; sparse; line: 73
          1    path.jl; joinpath; line: 61
           1 path.jl; joinpath; line: 61
            1 path.jl; joinpath; line: 61
                            1 ...e/csparse.jl; sparse; line: 69
          1    pcre.jl; exec; line: 128
           1 pcre.jl; exec; line: 128
            1 pcre.jl; exec; line: 126
                            1 ...e/csparse.jl; sparse; line: 71
                                1 pcre.jl; exec; line: 126
                                     1 array.jl; setindex!; line: 298
          1    printf.jl; _printf; line: 762
           1 printf.jl; _printf; line: 762
            1 printf.jl; _printf; line: 760
                            1 ...e/csparse.jl; sparse; line: 73
          1    range.jl; StepRange; line: 35
           1 range.jl; StepRange; line: 49
            1 range.jl; StepRange; line: 42
                            1 ...e/csparse.jl; sparse; line: 74
          1    show.jl; show_unquoted; line: 456
           1 show.jl; show_unquoted; line: 456
            1 show.jl; show_unquoted; line: 456
                            1 ...e/csparse.jl; sparse; line: 69
          1    string.jl; _split; line: 1285
           1 string.jl; _split; line: 1285
            1 string.jl; _split; line: 1278
                            1 ...e/csparse.jl; sparse; line: 71
          1    string.jl; escape_nul; line: 841
           1 string.jl; escape_nul; line: 841
                            1 ...e/csparse.jl; sparse; line: 72
          1    string.jl; isequal; line: 521
           1 string.jl; isequal; line: 521
            1 string.jl; isequal; line: 521
                            1 ...e/csparse.jl; sparse; line: 71
          1    string.jl; lpad; line: 1239
           1 string.jl; lpad; line: 1239
            1 printf.jl; special_handler; line: 135
                            1 ...e/csparse.jl; sparse; line: 76
          1    string.jl; parseint_nocheck; line: 1496
           1 string.jl; parseint_nocheck; line: 1496
            1 util.jl; warn; line: 196
                            1 ...e/csparse.jl; sparse; line: 73
          1    string.jl; print; line: 623
           1 string.jl; print; line: 623
            1 string.jl; print; line: 623
                            1 ...e/csparse.jl; sparse; line: 71
          1    string.jl; print_to_string; line: 21
           1 string.jl; print_to_string; line: 21
            1 stream.jl; init_stdio; line: 241
                            1 ...e/csparse.jl; sparse; line: 74
           1    array.jl; getindex; line: 256
                   1 array.jl; copy!; line: 55
                               1 array.jl; unsafe_copy!; line: 42
            4    dict.jl; rehash; line: 382
            1    dict.jl; rehash; line: 397
                            1 ...e/csparse.jl; sparse; line: 72
            1    inference.jl; to_tuple_of_Types; line: 742
                            1 ...e/csparse.jl; sparse; line: 71
            1    linalg.jl; __init__; line: 224
                            1 ...e/csparse.jl; sparse; line: 73
            1    reduce.jl; in; line: 117
                            1 ...e/csparse.jl; sparse; line: 72
            1    string.jl; rstrip; line: 1429
                            1 ...e/csparse.jl; sparse; line: 71
              1    sparse/csparse.jl; sparse; line: 71
              1    sparse/csparse.jl; sparse; line: 72
              1    sparse/csparse.jl; sparse; line: 76
                1    sparse/csparse.jl; sparse; line: 71
                 1    sparse/csparse.jl; sparse; line: 71
                   1    sparse/csparse.jl; sparse; line: 69
                   1    sparse/csparse.jl; sparse; line: 71
                    4    dict.jl; rehash; line: 383
                     212 ...ext_proc_2.jl; dtm; line: 150
                                      1   ...oc_2.jl; tokenize; line: 22
                                     +3 211 ...c_2.jl; tokenize; line: 22
                                     +5 138 string.jl; bytestring; line: 653
                                     +7 1   ...c_2.jl; ngramize; line: 116
                                     +7 109 ...c_2.jl; ngramize; line: 123
                                     +9 1  utf8.jl; string; line: 134
                                    +11 1  utf8.jl; string; line: 134
                                    +11 1  utf8.jl; string; line: 135
                                    +11 4  utf8.jl; string; line: 138
                                    +14 1 utf8.jl; string; line: 135
                                    +17 1 utf8.jl; string; line: 134
                                     +7 28  ...c_2.jl; ngramize; line: 124
                                    +11 1  array.jl; push!; line: 447
                                    +15 24 string.jl; bytestring; line: 653
                                    +19 22 array.jl; push!; line: 445
                                    +19 2  array.jl; push!; line: 446
                                     +8 53 string.jl; bytestring; line: 653
                                     +9 1  string.jl; nextind; line: 127
                                    +10 2  string.jl; nextind; line: 129
                                    +11 1  string.jl; nextind; line: 127
                                    +15 1 string.jl; nextind; line: 127
                                    +20 2 string.jl; nextind; line: 127
                                    +26 1 utf8.jl; endof; line: 36
                                    +20 1 string.jl; nextind; line: 135
                                    +22 1 utf8.jl; isvalid; line: 95
                                    +16 9 utf8.jl; utf8; line: 161
                     10  ...ext_proc_2.jl; dtm; line: 151
                     338 ...ext_proc_2.jl; dtm; line: 152
                      4   array.jl; push!; line: 440
                        3   array.jl; push!; line: 440
                          1   array.jl; push!; line: 447
                             328 array.jl; push!; line: 445
                                 1   array.jl; push!; line: 440
                                 299 array.jl; push!; line: 444
                                    +14 1 io.jl; close; line: 260
                                 18  array.jl; push!; line: 445
                                 10  array.jl; push!; line: 446
                     8   ...ext_proc_2.jl; dtm; line: 153
                       1 dict.jl; get!; line: 535
                        2 array.jl; push!; line: 445
                        2 dict.jl; get!; line: 535
                         1 dict.jl; get!; line: 535
                     40  ...ext_proc_2.jl; dtm; line: 154
                      3  array.jl; push!; line: 440
                       2  array.jl; push!; line: 440
                        2  array.jl; push!; line: 440
                          1  array.jl; push!; line: 447
                             31 array.jl; push!; line: 445
                                 1  array.jl; push!; line: 440
                                 5  array.jl; push!; line: 444
                                 19 array.jl; push!; line: 445
                                 6  array.jl; push!; line: 446
                      3   dict.jl; rehash; line: 387
                      4   dict.jl; rehash; line: 388
                      207 dict.jl; rehash; line: 391
                        1   dict.jl; int64hash; line: 223
                           202 dict.jl; hashindex; line: 360
                      5   dict.jl; rehash; line: 392
                      1   dict.jl; rehash; line: 393
                      7   dict.jl; rehash; line: 396
                      4   dict.jl; rehash; line: 397
                      3   dict.jl; rehash; line: 398
                         2   ...xt_proc_2.jl; dtm; line: 157
                               1 reduce.jl; maximum_rgn; line: 396
                               1 reduce.jl; maximum_rgn; line: 397
                         1   ...e/csparse.jl; sparse; line: 73
                          1   ...e/csparse.jl; sparse; line: 72
                            1   .../csparse.jl; sparse; line: 63
                            1   .../csparse.jl; sparse; line: 65
                            1   .../csparse.jl; sparse; line: 66
                            6   .../csparse.jl; sparse; line: 67
                            55  .../csparse.jl; sparse; line: 69
                                     1 int.jl; +; line: 20
                            53  .../csparse.jl; sparse; line: 71
                                     1  array.jl; setindex!; line: 298
                                        1 array.jl; setindex!; line: 298
                            40  .../csparse.jl; sparse; line: 72
                            62  .../csparse.jl; sparse; line: 73
                                        2 array.jl; setindex!; line: 298
                            36  .../csparse.jl; sparse; line: 74
                                        1 array.jl; setindex!; line: 298
                            39  .../csparse.jl; sparse; line: 76
                            5   .../csparse.jl; sparse; line: 80
                            4   .../csparse.jl; sparse; line: 81
                            1   .../csparse.jl; sparse; line: 85
                              49 ..._proc_2.jl; dtm; line: 157
                                     +7 1  ...arse.jl; sparse; line: 69
                                     +7 1  ...arse.jl; sparse; line: 74
                                    +15 1  ...arse.jl; sparse; line: 69
                                    +17 1  ...arse.jl; sparse; line: 69
                                    +21 1  ...arse.jl; sparse; line: 69
                                    +36 1  ...rse.jl; sparse; line: 101
                                    +36 1  ...rse.jl; sparse; line: 107
                                    +36 2  ...rse.jl; sparse; line: 108
                                    +36 26 ...rse.jl; sparse; line: 109
                                    +36 14 ...rse.jl; sparse; line: 110
                              1  ...csparse.jl; sparse; line: 90
                              8  ...csparse.jl; sparse; line: 95
                                     53 ...oc_2.jl; dtm; line: 157
                                    +21 53 ...c_2.jl; ...ature_names; line: 166
                                    +23 1  dict.jl; ht_keyindex; line: 441
                                    +37 4  dict.jl; ht_keyindex; line: 441
                                    +37 1  dict.jl; ht_keyindex; line: 443
                                    +37 22 dict.jl; ht_keyindex; line: 448
                                    +37 6  dict.jl; ht_keyindex; line: 451
                                    +37 1  dict.jl; ht_keyindex; line: 452
                                    +37 6  dict.jl; ht_keyindex; line: 460
                                     +5 1 ...arse.jl; sparse; line: 71

Bad:

223  ...lia RF\text_proc_2.jl; dtm; line: 150
 223 ...ulia RF\text_proc_2.jl; tokenize; line: 22
  203 string.jl; bytestring; line: 652
   1  ...lia RF\text_proc_2.jl; ngramize; line: 117
   6  ...lia RF\text_proc_2.jl; ngramize; line: 119
   1  ...lia RF\text_proc_2.jl; ngramize; line: 121
   2  ...lia RF\text_proc_2.jl; ngramize; line: 122
   94 ...lia RF\text_proc_2.jl; ngramize; line: 123
    5 utf8.jl; string; line: 134
    1 utf8.jl; string; line: 135
    2 utf8.jl; string; line: 138
   35 ...lia RF\text_proc_2.jl; ngramize; line: 124
    1  array.jl; push!; line: 454
    31 string.jl; bytestring; line: 652
     1  array.jl; push!; line: 447
     1  array.jl; push!; line: 451
     26 array.jl; push!; line: 452
     3  array.jl; push!; line: 453
   4  string.jl; nextind; line: 127
    1 utf8.jl; endof; line: 32
    2 utf8.jl; endof; line: 35
   1  string.jl; nextind; line: 135
    1 utf8.jl; isvalid; line: 95
  5   utf8.jl; utf8; line: 161
15   ...lia RF\text_proc_2.jl; dtm; line: 151
18   ...lia RF\text_proc_2.jl; dtm; line: 152
 1 array.jl; push!; line: 447
 3 array.jl; push!; line: 451
 4 array.jl; push!; line: 452
 9 array.jl; push!; line: 453
179  ...lia RF\text_proc_2.jl; dtm; line: 153
 13 array.jl; push!; line: 452
  1 dict.jl; get!; line: 463
 3  array.jl; push!; line: 453
 1  array.jl; push!; line: 454
 1  dict.jl; get!; line: 463
 3  dict.jl; get!; line: 470
 47 dict.jl; get!; line: 473
 5  dict.jl; get!; line: 474
18   ...lia RF\text_proc_2.jl; dtm; line: 154
 5 array.jl; push!; line: 447
 2 array.jl; push!; line: 451
 7 array.jl; push!; line: 452
 2 array.jl; push!; line: 453
 2 array.jl; push!; line: 454
110  ...lia RF\text_proc_2.jl; dtm; line: 157
 58 ...ulia RF\text_proc_2.jl; vocabulary_to_feature_names; line: 166
  1  dict.jl; ht_keyindex; line: 368
  35 dict.jl; ht_keyindex; line: 375
  10 dict.jl; ht_keyindex; line: 378
  1  dict.jl; ht_keyindex; line: 379
  1  dict.jl; ht_keyindex; line: 382
  1  dict.jl; ht_keyindex; line: 384
 1  reduce.jl; maximum_rgn; line: 406
 1  reduce.jl; maximum_rgn; line: 407
 1  sparse/csparse.jl; sparse; line: 69
 1  sparse/csparse.jl; sparse; line: 71
 1  sparse/csparse.jl; sparse; line: 73
 1  sparse/csparse.jl; sparse; line: 76
 1  sparse/csparse.jl; sparse; line: 101
 1  sparse/csparse.jl; sparse; line: 106
 1  sparse/csparse.jl; sparse; line: 108
 28 sparse/csparse.jl; sparse; line: 109
 15 sparse/csparse.jl; sparse; line: 110
230  ...lia RF\text_proc_2.jl; tokenize; line: 22
 1  regex.jl; matchall; line: 133
 15 string.jl; bytestring; line: 652
  1  ...lia RF\text_proc_2.jl; ngramize; line: 119
  4  ...lia RF\text_proc_2.jl; ngramize; line: 123
  10 ...lia RF\text_proc_2.jl; ngramize; line: 124
   10 string.jl; bytestring; line: 652
    10 array.jl; push!; line: 452
 31 string.jl; map; line: 803
  5 utf8.jl; getindex; line: 54
  1 utf8.jl; getindex; line: 55
  1 utf8.jl; getindex; line: 56
  4 utf8.jl; getindex; line: 63
  1 utf8.jl; getindex; line: 65
  5 utf8.jl; getindex; line: 67
  5 utf8.jl; getindex; line: 74
  2 utf8.jl; getindex; line: 77
 84 string.jl; map; line: 804
  11 string.jl; lowercase; line: 786
 3  string.jl; map; line: 805
 80 string.jl; map; line: 808
  10 io.jl; write; line: 67
  5  io.jl; write; line: 68
   2 iobuffer.jl; write; line: 232
   1 iobuffer.jl; write; line: 236
  2  io.jl; write; line: 86
  8  iobuffer.jl; write; line: 232
  13 iobuffer.jl; write; line: 233
   6 iobuffer.jl; ensureroom; line: 133
   2 iobuffer.jl; ensureroom; line: 151
   3 string.jl; lowercase; line: 786
    3 operators.jl; isequal; line: 11
     3 iobuffer.jl; ensureroom; line: 133
  6  iobuffer.jl; write; line: 234
  2  iobuffer.jl; write; line: 236
  4  iobuffer.jl; write; line: 238
  2  iobuffer.jl; write; line: 241
  4  iobuffer.jl; write; line: 242
  4  utf8.jl; endof; line: 32
  3  utf8.jl; endof; line: 33
  1  utf8.jl; endof; line: 34
  5  utf8.jl; endof; line: 35
  1  utf8.jl; endof; line: 36
370  ...lia RF\text_proc_2.jl; vocabulary_to_feature_names; line: 163
3    ...lia RF\text_proc_2.jl; vocabulary_to_feature_names; line: 164
 3 dict.jl; setindex!; line: 444
2    ...lia RF\text_proc_2.jl; vocabulary_to_feature_names; line: 166
1    abstractarray.jl; hvcat; line: 793
 1 abstractarray.jl; hvcat; line: 793
  1 abstractarray.jl; hvcat; line: 791
   1 sparse/csparse.jl; sparse; line: 71
1    array.jl; _deleteat!; line: 416
 1 array.jl; _deleteat!; line: 416
  1 array.jl; splice!; line: 603
   1 sparse/csparse.jl; sparse; line: 76
3    array.jl; append!; line: 467
135  array.jl; append!; line: 468
56   array.jl; append!; line: 469
 3  array.jl; copy!; line: 52
 51 array.jl; copy!; line: 55
  42 array.jl; unsafe_copy!; line: 42
  8  array.jl; unsafe_copy!; line: 48
1    array.jl; cumsum_pairwise; line: 1399
 1 array.jl; cumsum_pairwise; line: 1395
1    array.jl; cumsum_pairwise; line: 1400
 1 array.jl; cumsum_pairwise; line: 1395
1    array.jl; getindex; line: 120
80   array.jl; getindex; line: 244
7    array.jl; lexcmp; line: 824
2    array.jl; lexcmp; line: 826
37   array.jl; push!; line: 447
 1 array.jl; push!; line: 447
  1 string.jl; *; line: 76
   1 sparse/csparse.jl; sparse; line: 74
    1 string.jl; *; line: 76
21   array.jl; push!; line: 451
116  array.jl; push!; line: 452
 5  sparse/csparse.jl; sparse; line: 31
 1  sparse/csparse.jl; sparse; line: 45
 1  sparse/csparse.jl; sparse; line: 46
 1  sparse/csparse.jl; sparse; line: 47
 2  sparse/csparse.jl; sparse; line: 49
 3  sparse/csparse.jl; sparse; line: 50
 9  sparse/csparse.jl; sparse; line: 51
 1  sparse/csparse.jl; sparse; line: 56
 52 string.jl; ==; line: 523
  3  utf8.jl; endof; line: 32
  23 utf8.jl; endof; line: 33
  2  utf8.jl; endof; line: 34
  18 utf8.jl; endof; line: 35
  2  utf8.jl; endof; line: 36
 2  string.jl; SubString; line: 599
 1  string.jl; SubString; line: 607
 15 string.jl; SubString; line: 611
17   array.jl; push!; line: 453
 1 sparse/csparse.jl; sparse; line: 74
4    array.jl; setindex!; line: 305
1    dict.jl; _setindex!; line: 430
16   dict.jl; _setindex!; line: 431
14   dict.jl; _setindex!; line: 432
 1 dict.jl; _setindex!; line: 432
  1 dict.jl; setindex!; line: 454
   1 sparse/csparse.jl; sparse; line: 69
1    dict.jl; _setindex!; line: 437
5    dict.jl; _setindex!; line: 439
 1 dict.jl; ht_keyindex2; line: 397
 4 string.jl; ==; line: 523
  4 dict.jl; rehash; line: 309
4    dict.jl; get!; line: 463
66   dict.jl; get!; line: 464
 53 array.jl; push!; line: 452
  53 string.jl; ==; line: 523
   38 array.jl; lexcmp; line: 824
   7  array.jl; lexcmp; line: 826
 13 string.jl; ==; line: 523
617  dict.jl; get!; line: 468
 7   array.jl; push!; line: 452
  3 dict.jl; ht_keyindex2; line: 394
  4 string.jl; ==; line: 523
   4 dict.jl; ht_keyindex2; line: 394
 4   dict.jl; ht_keyindex2; line: 394
 36  dict.jl; ht_keyindex2; line: 402
  2 dict.jl; isslotempty; line: 289
 20  dict.jl; ht_keyindex2; line: 403
 17  dict.jl; ht_keyindex2; line: 404
 28  dict.jl; ht_keyindex2; line: 407
  1 dict.jl; isslotmissing; line: 291
 2   dict.jl; ht_keyindex2; line: 411
 400 dict.jl; ht_keyindex2; line: 413
  28 array.jl; getindex; line: 244
  5  operators.jl; isequal; line: 11
   2 string.jl; ==; line: 523
 2   dict.jl; ht_keyindex2; line: 414
 88  dict.jl; ht_keyindex2; line: 417
 2   dict.jl; ht_keyindex2; line: 426
189  dict.jl; get!; line: 470
 95 array.jl; getindex; line: 244
 1  operators.jl; >; line: 33
7    dict.jl; get!; line: 473
3    dict.jl; hashindex; line: 287
 1 hashing.jl; hash_64_64; line: 11
 1 hashing.jl; hash_64_64; line: 14
 1 hashing.jl; hash_64_64; line: 16
7    dict.jl; ht_keyindex2; line: 394
2    dict.jl; ht_keyindex2; line: 396
293  dict.jl; ht_keyindex2; line: 397
 2 base.jl; int; line: 101
 1 dict.jl; hashindex; line: 287
 4 hashing2.jl; hash; line: 162
 1 int.jl; +; line: 33
4    dict.jl; ht_keyindex2; line: 399
72   dict.jl; ht_keyindex2; line: 402
 20 dict.jl; isslotempty; line: 289
17   dict.jl; ht_keyindex2; line: 403
14   dict.jl; ht_keyindex2; line: 404
23   dict.jl; ht_keyindex2; line: 407
5    dict.jl; ht_keyindex2; line: 413
3    dict.jl; ht_keyindex2; line: 426
1    dict.jl; ht_keyindex; line: 368
86   dict.jl; isslotempty; line: 289
5    dict.jl; isslotmissing; line: 291
1    dict.jl; rehash; line: 308
 1 array.jl; zeros; line: 167
313  dict.jl; rehash; line: 310
2    dict.jl; rehash; line: 315
2    dict.jl; rehash; line: 317
3    dict.jl; rehash; line: 318
 3 dict.jl; hashindex; line: 287
  2 hashing.jl; hash_64_64; line: 10
1    dict.jl; rehash; line: 319
3    dict.jl; rehash; line: 320
1    dict.jl; rehash; line: 322
1    dict.jl; rehash; line: 323
1    dict.jl; rehash; line: 325
2    dict.jl; setindex!; line: 444
49   dict.jl; setindex!; line: 450
 45 dict.jl; _setindex!; line: 439
  32 dict.jl; ht_keyindex2; line: 402
  1  dict.jl; ht_keyindex2; line: 404
  11 dict.jl; ht_keyindex2; line: 408
  1  dict.jl; ht_keyindex2; line: 413
 4  dict.jl; ht_keyindex2; line: 394
1    dict.jl; setindex!; line: 453
 1 sparse/csparse.jl; sparse; line: 74
1    dict.jl; setindex!; line: 454
1    dict.jl; setindex!; line: 456
1    dict.jl; skip_deleted; line: 567
5    dict.jl; skip_deleted; line: 568
1    file.jl; pwd; line: 4
 1 file.jl; pwd; line: 4
  1 path.jl; abspath; line: 106
   1 sparse/csparse.jl; sparse; line: 71
    1 path.jl; abspath; line: 106
     1 array.jl; setindex!; line: 305
2    hashing2.jl; hash; line: 162
256  hashing2.jl; hash; line: 163
 4 array.jl; sizeof; line: 23
1    inference.jl; _sym_repl; line: 1708
 1 inference.jl; _sym_repl; line: 1708
  1 inference.jl; sym_replace; line: 1691
   1 sparse/csparse.jl; sparse; line: 69
1    inference.jl; abstract_call; line: 753
 1 inference.jl; abstract_call; line: 753
  1 inference.jl; abstract_call; line: 829
   1 sparse/csparse.jl; sparse; line: 73
    1 inference.jl; abstract_call; line: 829
1    inference.jl; abstract_call; line: 804
 1 inference.jl; abstract_call; line: 804
  1 inference.jl; abstract_call; line: 808
   1 sparse/csparse.jl; sparse; line: 74
1    inference.jl; abstract_call; line: 805
 1 inference.jl; abstract_call; line: 805
  1 inference.jl; abstract_call; line: 805
   1 sparse/csparse.jl; sparse; line: 69
1    inference.jl; abstract_call_gf; line: 638
 1 inference.jl; abstract_call_gf; line: 638
  1 inference.jl; abstract_call_gf; line: 633
   1 sparse/csparse.jl; sparse; line: 76
1    inference.jl; abstract_call_gf; line: 691
 1 inference.jl; abstract_call_gf; line: 691
  1 inference.jl; abstract_call_gf; line: 631
   1 sparse/csparse.jl; sparse; line: 76
1    inference.jl; abstract_eval_symbol; line: 1023
 1 inference.jl; abstract_eval_symbol; line: 1023
  1 inference.jl; abstract_eval_symbol; line: 1039
   1 sparse/csparse.jl; sparse; line: 69
1    inference.jl; anonymous; line: 345
 1 inference.jl; anonymous; line: 345
  1 inference.jl; anonymous; line: 345
   1 sparse/csparse.jl; sparse; line: 72
1    inference.jl; anonymous; line: 453
 1 sparse/csparse.jl; sparse; line: 72
1    inference.jl; anonymous; line: 1188
 1 sparse/csparse.jl; sparse; line: 71
1    inference.jl; anonymous; line: 2621
 1 inference.jl; anonymous; line: 2621
  1 inference.jl; anonymous; line: 2621
   1 sparse/csparse.jl; sparse; line: 69
1    inference.jl; inlineable; line: 1976
 1 inference.jl; inlineable; line: 1976
  1 inference.jl; inlineable; line: 1969
   1 sparse/csparse.jl; sparse; line: 74
1    inference.jl; inlineable; line: 1994
 1 inference.jl; inlineable; line: 1994
  1 inference.jl; inlineable; line: 1988
   1 sparse/csparse.jl; sparse; line: 74
    1 inference.jl; inlineable; line: 1988
     1 array.jl; setindex!; line: 305
1    inference.jl; inlineable; line: 2051
 1 inference.jl; inlineable; line: 2051
  1 inference.jl; inlineable; line: 2045
   1 sparse/csparse.jl; sparse; line: 76
    1 inference.jl; inlineable; line: 2045
1    inference.jl; inlineable; line: 2066
1    inference.jl; inlineable; line: 2159
 1 inference.jl; inlineable; line: 2159
  1 inference.jl; inlineable; line: 2157
   1 sparse/csparse.jl; sparse; line: 76
    1 inference.jl; inlineable; line: 2157
1    inference.jl; inlineable; line: 2181
1    inference.jl; inlineable; line: 2182
 1 inference.jl; inlineable; line: 2182
  1 inference.jl; inlineable; line: 2157
   1 sparse/csparse.jl; sparse; line: 72
1    inference.jl; inlining_pass; line: 2415
 1 inference.jl; inlining_pass; line: 2415
  1 inference.jl; inlining_pass; line: 2397
   1 sparse/csparse.jl; sparse; line: 72
1    inference.jl; is_known_call; line: 2568
 1 inference.jl; is_known_call; line: 2568
  1 sparse/csparse.jl; sparse; line: 73
   1 array.jl; setindex!; line: 305
1    inference.jl; is_var_assigned; line: 2580
 1 inference.jl; is_var_assigned; line: 2580
  1 inference.jl; is_var_assigned; line: 2581
   1 sparse/csparse.jl; sparse; line: 76
    1 inference.jl; is_var_assigned; line: 2581
1    inference.jl; replace_tupleref!; line: 2784
 1 inference.jl; replace_tupleref!; line: 2784
  1 inference.jl; replace_tupleref!; line: 2777
   1 sparse/csparse.jl; sparse; line: 72
1    inference.jl; to_tuple_of_Types; line: 744
 1 inference.jl; to_tuple_of_Types; line: 744
  1 inference.jl; to_tuple_of_Types; line: 743
   1 sparse/csparse.jl; sparse; line: 71
1    inference.jl; typeinf; line: 1306
 1 inference.jl; typeinf; line: 1306
  1 inference.jl; typeinf; line: 1224
   1 sparse/csparse.jl; sparse; line: 74
1    inference.jl; typeinf; line: 1307
1    inference.jl; typeinf; line: 1464
 1 inference.jl; typeinf; line: 1464
  1 inference.jl; typeinf; line: 1362
   1 sparse/csparse.jl; sparse; line: 69
1    inference.jl; typeinf; line: 1497
1    inference.jl; unique_names; line: 2544
 1 inference.jl; unique_names; line: 2544
  1 sparse/csparse.jl; sparse; line: 71
1    no file; anonymous; line: 604
 1 no file; anonymous; line: 604
  1 no file; anonymous; line: 602
   1 sparse/csparse.jl; sparse; line: 69
1    operators.jl; anonymous; line: 320
 1 operators.jl; anonymous; line: 320
  1 operators.jl; anonymous; line: 320
   1 sparse/csparse.jl; sparse; line: 69
17   operators.jl; isequal; line: 11
 16 string.jl; ==; line: 523
  2 array.jl; lexcmp; line: 824
  1 array.jl; lexcmp; line: 826
1    pcre.jl; exec; line: 115
 1 pcre.jl; exec; line: 115
  1 pcre.jl; exec; line: 115
   1 sparse/csparse.jl; sparse; line: 73
1    printf.jl; gen; line: 12
 1 printf.jl; gen; line: 12
  1 printf.jl; gen; line: 16
   1 sparse/csparse.jl; sparse; line: 72
87   profile.jl; anonymous; line: 9
 87 profile.jl; anonymous; line: 14
  3 ...ulia RF\text_proc_2.jl; dtm; line: 145
1    range.jl; StepRange; line: 17
322  reduce.jl; sum_seq; line: 227
 322 reduce.jl; sum_seq; line: 227
  322 reduce.jl; sum_seq; line: 226
   322 sparse/csparse.jl; sparse; line: 71
2    reflection.jl; _methods; line: 80
2    reflection.jl; _methods; line: 84
 2 array.jl; copy!; line: 55
  2 inference.jl; typeinf; line: 1222
1    reflection.jl; _methods; line: 97
 1 reflection.jl; _methods; line: 80
1    regex.jl; compile; line: 43
3    regex.jl; matchall; line: 134
1    regex.jl; matchall; line: 136
4    regex.jl; matchall; line: 138
9    regex.jl; matchall; line: 154
 5 array.jl; push!; line: 452
 2 array.jl; push!; line: 453
 2 string.jl; SubString; line: 599
67   regex.jl; matchall; line: 167
 48 regex.jl; matchall; line: 138
 18 regex.jl; matchall; line: 154
  17 array.jl; push!; line: 452
   1 string.jl; SubString; line: 599
 1  regex.jl; matchall; line: 155
1    socket.jl; getipaddr; line: 547
 1 sparse/csparse.jl; sparse; line: 76
  1 socket.jl; getipaddr; line: 547
2    sparse/csparse.jl; sparse; line: 65
2    sparse/csparse.jl; sparse; line: 66
7    sparse/csparse.jl; sparse; line: 67
64   sparse/csparse.jl; sparse; line: 69
389  sparse/csparse.jl; sparse; line: 71
 5 array.jl; setindex!; line: 305
694  sparse/csparse.jl; sparse; line: 72
 1 operators.jl; !=; line: 26
1351 sparse/csparse.jl; sparse; line: 73
 2 array.jl; setindex!; line: 305
36   sparse/csparse.jl; sparse; line: 74
 3 array.jl; setindex!; line: 305
362  sparse/csparse.jl; sparse; line: 76
 1 int.jl; +; line: 33
3    sparse/csparse.jl; sparse; line: 80
1    sparse/csparse.jl; sparse; line: 81
330  sparse/csparse.jl; sparse; line: 86
 330 profile.jl; init; line: 25
  330 base.jl; Array; line: 188
12   sparse/csparse.jl; sparse; line: 95
1    stream.jl; unpreserve_handle; line: 18
 1 stream.jl; unpreserve_handle; line: 18
  1 stream.jl; stream_wait; line: 251
   1 sparse/csparse.jl; sparse; line: 69
877  string.jl; ==; line: 523
 15  array.jl; lexcmp; line: 824
 3   array.jl; lexcmp; line: 826
 1   dict.jl; rehash; line: 309
 1   dict.jl; rehash; line: 314
 3   dict.jl; rehash; line: 315
 6   dict.jl; rehash; line: 316
 3   dict.jl; rehash; line: 317
 294 dict.jl; rehash; line: 318
  1 base.jl; int; line: 101
  3 hashing2.jl; hash; line: 162
 21  dict.jl; rehash; line: 319
 28  dict.jl; rehash; line: 320
  1 int.jl; +; line: 33
 24  dict.jl; rehash; line: 322
 28  dict.jl; rehash; line: 323
 22  dict.jl; rehash; line: 324
 1   dict.jl; rehash; line: 325
 3   utf8.jl; endof; line: 32
 205 utf8.jl; endof; line: 33
 1   utf8.jl; endof; line: 34
 218 utf8.jl; endof; line: 35
3    string.jl; bytestring; line: 34
1    string.jl; bytestring; line: 652
 1 string.jl; ==; line: 523
10   string.jl; lowercase; line: 786
 10 operators.jl; isequal; line: 11
  1 iobuffer.jl; ensureroom; line: 133
  2 iobuffer.jl; ensureroom; line: 138
  2 iobuffer.jl; ensureroom; line: 147
  1 iobuffer.jl; ensureroom; line: 148
  3 iobuffer.jl; ensureroom; line: 149
  1 iobuffer.jl; ensureroom; line: 151
10   string.jl; map; line: 801
 2 utf8.jl; endof; line: 32
 2 utf8.jl; endof; line: 33
 2 utf8.jl; endof; line: 35
5    string.jl; map; line: 804
 1 string.jl; lowercase; line: 786
1    string.jl; print_to_string; line: 21
 1 string.jl; print_to_string; line: 21
  1 dict.jl; setindex!; line: 445
   1 sparse/csparse.jl; sparse; line: 67
4    utf8.jl; endof; line: 33
8    utf8.jl; endof; line: 35
1    utf8.jl; endof; line: 36
2    utf8.jl; getindex; line: 67
1    utf8.jl; getindex; line: 107
 1 utf8.jl; getindex; line: 107
  1 string.jl; ==; line: 523
   1 sparse/csparse.jl; sparse; line: 71
6    utf8.jl; isvalid; line: 95
71   utf8.jl; string; line: 138
2    utf8.jl; string; line: 139
76   utf8.jl; string; line: 140
 10 array.jl; append!; line: 464
 8  array.jl; append!; line: 469
  3 array.jl; copy!; line: 52
  5 array.jl; copy!; line: 55
   1 array.jl; unsafe_copy!; line: 42
   1 array.jl; unsafe_copy!; line: 48
 1  array.jl; append!; line: 470
14   utf8.jl; string; line: 142

@JeffBezanson
Copy link
Member

Seems likely to be Dict and hash related.

@JeffBezanson
Copy link
Member

Is the dataset available so I can try to reproduce this?

@JeffBezanson
Copy link
Member

The shootout benchmark k_nucleotide also uses Dicts, and regressed 4x within the same time window.

@JeffBezanson
Copy link
Member

Please try again. Reopen if not fixed.

@ivarne
Copy link
Member

ivarne commented May 28, 2014

Note that if you can't reopen, you can just comment and someone will reopen it for you.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
performance Must go faster regression Regression in behavior compared to a previous version
Projects
None yet
Development

No branches or pull requests

4 participants