Skip to content

Commit a993911

Browse files
authored
Update dgemv_thread_safety.cpp
1 parent c43ec53 commit a993911

File tree

1 file changed

+34
-22
lines changed

1 file changed

+34
-22
lines changed

cpp_thread_test/dgemv_thread_safety.cpp

Lines changed: 34 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,14 @@
66
#include "../cblas.h"
77
#include "cpp_thread_safety_common.h"
88

9-
void launch_cblas_dgemv(double* A, double* x, double* y, const blasint randomMatSize){
9+
void launch_cblas_dgemv(double* A, double* x, double* y, const blasint randomMatSize)
10+
{
1011
const blasint inc = 1;
1112
cblas_dgemv(CblasColMajor, CblasNoTrans, randomMatSize, randomMatSize, 1.0, A, randomMatSize, x, inc, 0.1, y, inc);
12-
}
13+
}
1314

14-
int main(int argc, char* argv[]){
15+
int main(int argc, char* argv[])
16+
{
1517
blasint randomMatSize = 1024; //dimension of the random square matrices and vectors being used
1618
uint32_t numConcurrentThreads = 52; //number of concurrent calls of the functions being tested
1719
uint32_t numTestRounds = 16; //number of testing rounds before success exit
@@ -20,20 +22,23 @@ int main(int argc, char* argv[]){
2022
if (maxHwThreads < 52)
2123
numConcurrentThreads = maxHwThreads;
2224

23-
if (argc > 4){
25+
if (argc > 4)
26+
{
2427
std::cout<<"ERROR: too many arguments for thread safety tester"<<std::endl;
2528
abort();
26-
}
27-
if(argc == 4){
29+
}
30+
if(argc == 4)
31+
{
2832
std::vector<std::string> cliArgs;
29-
for (int i = 1; i < argc; i++){
33+
for (int i = 1; i < argc; i++)
34+
{
3035
cliArgs.push_back(argv[i]);
3136
std::cout<<argv[i]<<std::endl;
32-
}
37+
}
3338
randomMatSize = std::stoul(cliArgs.at(0));
3439
numConcurrentThreads = std::stoul(cliArgs.at(1));
3540
numTestRounds = std::stoul(cliArgs.at(2));
36-
}
41+
}
3742

3843
std::uniform_real_distribution<double> rngdist{-1.0, 1.0};
3944
std::vector<std::vector<double>> matBlock(numConcurrentThreads);
@@ -56,15 +61,18 @@ int main(int argc, char* argv[]){
5661

5762
std::cout<<"Preparing to test CBLAS DGEMV thread safety\n";
5863
std::cout<<"Allocating matrices..."<<std::flush;
59-
for(uint32_t i=0; i<numConcurrentThreads; i++){
64+
for(uint32_t i=0; i<numConcurrentThreads; i++)
65+
{
6066
matBlock.at(i).resize(randomMatSize*randomMatSize);
61-
}
67+
}
6268
std::cout<<"done\n";
6369
std::cout<<"Allocating vectors..."<<std::flush;
64-
for(uint32_t i=0; i<(numConcurrentThreads*2); i++){
70+
for(uint32_t i=0; i<(numConcurrentThreads*2); i++)
71+
{
6572
vecBlock.at(i).resize(randomMatSize);
66-
}
73+
}
6774
std::cout<<"done\n";
75+
6876
//pauser();
6977

7078
std::cout<<"Filling matrices with random numbers..."<<std::flush;
@@ -77,31 +85,35 @@ int main(int argc, char* argv[]){
7785

7886
std::cout<<"Testing CBLAS DGEMV thread safety"<<std::endl;
7987
omp_set_num_threads(numConcurrentThreads);
80-
for(uint32_t R=0; R<numTestRounds; R++){
88+
for(uint32_t R=0; R<numTestRounds; R++)
89+
{
8190
std::cout<<"DGEMV round #"<<R<<std::endl;
8291
std::cout<<"Launching "<<numConcurrentThreads<<" threads simultaneously using OpenMP..."<<std::flush;
8392
#pragma omp parallel for default(none) shared(futureBlock, matBlock, vecBlock, randomMatSize, numConcurrentThreads)
84-
for(uint32_t i=0; i<numConcurrentThreads; i++){
93+
for(uint32_t i=0; i<numConcurrentThreads; i++)
94+
{
8595
futureBlock[i] = std::async(std::launch::async, launch_cblas_dgemv, &matBlock[i][0], &vecBlock[i*2][0], &vecBlock[i*2+1][0], randomMatSize);
86-
}
96+
}
8797
std::cout<<"done\n";
8898
std::cout<<"Waiting for threads to finish..."<<std::flush;
89-
for(uint32_t i=0; i<numConcurrentThreads; i++){
99+
for(uint32_t i=0; i<numConcurrentThreads; i++)
100+
{
90101
futureBlock[i].get();
91-
}
102+
}
92103
std::cout<<"done\n";
93104
std::cout<<"Comparing results from different threads..."<<std::flush;
94105
for(uint32_t i=2; i<(numConcurrentThreads*2); i+=2){ //i is the index of vector x, for a given thread
95-
for(uint32_t j = 0; j < static_cast<uint32_t>(randomMatSize); j++){
106+
for(uint32_t j = 0; j < static_cast<uint32_t>(randomMatSize); j++)
107+
{
96108
if (std::abs(vecBlock[i+1][j] - vecBlock[1][j]) > 1.0E-13){ //i+1 is the index of vector y, for a given thread
97109
std::cout<<"ERROR: one of the threads returned a different result! Index : "<<i+1<<std::endl;
98110
std::cout<<"CBLAS DGEMV thread safety test FAILED!"<<std::endl;
99111
return -1;
112+
}
100113
}
101114
}
115+
std::cout<<"OK!\n"<<std::endl;
102116
}
103-
std::cout<<"OK!\n"<<std::endl;
104-
}
105117
std::cout<<"CBLAS DGEMV thread safety test PASSED!\n"<<std::endl;
106118
return 0;
107-
}
119+
}

0 commit comments

Comments
 (0)