1# 11/19/2020
2
3### Attending:
4
5* Cary Phillips
6* Christina Tempelaar-Lietz
7* Joseph Goldstone
8* Kimball Thurston
9* Larry Gritz
10* Nick Porcino
11* Owen Thompson
12* Peter Hillman
13
14### Discussion:
15
16* Imath PR #66: Use likely/unlikely to improve certain vector
17  ops.
18
19  * This applies the builtin_expect to if statements to assist with
20    optimization. This is the result of engineers at Intel going over
21    things with a fine-tooth comb.
22
23  * The general rule is that the directive is appropriate when you’re
24    detecting an error that is truly exceptional.
25
26  * Does MSVC have the same feature? Maybe, someone should check. But
27    at least now all we have to do is extend the macro.
28
29  * #66 also includes a change to a line to invoke std::abs(),
30    technically shouldn't go in the same PR, but fine as is.
31
32* Imath #65 Deprecate Math<T> in favor of std::
33
34  * In the name of portability, std:: is better.
35
36  * Kimball: There are some cases where I didn’t want to call the std
37    version because it does extra error checking. But you can tell the
38    compiler to use the unsafe function
39
40  * Should we get rid of the Math<T> class entirely? This PR removes all uses of the class but leaves it in the code.
41
42  * Nick: Every line that goes is less debt.
43
44  * Kimball: IlmThread in OpenEXR has the deprecation stiff, for mutex and lock.
45
46  * Larry will port that over to this class.
47
48* #60 Make Matrix implementation more SIMD friendly
49
50  * Unrolled assignments are faster than memset/memcpy.
51
52  * These came about by an attempt to autofectorize the code.
53
54  * Also included: a fix to Matrix33::setScale(), which attempted to
55    mimic Matrix44::setScale() by not affecting the final row, which
56    for M44 is the translation. But that doesn't ake sense for a 3x3
57    matrix. Nick wrote the original code at ILM years ago, an
58    abandoned effort. All agree to regard the current behavior as a
59    bug and fix it to conform to the most logical behavior and affect
60    all rows.
61
62* Imath #59 Hide Vec and Matrix exceptions from Cuda
63
64  * This PR #ifdef's out the throw calls under CUDA.
65
66  * Would it be better to #ifdef out the entire function?
67
68  * Or alternatively, remove the HOST_DEVICE decorator, which will
69    prevent them from bei ng compiled under CUDA altogether.
70
71  * Nick: A little churn in CUDA code doesn’t set off alarm bells,
72    it’s expected to be a bit volitile, so this shouldn't cause a
73    problem.
74
75  * One gotcha: M44::inverse(bool singExc) if invoked explicitly via
76    inverse(false). But the argument-less version is available.
77
78# Imath PR #58 Make separate test calls for each test
79
80  * Not sure why the CLA test failed. Cary will fix it and merge.
81
82* openexr PR #865: Add a conditional to prevent analysis on forks
83
84  * Larry: GitHub says they’re disabling actions on all forks, which
85    should address this.
86
87  * Kimball: this was the suggested fix, although it wasn't the most
88    thorough of investigations.
89
90* openexr PR #862 E2K: added initial support of MCST Elbrus 2000 CPU architecture
91
92  * Elbrus 2000 is a Russian supercomputer. It has all the same
93    registers, but not the same assembly syntax.
94
95  * Nick: I was hoping that the directives could be specified at cmake
96    time. The code in question is a part of highly nested bits at
97    compile-time. Can those pathways be selected at cmake time?  I
98    couldn’t tell.
99
100  * It’s only used in the test of the DWA compressor.
101
102  * It's minimal extra debt, so fine to accept, subject to the CLA.
103
104* Larry: We haven’t yet marked things as noexcept.
105
106  * Ideally, we do it across the board everywhere that's
107    applicable. Comprehensive.
108
109  * Certainly, in the cases of dual functions, it helps with
110    documentation.
111
112  * The compiler ought to be able to tell you if a function throws,
113    but it doesn't.
114
115  * In C++21(?) noexcept becomes a part of the name of the function,
116    so it would be an ABI break.
117
118  * Larry will pick something and do it, then that can be used as an
119    example.
120
121* Larry: OIIO builds and supports OpenEXR back to version 2.x.
122
123  * Every downstream project is going to need to change. At source and build.
124
125  * Nick: USD ws doing detection on OpenEXR version, to fix dependency
126    on OIIO.
127
128  * Larry will write up a short guide for how downstream projects will
129    need to adjust to 3.0
130