Intel® Integrated Performance Primitives
Deliberate problems developing high-performance vision, signal, security, and storage applications.

IppsMD5State is not defined

Chi-Chang_L_
Beginner
740 Views

Hi,

I wrote a small MD5 test program as below:

-----------------------------
#include

#define BUFSIZE 1024*16

static unsigned char buf[BUFSIZE];

int main(int argc, char **argv)
{
IppsMD5State ctx;
unsigned char digest[MD5_DIGEST_LENGTH];
int data_size = 16*1024;
int i, num_iterations = 1000000;

if (argc > 1) {
data_size = atoi(argv[1]);
num_iterations = atoi(argv[2]);
}

ippsMD5Init(&ctx);
for (i = 0; i < num_iterations; i++) {
ippsMD5Update(buf, data_size, &ctx);
}
ippsMD5Final(digest, &ctx);
}
-------------------------------

However, when I compiled it, I got the error below:

# make
gcc -I/opt/intel/ipp/5.1/em64t/include md5test.c
md5test.c: In function `main':
md5test.c:10: error: storage size of 'ctx' isn't known
make: *** [md5_speed_test] Error 1

I searched all the header files under
/opt/intel/ipp/5.1/em64t/include,
and I saw ippcp.h has:

typedef struct _cpMD5 IppsMD5State;

but 'struct _cpMD5' is not defined anywhere. Did I miss something?


Thanks,

Chi-Chang Lin

0 Kudos
6 Replies
Chi-Chang_L_
Beginner
740 Views

Hi,

This is a reply to myself :-)

After reading the doc more carefully, I found that I need to use

ippsMD5GetSize(&ctx_size)

to get the context size and malloc one.

thanks,

Chi-Chang Lin

0 Kudos
Vladimir_Dudnik
Employee
740 Views

Hi Chi-Chang

yes, sometimes documentation can help:)

Please let us know your feeling regarding IPP functionality and performance. What do you find useful, what do you think is missed? What you want to be improved?

Regards,
Vladimir

0 Kudos
Chi-Chang_L_
Beginner
740 Views

Hi Vladimir,

I compared the MD5 in IPP with that in OpenSSL 0.9.8e, and I found that OpenSSL 0.9.8e has 3% advantage on a Woodcrest box. The OpenSSL MD5 implementation was from

http://etud.epita.fr/~bevand_m/papers/md5-amd64.html

Do you have more insight on this?

thanks,

Chi-Chang

0 Kudos
Vladimir_Dudnik
Employee
740 Views

Hi Chi-Chang,

What version of IPP do you use? How do you link IPP into your application, statically or dynamically? What was operation system and hardware platform you run test on? Do you get stable results? Usually, when you measure performance, results can fluctuate a bit, especially in multitasking environment, so accuracy of measurement is important.

Regards,
Vladimir

0 Kudos
Chi-Chang_L_
Beginner
740 Views
Hi Vladimir,

I used IPP 5.1

The test program was linked dynamically as this:

gcc -I/opt/intel/ipp/5.1/em64t/include md5_test.c -o md5_test -L/opt/intel/ipp/5.1/em64t/sharedlib -l ippcpem64t -l ippcoreem64t -l guide -l pthread

The OS was RHEL with kernel 2.6.18. Hw platform was Dell PowerEdge 2950 with Woodcrest core.

This was a single-tjhreaded test program (as in my first post; differnt APIs were used for OpenSSL and for IPP). Results were stable and consistent.

thanks,
Chi-Chang

0 Kudos
Vladimir_Dudnik
Employee
740 Views

Hello Chi-Chang,

our experts were able to reproduce the issue, we working on it, thanks for reporting.

Regards,
Vladimir

0 Kudos
Reply