Skip to content
Snippets Groups Projects
Commit 375aaa9b authored by nashimus's avatar nashimus
Browse files

perf: improve matrix determinant

Using the rule of Sarrus for 3x3 matrices decreased processing time of
demo_raycast by 60.75%, when rendering 7680x4320 on 16 threads, x86_64.

With rule of Sarrus:	11.780
Without:		30.016
parent b75556df
No related branches found
No related tags found
No related merge requests found
......@@ -193,6 +193,16 @@ float cray_matrix_determinant(const struct Matrix *a){
float result = 0;
if(a->rows == 2 && a->columns == 2){
result = (a->value[0][0] * a->value[1][1]) - (a->value[0][1] * a->value[1][0]);
} else if(a->rows == 3 && a->columns == 3){
// rule of Sarrus (3x3 only) https://en.wikipedia.org/wiki/Rule_of_Sarrus
result = (
a->value[0][0] * a->value[1][1] * a->value[2][2] // +aei
+ a->value[1][0] * a->value[2][1] * a->value[0][2] // +dhc
+ a->value[2][0] * a->value[0][1] * a->value[1][2] // +gbf
- a->value[2][0] * a->value[1][1] * a->value[0][2] // -gec
- a->value[0][0] * a->value[2][1] * a->value[1][2] // -ahf
- a->value[1][0] * a->value[0][1] * a->value[2][2] // -dbi
);
} else {
int row = 0;
for(int col=0;col<a->columns;col++){
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment