[
https://issues.apache.org/jira/browse/PDFBOX-4877?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17133210#comment-17133210
]
Alfred commented on PDFBOX-4877:
--------------------------------
It's indeed better.
Your version executes in 1900ms, compared to my 2200ms and the original 4200ms.
And this version executes in 1500ms, probably because it skips the array
instantiation logic:
{code:java}
public Matrix multiply( Matrix other )
{
return multiply(other, new Matrix());
}
public Matrix multiply( Matrix other, Matrix result )
{
float[] c = result.single;
multiplyArrays(single, other.single, c);
if (!Float.isFinite(c[0]) || !Float.isFinite(c[1]) || !Float.isFinite(c[2])
|| !Float.isFinite(c[3]) || !Float.isFinite(c[4]) ||
!Float.isFinite(c[5])
|| !Float.isFinite(c[6]) || !Float.isFinite(c[7]) ||
!Float.isFinite(c[8]))
throw new IllegalArgumentException("Multiplying two matrices produces
illegal values");
return result;
}
{code}
And the interesting part is, the #multiply( Matrix other, Matrix result ) is
not even used in the code, it is used only in unit tests.
> Matrix class performance improvements
> -------------------------------------
>
> Key: PDFBOX-4877
> URL: https://issues.apache.org/jira/browse/PDFBOX-4877
> Project: PDFBox
> Issue Type: Improvement
> Components: Parsing, Text extraction
> Affects Versions: 2.0.20, 3.0.0 PDFBox
> Reporter: Alfred
> Assignee: Andreas Lehmkühler
> Priority: Major
> Labels: Optimization
> Attachments: PDFBOX-4877.patch
>
> Original Estimate: 1m
> Remaining Estimate: 1m
>
> I am testing text extraction from PDF and profiling the execution.
> I found that the third major time consumer is with matrix multiplicaitons.
> The Matrix class spends large amounts of time copying results to new
> instances.
> Also, the if statements are slowing down execution as they kill performance
> in modern CPUs.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]