Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
M
mandelbrot-explorer
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Ильин Владимир Александрович
mandelbrot-explorer
Commits
86c880d4
Commit
86c880d4
authored
Feb 20, 2025
by
Ильин Владимир Александрович
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Double presicion math in mandelbrot_avx
parent
d2727d24
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
16 additions
and
16 deletions
+16
-16
mandelbrot
mandelbrot
+0
-0
mandelbrot.c
src/mandelbrot.c
+16
-16
No files found.
mandelbrot
View file @
86c880d4
No preview for this file type
src/mandelbrot.c
View file @
86c880d4
...
...
@@ -31,37 +31,37 @@
int
mandelbrot_avx
(
Complex
c
)
{
__m256
cr
=
_mm256_set1_p
s
(
c
.
real
);
__m256
ci
=
_mm256_set1_p
s
(
c
.
imag
);
__m256
cr
=
_mm256_set1_p
d
(
c
.
real
);
__m256
ci
=
_mm256_set1_p
d
(
c
.
imag
);
__m256
zr
=
cr
;
__m256
zi
=
ci
;
__m256
threshold
=
_mm256_set1_p
s
(
4
);
__m256
threshold
=
_mm256_set1_p
d
(
4
);
int
k
=
1
;
__m256
mk
=
_mm256_set1_p
s
(
k
);
__m256
one
=
_mm256_set1_p
s
(
1
);
__m256
mk
=
_mm256_set1_p
d
(
k
);
__m256
one
=
_mm256_set1_p
d
(
1
);
while
(
++
k
<
MAX_ITERATIONS
){
/* Compute z1 from z0 */
__m256
zr2
=
_mm256_mul_p
s
(
zr
,
zr
);
__m256
zi2
=
_mm256_mul_p
s
(
zi
,
zi
);
__m256
zrzi
=
_mm256_mul_p
s
(
zr
,
zi
);
__m256
zr2
=
_mm256_mul_p
d
(
zr
,
zr
);
__m256
zi2
=
_mm256_mul_p
d
(
zi
,
zi
);
__m256
zrzi
=
_mm256_mul_p
d
(
zr
,
zi
);
/* zr1 = zr0 * zr0 - zi0 * zi0 + cr */
/* zi1 = zr0 * zi0 + zr0 * zi0 + ci */
zr
=
_mm256_add_p
s
(
_mm256_sub_ps
(
zr2
,
zi2
),
cr
);
zi
=
_mm256_add_p
s
(
_mm256_add_ps
(
zrzi
,
zrzi
),
ci
);
zr
=
_mm256_add_p
d
(
_mm256_sub_pd
(
zr2
,
zi2
),
cr
);
zi
=
_mm256_add_p
d
(
_mm256_add_pd
(
zrzi
,
zrzi
),
ci
);
/* Increment k */
zr2
=
_mm256_mul_p
s
(
zr
,
zr
);
zi2
=
_mm256_mul_p
s
(
zi
,
zi
);
__m256
mag2
=
_mm256_add_p
s
(
zr2
,
zi2
);
__m256
mask
=
_mm256_cmp_p
s
(
mag2
,
threshold
,
_CMP_LT_OS
);
mk
=
_mm256_add_p
s
(
_mm256_and_ps
(
mask
,
one
),
mk
);
zr2
=
_mm256_mul_p
d
(
zr
,
zr
);
zi2
=
_mm256_mul_p
d
(
zi
,
zi
);
__m256
mag2
=
_mm256_add_p
d
(
zr2
,
zi2
);
__m256
mask
=
_mm256_cmp_p
d
(
mag2
,
threshold
,
_CMP_LT_OS
);
mk
=
_mm256_add_p
d
(
_mm256_and_pd
(
mask
,
one
),
mk
);
/* Early bailout? */
if
(
_mm256_testz_p
s
(
mask
,
_mm256_set1_ps
(
-
1
)))
if
(
_mm256_testz_p
d
(
mask
,
_mm256_set1_pd
(
-
1
)))
break
;
}
return
k
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment