1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
#!/usr/bin/perl -w
#==========================================================================
# vvadd_gendata.pl
#
# Author : Christopher Batten (cbatten@mit.edu)
# Date : April 29, 2005
#
(our $usageMsg = <<'ENDMSG') =~ s/^\#//gm;
#
# Simple script which creates an input data set and the reference data
# for the vvadd benchmark.
#
ENDMSG
use strict "vars";
use warnings;
no warnings("once");
use Getopt::Long;
#--------------------------------------------------------------------------
# Command line processing
#--------------------------------------------------------------------------
our %opts;
sub usage()
{
print "\n";
print " Usage: vvadd_gendata.pl [options] \n";
print "\n";
print " Options:\n";
print " --help print this message\n";
print " --size size of input data [1000]\n";
print " --seed random seed [1]\n";
print "$usageMsg";
exit();
}
sub processCommandLine()
{
$opts{"help"} = 0;
$opts{"size"} = 1000;
$opts{"seed"} = 1;
Getopt::Long::GetOptions( \%opts, 'help|?', 'size:i', 'seed:i' ) or usage();
$opts{"help"} and usage();
}
#--------------------------------------------------------------------------
# Helper Functions
#--------------------------------------------------------------------------
sub printArray
{
my $arrayName = $_[0];
my $arrayRefReal = $_[1];
my $arrayRefImag = $_[2];
my $numCols = 20;
my $arrayLen = scalar(@{$arrayRefReal});
print "struct Complex ".$arrayName."[DATA_SIZE] = \n";
print "{\n";
print " ";
for ( my $i = 0; $i < $arrayLen; $i++ ) {
print sprintf("{%3.2f, %3.2f}",$arrayRefReal->[$i], $arrayRefImag->[$i]);
if ( $i != $arrayLen-1 ) {
print ",\n ";
}
}
print "\n};\n\n";
}
#--------------------------------------------------------------------------
# Main
#--------------------------------------------------------------------------
sub main()
{
processCommandLine();
srand($opts{"seed"});
my @values_real1;
my @values_imag1;
my @values_real2;
my @values_imag2;
my @product_real;
my @product_imag;
for ( my $i = 0; $i < $opts{"size"}; $i++ ) {
my $value_real1 = (rand(9.0));
my $value_imag1 = (rand(9.0));
my $value_real2 = (rand(9.0));
my $value_imag2 = (rand(9.0));
push( @values_real1, $value_real1 );
push( @values_imag1, $value_imag1 );
push( @values_real2, $value_real2 );
push( @values_imag2, $value_imag2 );
push( @product_real, ($value_real1 * $value_real2) - ($value_imag1 * $value_imag2));
push( @product_imag, ($value_imag1 * $value_real2) + ($value_real1 * $value_imag2));
}
print "\n\#define DATA_SIZE ".$opts{"size"}." \n\n";
printArray( "input1_data", \@values_real1, \@values_imag1 );
printArray( "input2_data", \@values_real2, \@values_imag2 );
printArray( "verify_data", \@product_real, \@product_imag );
}
main();
|