Turn on suggestions

Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

- Intel Community
- Software Development SDKs and Libraries
- Intel® Integrated Performance Primitives
- Fastest way to mulitply 64fc by 64f (complex times scalar)

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Mute
- Printer Friendly Page

Highlighted
##

Brian_L_

Beginner

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

08-17-2017
05:39 PM

45 Views

Fastest way to mulitply 64fc by 64f (complex times scalar)

Assume I have the following:

Ipp64fVector my_all_real_vector Ipp64fcVector my_complex_vector

and I want to multiply them.

Is it faster to split complex and do 2 real multiplies and rebuild complex, or make real into complex and do complex multiplies??

Strategy 1:

ippsCplxToReal_64fc(my_complex_vector, my_real_parts, my_imag_parts); ippsMul_64f_I(my_all_real_vector, my_real_parts); ippsMul_64f_I(my_all_real_vector, my_imag_parts); ippsRealToCplx_64f(my_real_parts, my_imag_parts, my_complex_vector);

Strategy 2:

ippsRealToCplx_64f(my_all_real_vector, NULL, my_real_but_complex_vec); ippsMul_64fc_I(my_real_but_complex_vec, my_complex_vector);

I did a quick test to compare and they came out close. I expected the real multiplies to beat the complex, but maybe the overhead to repack is significant. What is the recommended best practice in this scenario? (my vector lengths ~1k to ~26k)

Thanks!

-Brian

3 Replies

Highlighted
##

Rodney_T_

Beginner

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

09-18-2017
01:12 AM

45 Views

It is a shame there is not a 64-bit implementation of ippsMul_32f32fc_I() as that appears to be what you need!

Maybe feature request it from Intel? Alternatively, is there a way you could represent your data with 32-bit precision instead?

Highlighted
##

Ivan_Z_Intel

Employee

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

11-24-2017
02:23 AM

45 Views

I think the appropriate scenario for this case is this:

ippsMul_64f_I(my_all_real_vector, (Ipp64f *)my_complex_vector, length);

ippsMul_64f_I(my_all_real_vector, (Ipp64f *)my_complex_vector + length, length);

Thanks.

Highlighted
##

Ivan_Z_Intel

Employee

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

11-24-2017
03:13 AM

45 Views

I'm sorry.

My scenario is not appropriate.

Perhaps right scenario is such:

ippsRealToCplx_64f(my_all_real_vector, my_all_real_vector,, tmp_complex_vector, length);

ippsMul_64f_I((Ipp64f *)tmp_complex_vector, (Ipp64f *)my_complex_vector, length+length);

I'm sorry once more.

Thanks.

For more complete information about compiler optimizations, see our Optimization Notice.