Improve benchmark program

Supports command line choosing of algorithms to benchmark.
Display benchmarks in powers of 10 (1000, 1000*1000) instead of
powers of 2 (1024, 1024*1024).
This commit is contained in:
Sean Parkinson
2017-12-08 13:33:58 +10:00
parent 4c4b02bb31
commit 2954b67f96

View File

@ -123,6 +123,177 @@
#include <wolfssl/wolfcrypt/async.h>
#endif
/* Bit values for each algorithm that is able to be benchmarked.
* Common grouping of algorithms also.
* Each algorithm has a unique value for its type e.g. cipher.
*/
/* Cipher algorithms. */
#define BENCH_AES_CBC 0x00000001
#define BENCH_AES_GCM 0x00000002
#define BENCH_AES_ECB 0x00000004
#define BENCH_AES_XTS 0x00000008
#define BENCH_AES_CTR 0x00000010
#define BENCH_AES_CCM 0x00000020
#define BENCH_CAMELLIA 0x00000100
#define BENCH_ARC4 0x00000200
#define BENCH_HC128 0x00000400
#define BENCH_RABBIT 0x00000800
#define BENCH_CHACHA20 0x00001000
#define BENCH_CHACHA20_POLY1305 0x00002000
#define BENCH_DES 0x00004000
#define BENCH_IDEA 0x00008000
/* Digest algorithms. */
#define BENCH_MD5 0x00000001
#define BENCH_POLY1305 0x00000002
#define BENCH_SHA 0x00000004
#define BENCH_SHA224 0x00000010
#define BENCH_SHA256 0x00000020
#define BENCH_SHA384 0x00000040
#define BENCH_SHA512 0x00000080
#define BENCH_SHA2 (BENCH_SHA224 | BENCH_SHA256 | \
BENCH_SHA384 | BENCH_SHA512)
#define BENCH_SHA3_224 0x00000100
#define BENCH_SHA3_256 0x00000200
#define BENCH_SHA3_384 0x00000400
#define BENCH_SHA3_512 0x00000800
#define BENCH_SHA3 (BENCH_SHA3_224 | BENCH_SHA3_256 | \
BENCH_SHA3_384 | BENCH_SHA3_512)
#define BENCH_RIPEMD 0x00001000
#define BENCH_BLAKE2 0x00002000
/* MAC algorithms. */
#define BENCH_CMAC 0x00000001
#define BENCH_HMAC_MD5 0x00000002
#define BENCH_HMAC_SHA 0x00000004
#define BENCH_HMAC_SHA224 0x00000010
#define BENCH_HMAC_SHA256 0x00000020
#define BENCH_HMAC_SHA384 0x00000040
#define BENCH_HMAC_SHA512 0x00000080
/* Asymmetric algorithms. */
#define BENCH_RSA_KEYGEN 0x00000001
#define BENCH_RSA 0x00000002
#define BENCH_DH 0x00000010
#define BENCH_NTRU 0x00000100
#define BENCH_NTRU_KEYGEN 0x00000200
#define BENCH_ECC_MAKEKEY 0x00001000
#define BENCH_ECC 0x00002000
#define BENCH_ECC_ENCRYPT 0x00004000
#define BENCH_CURVE25519_KEYGEN 0x00010000
#define BENCH_CURVE25519_KA 0x00020000
#define BENCH_ED25519_KEYGEN 0x00040000
#define BENCH_ED25519_SIGN 0x00080000
/* Other */
#define BENCH_RNG 0x00000001
#define BENCH_SCRYPT 0x00000002
/* Benchmark all compiled in algorithms.
* When 1, ignore other benchmark algorithm values.
* 0, only benchmark algorithm values set.
*/
static int bench_all = 1;
/* Cipher algorithms to benchmark. */
static int bench_cipher_algs = 0;
/* Digest algorithms to benchmark. */
static int bench_digest_algs = 0;
/* MAC algorithms to benchmark. */
static int bench_mac_algs = 0;
/* Asymmetric algorithms to benchmark. */
static int bench_asym_algs = 0;
/* Other cryptographic algorithms to benchmark. */
static int bench_other_algs = 0;
#ifndef WOLFSSL_BENCHMARK_ALL
/* The mapping of command line option to bit values. */
typedef struct bench_alg {
/* Command line option string. */
const char* str;
/* Bit values to set. */
int val;
} bench_alg;
/* All recoginized cipher algorithm choosing command line options. */
static bench_alg bench_cipher_opt[] = {
{ "-aes_cbc", BENCH_AES_CBC },
{ "-aes_gcm", BENCH_AES_GCM },
{ "-aes_ecb", BENCH_AES_ECB },
{ "-aes_xts", BENCH_AES_XTS },
{ "-aes_ctr", BENCH_AES_CTR },
{ "-aes_ccm", BENCH_AES_CCM },
{ "-camellia", BENCH_CAMELLIA },
{ "-arc4", BENCH_ARC4 },
{ "-hc128", BENCH_HC128 },
{ "-rabbit", BENCH_RABBIT },
{ "-chacha20", BENCH_CHACHA20 },
{ "-chacha20_poly1305", BENCH_CHACHA20_POLY1305 },
{ "-des", BENCH_DES },
{ "-idea", BENCH_IDEA },
{ "-cipher", -1 },
{ NULL, 0}
};
/* All recoginized digest algorithm choosing command line options. */
static bench_alg bench_digest_opt[] = {
{ "-md5", BENCH_MD5 },
{ "-poly1305", BENCH_POLY1305 },
{ "-sha", BENCH_SHA },
{ "-sha224", BENCH_SHA224 },
{ "-sha256", BENCH_SHA256 },
{ "-sha384", BENCH_SHA384 },
{ "-sha512", BENCH_SHA512 },
{ "-sha2", BENCH_SHA2 },
{ "-sha3_224", BENCH_SHA3_224 },
{ "-sha3_256", BENCH_SHA3_256 },
{ "-sha3_384", BENCH_SHA3_384 },
{ "-sha3_512", BENCH_SHA3_512 },
{ "-sha3", BENCH_SHA3 },
{ "-ripemd", BENCH_RIPEMD },
{ "-blake2", BENCH_BLAKE2 },
{ "-digest", -1 },
{ NULL, 0}
};
/* All recoginized MAC algorithm choosing command line options. */
static bench_alg bench_mac_opt[] = {
{ "-cmac", BENCH_CMAC },
{ "-hmac_md5", BENCH_HMAC_MD5 },
{ "-hmac_sha", BENCH_HMAC_SHA },
{ "-hmac_sha224", BENCH_HMAC_SHA224 },
{ "-hmac_sha256", BENCH_HMAC_SHA256 },
{ "-hmac_sha384", BENCH_HMAC_SHA384 },
{ "-hmac_sha512", BENCH_HMAC_SHA512 },
{ "-mac", -1 },
{ NULL, 0}
};
/* All recoginized asymmetric algorithm choosing command line options. */
static bench_alg bench_asym_opt[] = {
{ "-rsa_kg", BENCH_RSA_KEYGEN },
{ "-rsa", BENCH_RSA },
{ "-dh", BENCH_DH },
{ "-ntru", BENCH_NTRU },
{ "-ntru_kg", BENCH_NTRU_KEYGEN },
{ "-ecc_kg", BENCH_ECC_MAKEKEY },
{ "-ecc", BENCH_ECC },
{ "-ecc_enc", BENCH_ECC_ENCRYPT },
{ "-curve25519_kg", BENCH_CURVE25519_KEYGEN },
{ "-x25519", BENCH_CURVE25519_KA },
{ "-ed25519_kg", BENCH_ED25519_KEYGEN },
{ "-ed25519", BENCH_ED25519_SIGN },
{ "-asym", -1 },
{ NULL, 0}
};
/* All recoginized other cryptographic algorithm choosing command line options.
*/
static bench_alg bench_other_opt[] = {
{ "-rng", BENCH_RNG },
{ "-scrypt", BENCH_SCRYPT },
{ "-other", -1 },
{ NULL, 0}
};
#endif
#ifdef HAVE_WNR
const char* wnrConfigFile = "wnr-example.conf";
#endif
@ -407,6 +578,7 @@ static THREAD_LS_T int devId = INVALID_DEVID;
};
static word32 bench_size = (1024*1024ul);
#endif
static int base2 = 1;
/* for compatibility */
#define BENCH_SIZE bench_size
@ -581,6 +753,7 @@ static void bench_stats_sym_finish(const char* desc, int doAsync, int count,
/* calculate actual bytes */
blocks *= countSz;
if (base2) {
/* determine if we should show as KB or MB */
if (blocks > (1024 * 1024)) {
blocks /= (1024 * 1024);
@ -593,6 +766,21 @@ static void bench_stats_sym_finish(const char* desc, int doAsync, int count,
else {
blockType = "bytes";
}
}
else {
/* determine if we should show as kB or mB */
if (blocks > (1000 * 1000)) {
blocks /= (1000 * 1000);
blockType = "mB";
}
else if (blocks > 1000) {
blocks /= 1000; /* make kB */
blockType = "kB";
}
else {
blockType = "bytes";
}
}
/* caclulcate blocks per second */
if (total > 0) {
@ -631,7 +819,7 @@ static void bench_stats_asym_finish(const char* algo, int strength,
opsSec = count / total; /* ops second */
milliEach = each * 1000; /* milliseconds */
printf("%-5s %4d %-9s %s %6d ops took %5.3f sec, avg %5.3f ms,"
printf("%-6s %5d %-9s %s %6d ops took %5.3f sec, avg %5.3f ms,"
" %.3f ops/sec\n", algo, strength, desc, BENCH_ASYNC_GET_NAME(doAsync),
count, total, milliEach, opsSec);
@ -747,231 +935,289 @@ static void* benchmarks_do(void* args)
#endif
#ifndef WC_NO_RNG
if (bench_all || (bench_other_algs & BENCH_RNG))
bench_rng();
#endif /* WC_NO_RNG */
#ifndef NO_AES
#ifdef HAVE_AES_CBC
if (bench_all || (bench_cipher_algs & BENCH_AES_CBC)) {
#ifndef NO_SW_BENCH
bench_aescbc(0);
#endif
#if defined(WOLFSSL_ASYNC_CRYPT) && defined(WC_ASYNC_ENABLE_AES)
bench_aescbc(1);
#endif
}
#endif
#ifdef HAVE_AESGCM
if (bench_all || (bench_cipher_algs & BENCH_AES_GCM)) {
#ifndef NO_SW_BENCH
bench_aesgcm(0);
#endif
#if defined(WOLFSSL_ASYNC_CRYPT) && defined(WC_ASYNC_ENABLE_AES)
bench_aesgcm(1);
#endif
}
#endif
#ifdef WOLFSSL_AES_DIRECT
if (bench_all || (bench_cipher_algs & BENCH_AES_ECB)) {
#ifndef NO_SW_BENCH
bench_aesecb(0);
#endif
#if defined(WOLFSSL_ASYNC_CRYPT) && defined(WC_ASYNC_ENABLE_AES)
bench_aesecb(1);
#endif
}
#endif
#ifdef WOLFSSL_AES_XTS
if (bench_all || (bench_cipher_algs & BENCH_AES_XTS))
bench_aesxts();
#endif
#ifdef WOLFSSL_AES_COUNTER
if (bench_all || (bench_cipher_algs & BENCH_AES_CTR))
bench_aesctr();
#endif
#ifdef HAVE_AESCCM
if (bench_all || (bench_cipher_algs & BENCH_AES_CCM))
bench_aesccm();
#endif
#endif /* !NO_AES */
#ifdef HAVE_CAMELLIA
if (bench_all || (bench_cipher_algs & BENCH_CAMELLIA))
bench_camellia();
#endif
#ifndef NO_RC4
if (bench_all || (bench_cipher_algs & BENCH_ARC4)) {
#ifndef NO_SW_BENCH
bench_arc4(0);
#endif
#if defined(WOLFSSL_ASYNC_CRYPT) && defined(WC_ASYNC_ENABLE_ARC4)
bench_arc4(1);
#endif
}
#endif
#ifdef HAVE_HC128
if (bench_all || (bench_cipher_algs & BENCH_HC128))
bench_hc128();
#endif
#ifndef NO_RABBIT
if (bench_all || (bench_cipher_algs & BENCH_RABBIT))
bench_rabbit();
#endif
#ifdef HAVE_CHACHA
if (bench_all || (bench_cipher_algs & BENCH_CHACHA20))
bench_chacha();
#endif
#if defined(HAVE_CHACHA) && defined(HAVE_POLY1305)
if (bench_all || (bench_cipher_algs & BENCH_CHACHA20_POLY1305))
bench_chacha20_poly1305_aead();
#endif
#ifndef NO_DES3
if (bench_all || (bench_cipher_algs & BENCH_DES)) {
#ifndef NO_SW_BENCH
bench_des(0);
#endif
#if defined(WOLFSSL_ASYNC_CRYPT) && defined(WC_ASYNC_ENABLE_3DES)
bench_des(1);
#endif
}
#endif
#ifdef HAVE_IDEA
if (bench_all || (bench_cipher_algs & BENCH_IDEA))
bench_idea();
#endif
#ifndef NO_MD5
if (bench_all || (bench_digest_algs & BENCH_MD5)) {
#ifndef NO_SW_BENCH
bench_md5(0);
#endif
#if defined(WOLFSSL_ASYNC_CRYPT) && defined(WC_ASYNC_ENABLE_MD5)
bench_md5(1);
#endif
}
#endif
#ifdef HAVE_POLY1305
if (bench_all || (bench_digest_algs & BENCH_POLY1305))
bench_poly1305();
#endif
#ifndef NO_SHA
if (bench_all || (bench_digest_algs & BENCH_SHA)) {
#ifndef NO_SW_BENCH
bench_sha(0);
#endif
#if defined(WOLFSSL_ASYNC_CRYPT) && defined(WC_ASYNC_ENABLE_SHA)
bench_sha(1);
#endif
}
#endif
#ifdef WOLFSSL_SHA224
if (bench_all || (bench_digest_algs & BENCH_SHA224)) {
#ifndef NO_SW_BENCH
bench_sha224(0);
#endif
#if defined(WOLFSSL_ASYNC_CRYPT) && defined(WC_ASYNC_ENABLE_SHA224)
bench_sha224(1);
#endif
}
#endif
#ifndef NO_SHA256
if (bench_all || (bench_digest_algs & BENCH_SHA256)) {
#ifndef NO_SW_BENCH
bench_sha256(0);
#endif
#if defined(WOLFSSL_ASYNC_CRYPT) && defined(WC_ASYNC_ENABLE_SHA256)
bench_sha256(1);
#endif
}
#endif
#ifdef WOLFSSL_SHA384
if (bench_all || (bench_digest_algs & BENCH_SHA384)) {
#ifndef NO_SW_BENCH
bench_sha384(0);
#endif
#if defined(WOLFSSL_ASYNC_CRYPT) && defined(WC_ASYNC_ENABLE_SHA384)
bench_sha384(1);
#endif
}
#endif
#ifdef WOLFSSL_SHA512
if (bench_all || (bench_digest_algs & BENCH_SHA512)) {
#ifndef NO_SW_BENCH
bench_sha512(0);
#endif
#if defined(WOLFSSL_ASYNC_CRYPT) && defined(WC_ASYNC_ENABLE_SHA512)
bench_sha512(1);
#endif
}
#endif
#ifdef WOLFSSL_SHA3
#ifndef WOLFSSL_NOSHA3_224
if (bench_all || (bench_digest_algs & BENCH_SHA3_224)) {
#ifndef NO_SW_BENCH
bench_sha3_224(0);
#endif
#if defined(WOLFSSL_ASYNC_CRYPT) && defined(WC_ASYNC_ENABLE_SHA3)
bench_sha3_224(1);
#endif
}
#endif /* WOLFSSL_NOSHA3_224 */
#ifndef WOLFSSL_NOSHA3_256
if (bench_all || (bench_digest_algs & BENCH_SHA3_256)) {
#ifndef NO_SW_BENCH
bench_sha3_256(0);
#endif
#if defined(WOLFSSL_ASYNC_CRYPT) && defined(WC_ASYNC_ENABLE_SHA3)
bench_sha3_256(1);
#endif
}
#endif /* WOLFSSL_NOSHA3_256 */
#ifndef WOLFSSL_NOSHA3_384
if (bench_all || (bench_digest_algs & BENCH_SHA3_384)) {
#ifndef NO_SW_BENCH
bench_sha3_384(0);
#endif
#if defined(WOLFSSL_ASYNC_CRYPT) && defined(WC_ASYNC_ENABLE_SHA3)
bench_sha3_384(1);
#endif
}
#endif /* WOLFSSL_NOSHA3_384 */
#ifndef WOLFSSL_NOSHA3_512
if (bench_all || (bench_digest_algs & BENCH_SHA3_512)) {
#ifndef NO_SW_BENCH
bench_sha3_512(0);
#endif
#if defined(WOLFSSL_ASYNC_CRYPT) && defined(WC_ASYNC_ENABLE_SHA512)
bench_sha3_512(1);
#endif
}
#endif /* WOLFSSL_NOSHA3_512 */
#endif
#ifdef WOLFSSL_RIPEMD
if (bench_all || (bench_digest_algs & BENCH_RIPEMD))
bench_ripemd();
#endif
#ifdef HAVE_BLAKE2
if (bench_all || (bench_digest_algs & BENCH_BLAKE2))
bench_blake2();
#endif
#ifdef WOLFSSL_CMAC
if (bench_all || (bench_mac_algs & BENCH_CMAC))
bench_cmac();
#endif
#ifndef NO_HMAC
#ifndef NO_MD5
if (bench_all || (bench_mac_algs & BENCH_HMAC_MD5)) {
#ifndef NO_SW_BENCH
bench_hmac_md5(0);
#endif
#if defined(WOLFSSL_ASYNC_CRYPT) && defined(WC_ASYNC_ENABLE_HMAC)
bench_hmac_md5(1);
#endif
}
#endif
#ifndef NO_SHA
if (bench_all || (bench_mac_algs & BENCH_HMAC_SHA)) {
#ifndef NO_SW_BENCH
bench_hmac_sha(0);
#endif
#if defined(WOLFSSL_ASYNC_CRYPT) && defined(WC_ASYNC_ENABLE_SHA)
bench_hmac_sha(1);
#endif
}
#endif
#ifdef WOLFSSL_SHA224
if (bench_all || (bench_mac_algs & BENCH_HMAC_SHA224)) {
#ifndef NO_SW_BENCH
bench_hmac_sha224(0);
#endif
#if defined(WOLFSSL_ASYNC_CRYPT) && defined(WC_ASYNC_ENABLE_SHA224)
bench_hmac_sha224(1);
#endif
}
#endif
#ifndef NO_SHA256
if (bench_all || (bench_mac_algs & BENCH_HMAC_SHA256)) {
#ifndef NO_SW_BENCH
bench_hmac_sha256(0);
#endif
#if defined(WOLFSSL_ASYNC_CRYPT) && defined(WC_ASYNC_ENABLE_SHA256)
bench_hmac_sha256(1);
#endif
}
#endif
#ifdef WOLFSSL_SHA384
if (bench_all || (bench_mac_algs & BENCH_HMAC_SHA384)) {
#ifndef NO_SW_BENCH
bench_hmac_sha384(0);
#endif
#if defined(WOLFSSL_ASYNC_CRYPT) && defined(WC_ASYNC_ENABLE_SHA384)
bench_hmac_sha384(1);
#endif
}
#endif
#ifdef WOLFSSL_SHA512
if (bench_all || (bench_mac_algs & BENCH_HMAC_SHA512)) {
#ifndef NO_SW_BENCH
bench_hmac_sha512(0);
#endif
#if defined(WOLFSSL_ASYNC_CRYPT) && defined(WC_ASYNC_ENABLE_SHA512)
bench_hmac_sha512(1);
#endif
}
#endif
#endif /* NO_HMAC */
#ifdef HAVE_SCRYPT
if (bench_all || (bench_other_algs & BENCH_SCRYPT))
bench_scrypt();
#endif
#ifndef NO_RSA
#ifdef WOLFSSL_KEY_GEN
if (bench_all || (bench_asym_algs & BENCH_RSA_KEYGEN)) {
#ifndef NO_SW_BENCH
bench_rsaKeyGen(0);
#endif
@ -981,30 +1227,38 @@ static void* benchmarks_do(void* args)
bench_rsaKeyGen(1);
#endif
#endif
}
#endif
if (bench_all || (bench_asym_algs & BENCH_RSA)) {
#ifndef NO_SW_BENCH
bench_rsa(0);
#endif
#if defined(WOLFSSL_ASYNC_CRYPT) && defined(WC_ASYNC_ENABLE_RSA)
bench_rsa(1);
#endif
}
#endif
#ifndef NO_DH
if (bench_all || (bench_asym_algs & BENCH_DH)) {
#ifndef NO_SW_BENCH
bench_dh(0);
#endif
#if defined(WOLFSSL_ASYNC_CRYPT) && defined(WC_ASYNC_ENABLE_DH)
bench_dh(1);
#endif
}
#endif
#ifdef HAVE_NTRU
if (bench_all || (bench_asym_algs & BENCH_NTRU))
bench_ntru();
if (bench_all || (bench_asym_algs & BENCH_NTRU_KEYGEN))
bench_ntruKeyGen();
#endif
#ifdef HAVE_ECC
if (bench_all || (bench_asym_algs & BENCH_ECC_MAKEKEY)) {
#ifndef NO_SW_BENCH
bench_eccMakeKey(0);
#endif
@ -1014,26 +1268,34 @@ static void* benchmarks_do(void* args)
bench_eccMakeKey(1);
#endif
#endif
}
if (bench_all || (bench_asym_algs & BENCH_ECC)) {
#ifndef NO_SW_BENCH
bench_ecc(0);
#endif
#if defined(WOLFSSL_ASYNC_CRYPT) && defined(WC_ASYNC_ENABLE_ECC)
bench_ecc(1);
#endif
}
#ifdef HAVE_ECC_ENCRYPT
if (bench_all || (bench_asym_algs & BENCH_ECC_ENCRYPT))
bench_eccEncrypt();
#endif
#endif
#ifdef HAVE_CURVE25519
if (bench_all || (bench_asym_algs & BENCH_CURVE25519_KEYGEN))
bench_curve25519KeyGen();
#ifdef HAVE_CURVE25519_SHARED_SECRET
if (bench_all || (bench_asym_algs & BENCH_CURVE25519_KA))
bench_curve25519KeyAgree();
#endif
#endif
#ifdef HAVE_ED25519
if (bench_all || (bench_asym_algs & BENCH_ED25519_KEYGEN))
bench_ed25519KeyGen();
if (bench_all || (bench_asym_algs & BENCH_ED25519_SIGN))
bench_ed25519KeySign();
#endif
@ -2756,7 +3018,7 @@ void bench_scrypt(void)
count += i;
} while (bench_stats_sym_check(start));
exit:
bench_stats_asym_finish("scrypt", 0, "", 0, count, start, ret);
bench_stats_asym_finish("scrypt", 17, "", 0, count, start, ret);
}
#endif /* HAVE_SCRYPT */
@ -4146,11 +4408,71 @@ void benchmark_configure(int block_size)
int main(int argc, char** argv)
{
int ret = 0;
int optMatched;
#ifndef WOLFSSL_BENCHMARK_ALL
int i;
#endif
if (argc > 1) {
while (argc > 1) {
if (strcmp(argv[1], "-base10") == 0)
base2 = 0;
else if (argv[1][0] == '-') {
optMatched = 0;
#ifndef WOLFSSL_BENCHMARK_ALL
/* Check known algorithm choosing command line options. */
/* Known cipher algorithms */
for (i=0; !optMatched && bench_cipher_opt[i].str != NULL; i++) {
if (strcmp(argv[1], bench_cipher_opt[i].str) == 0) {
bench_cipher_algs |= bench_cipher_opt[i].val;
bench_all = 0;
optMatched = 1;
}
}
/* Known digest algorithms */
for (i=0; !optMatched && bench_digest_opt[i].str != NULL; i++) {
if (strcmp(argv[1], bench_digest_opt[i].str) == 0) {
bench_digest_algs |= bench_digest_opt[i].val;
bench_all = 0;
optMatched = 1;
}
}
/* Known MAC algorithms */
for (i=0; !optMatched && bench_mac_opt[i].str != NULL; i++) {
if (strcmp(argv[1], bench_mac_opt[i].str) == 0) {
bench_mac_algs |= bench_mac_opt[i].val;
bench_all = 0;
optMatched = 1;
}
}
/* Known asymmetric algorithms */
for (i=0; !optMatched && bench_asym_opt[i].str != NULL; i++) {
if (strcmp(argv[1], bench_asym_opt[i].str) == 0) {
bench_asym_algs |= bench_asym_opt[i].val;
bench_all = 0;
optMatched = 1;
}
}
/* Other known cryptographic algorithms */
for (i=0; !optMatched && bench_other_opt[i].str != NULL; i++) {
if (strcmp(argv[1], bench_other_opt[i].str) == 0) {
bench_other_algs |= bench_other_opt[i].val;
bench_all = 0;
optMatched = 1;
}
}
#endif
if (!optMatched) {
printf("Option not recognized: %s\n", argv[1]);
return 1;
}
}
else {
/* parse for block size */
benchmark_configure(atoi(argv[1]));
}
argc--;
argv++;
}
#ifdef HAVE_STACK_SIZE
ret = StackSizeCheck(NULL, benchmark_test);