Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
pypocketfft
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
4
Issues
4
List
Boards
Labels
Service Desk
Milestones
Merge Requests
2
Merge Requests
2
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Martin Reinecke
pypocketfft
Commits
09e1d7c9
Commit
09e1d7c9
authored
Apr 26, 2019
by
Martin Reinecke
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
tweaks
parent
84bcc100
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
21 additions
and
29 deletions
+21
-29
pocketfft.cc
pocketfft.cc
+21
-29
No files found.
pocketfft.cc
View file @
09e1d7c9
...
...
@@ -1992,9 +1992,10 @@ class multi_iter
public:
vector
<
diminfo
>
dim
;
shape_t
pos
;
size_t
ofs_
,
len
;
int64_t
ofs_
;
size_t
len
;
int64_t
str
;
int64
_t
rem
;
size
_t
rem
;
bool
done_
;
public:
...
...
@@ -2013,7 +2014,7 @@ class multi_iter
}
void
advance
()
{
if
(
--
rem
<
=
0
)
{
done_
=
true
;
return
;
}
if
(
--
rem
=
=
0
)
{
done_
=
true
;
return
;
}
for
(
int
i
=
pos
.
size
()
-
1
;
i
>=
0
;
--
i
)
{
++
pos
[
i
];
...
...
@@ -2026,10 +2027,10 @@ class multi_iter
done_
=
true
;
}
bool
done
()
const
{
return
done_
;
}
size
_t
offset
()
const
{
return
ofs_
;
}
int64
_t
offset
()
const
{
return
ofs_
;
}
size_t
length
()
const
{
return
len
;
}
int64_t
stride
()
const
{
return
str
;
}
int64
_t
remaining
()
const
{
return
rem
;
}
size
_t
remaining
()
const
{
return
rem
;
}
};
...
...
@@ -2099,6 +2100,17 @@ template<typename T> arr<char> alloc_tmp(const shape_t &shape,
return
arr
<
char
>
(
tmpsize
*
elemsize
);
}
template
<
size_t
vlen
>
struct
multioffset
{
int64_t
ofs
[
vlen
];
multioffset
(
multi_iter
&
it
)
{
for
(
size_t
i
=
0
;
i
<
vlen
;
++
i
)
{
ofs
[
i
]
=
it
.
offset
();
it
.
advance
();
}
}
int64_t
operator
[](
size_t
i
)
const
{
return
ofs
[
i
];
}
};
template
<
typename
T
>
void
pocketfft_general_c
(
const
shape_t
&
shape
,
const
stride_t
&
stride_in
,
const
stride_t
&
stride_out
,
const
shape_t
&
axes
,
bool
forward
,
const
cmplx
<
T
>
*
data_in
,
...
...
@@ -2124,12 +2136,7 @@ template<typename T> void pocketfft_general_c(const shape_t &shape,
#ifdef HAVE_VECSUPPORT
while
(
it_in
.
remaining
()
>=
vlen
)
{
size_t
p_i
[
vlen
];
for
(
size_t
i
=
0
;
i
<
vlen
;
++
i
)
{
p_i
[
i
]
=
it_in
.
offset
();
it_in
.
advance
();
}
size_t
p_o
[
vlen
];
for
(
size_t
i
=
0
;
i
<
vlen
;
++
i
)
{
p_o
[
i
]
=
it_out
.
offset
();
it_out
.
advance
();
}
multioffset
<
vlen
>
p_i
(
it_in
),
p_o
(
it_out
);
for
(
size_t
i
=
0
;
i
<
it_in
.
length
();
++
i
)
for
(
size_t
j
=
0
;
j
<
vlen
;
++
j
)
{
...
...
@@ -2186,12 +2193,7 @@ template<typename T> void pocketfft_general_hartley(const shape_t &shape,
#ifdef HAVE_VECSUPPORT
while
(
it_in
.
remaining
()
>=
vlen
)
{
size_t
p_i
[
vlen
];
for
(
size_t
i
=
0
;
i
<
vlen
;
++
i
)
{
p_i
[
i
]
=
it_in
.
offset
();
it_in
.
advance
();
}
size_t
p_o
[
vlen
];
for
(
size_t
i
=
0
;
i
<
vlen
;
++
i
)
{
p_o
[
i
]
=
it_out
.
offset
();
it_out
.
advance
();
}
multioffset
<
vlen
>
p_i
(
it_in
),
p_o
(
it_out
);
for
(
size_t
i
=
0
;
i
<
it_in
.
length
();
++
i
)
for
(
size_t
j
=
0
;
j
<
vlen
;
++
j
)
tdatav
[
i
][
j
]
=
data_in
[
p_i
[
j
]
+
i
*
it_in
.
stride
()];
...
...
@@ -2255,12 +2257,7 @@ template<typename T> void pocketfft_general_r2c(const shape_t &shape,
#ifdef HAVE_VECSUPPORT
while
(
it_in
.
remaining
()
>=
vlen
)
{
size_t
p_i
[
vlen
];
for
(
size_t
i
=
0
;
i
<
vlen
;
++
i
)
{
p_i
[
i
]
=
it_in
.
offset
();
it_in
.
advance
();
}
size_t
p_o
[
vlen
];
for
(
size_t
i
=
0
;
i
<
vlen
;
++
i
)
{
p_o
[
i
]
=
it_out
.
offset
();
it_out
.
advance
();
}
multioffset
<
vlen
>
p_i
(
it_in
),
p_o
(
it_out
);
for
(
size_t
i
=
0
;
i
<
it_in
.
length
();
++
i
)
for
(
size_t
j
=
0
;
j
<
vlen
;
++
j
)
tdatav
[
i
][
j
]
=
data_in
[
p_i
[
j
]
+
i
*
it_in
.
stride
()];
...
...
@@ -2318,12 +2315,7 @@ template<typename T> void pocketfft_general_c2r(const shape_t &shape_out,
#ifdef HAVE_VECSUPPORT
while
(
it_in
.
remaining
()
>=
vlen
)
{
size_t
p_i
[
vlen
];
for
(
size_t
i
=
0
;
i
<
vlen
;
++
i
)
{
p_i
[
i
]
=
it_in
.
offset
();
it_in
.
advance
();
}
size_t
p_o
[
vlen
];
for
(
size_t
i
=
0
;
i
<
vlen
;
++
i
)
{
p_o
[
i
]
=
it_out
.
offset
();
it_out
.
advance
();
}
multioffset
<
vlen
>
p_i
(
it_in
),
p_o
(
it_out
);
for
(
size_t
j
=
0
;
j
<
vlen
;
++
j
)
tdatav
[
0
][
j
]
=
data_in
[
p_i
[
j
]].
r
;
size_t
i
;
...
...
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