在CUDA下如何改进这个功能?
我可以在CUDA
下改进以下功能吗?
该函数的作用是,
给定 min
和 max
、ELM1
和 ELM
,检查是否有任意三个数字数组 ans[6]
位于数组 D1
中从 min
到 max
的任意行中,D2
、D3
、D4
、D5
、D6
,如果找到则返回 1。
我尝试过使用循环
,OR
-ing,AND
-ing,用标志等替换goto
。但这似乎是最快的方法。
__device__ bool THREEA(unsigned int n0, unsigned int n,unsigned int* ST1,unsigned int* D1, unsigned int* D2,unsigned int* D3,unsigned int* D4,unsigned int* D5,unsigned int* D6,unsigned int* ans)
{
unsigned int ELM, ELM1,flag;
ELM = ST1[n0]+n; //local.37
ELM1 = n; //local.33
while (ELM1 < ELM)
{
flag = 0;
if (D1[ELM1] == ans[0])
{
flag++;
}
if (D2[ELM1] == ans[0])
{
flag++;
}
if (D3[ELM1] == ans[0])
{
flag++;
}
if (D4[ELM1] == ans[0])
{
flag++;
}
if (D5[ELM1] == ans[0])
{
flag++;
}
if (D6[ELM1] == ans[0])
{
flag++;
}
if (flag != 1)
goto onethreefour;
if (D1[ELM1] == ans[1])
{
flag++;
}
if (D2[ELM1] == ans[1])
{
flag++;
}
if (D3[ELM1] == ans[1])
{
flag++;
}
if (D4[ELM1] == ans[1])
{
flag++;
}
if (D5[ELM1] == ans[1])
{
flag++;
}
if (D6[ELM1] == ans[1])
{
flag++;
}
if (flag != 2)
goto onethreefour;
if (D1[ELM1] == ans[2])
{
return 1;
}
if (D2[ELM1] == ans[2])
{
return 1;
}
if (D3[ELM1] == ans[2])
{
return 1;
}
if (D4[ELM1] == ans[2])
{
return 1;
}
if (D5[ELM1] == ans[2])
{
return 1;
}
if (D6[ELM1] == ans[2])
{
return 1;
}
if (D1[ELM1] == ans[3])
{
return 1;
}
if (D2[ELM1] == ans[3])
{
return 1;
}
if (D3[ELM1] == ans[3])
{
return 1;
}
if (D4[ELM1] == ans[3])
{
return 1;
}
if (D5[ELM1] == ans[3])
{
return 1;
}
if (D6[ELM1] == ans[3])
{
return 1;
}
if (D1[ELM1] == ans[4])
{
return 1;
}
if (D2[ELM1] == ans[4])
{
return 1;
}
if (D3[ELM1] == ans[4])
{
return 1;
}
if (D4[ELM1] == ans[4])
{
return 1;
}
if (D5[ELM1] == ans[4])
{
return 1;
}
if (D6[ELM1] == ans[4])
{
return 1;
}
if (D1[ELM1] == ans[5])
{
return 1;
}
if (D2[ELM1] == ans[5])
{
return 1;
}
if (D3[ELM1] == ans[5])
{
return 1;
}
if (D4[ELM1] == ans[5])
{
return 1;
}
if (D5[ELM1] == ans[5])
{
return 1;
}
if (D6[ELM1] == ans[5])
{
return 1;
}
onethreefour:
flag = 0;
if (D1[ELM1] == ans[0])
{
flag++;
}
if (D2[ELM1] == ans[0])
{
flag++;
}
if (D3[ELM1] == ans[0])
{
flag++;
}
if (D4[ELM1] == ans[0])
{
flag++;
}
if (D5[ELM1] == ans[0])
{
flag++;
}
if (D6[ELM1] == ans[0])
{
flag++;
}
if (flag != 1)
goto onefourfive;
if (D1[ELM1] == ans[2])
{
flag++;
}
if (D2[ELM1] == ans[2])
{
flag++;
}
if (D3[ELM1] == ans[2])
{
flag++;
}
if (D4[ELM1] == ans[2])
{
flag++;
}
if (D5[ELM1] == ans[2])
{
flag++;
}
if (D6[ELM1] == ans[2])
{
flag++;
}
if (flag != 2)
goto onefourfive;
if (D1[ELM1] == ans[3])
{
return 1;
}
if (D2[ELM1] == ans[3])
{
return 1;
}
if (D3[ELM1] == ans[3])
{
return 1;
}
if (D4[ELM1] == ans[3])
{
return 1;
}
if (D5[ELM1] == ans[3])
{
return 1;
}
if (D6[ELM1] == ans[3])
{
return 1;
}
if (D1[ELM1] == ans[4])
{
return 1;
}
if (D2[ELM1] == ans[4])
{
return 1;
}
if (D3[ELM1] == ans[4])
{
return 1;
}
if (D4[ELM1] == ans[4])
{
return 1;
}
if (D5[ELM1] == ans[4])
{
return 1;
}
if (D6[ELM1] == ans[4])
{
return 1;
}
if (D1[ELM1] == ans[5])
{
return 1;
}
if (D2[ELM1] == ans[5])
{
return 1;
}
if (D3[ELM1] == ans[5])
{
return 1;
}
if (D4[ELM1] == ans[5])
{
return 1;
}
if (D5[ELM1] == ans[5])
{
return 1;
}
if (D6[ELM1] == ans[5])
{
return 1;
}
onefourfive:
flag = 0;
if (D1[ELM1] == ans[0])
{
flag++;
}
if (D2[ELM1] == ans[0])
{
flag++;
}
if (D3[ELM1] == ans[0])
{
flag++;
}
if (D4[ELM1] == ans[0])
{
flag++;
}
if (D5[ELM1] == ans[0])
{
flag++;
}
if (D6[ELM1] == ans[0])
{
flag++;
}
if (flag != 1)
goto onefivesix;
if (D1[ELM1] == ans[3])
{
flag++;
}
if (D2[ELM1] == ans[3])
{
flag++;
}
if (D3[ELM1] == ans[3])
{
flag++;
}
if (D4[ELM1] == ans[3])
{
flag++;
}
if (D5[ELM1] == ans[3])
{
flag++;
}
if (D6[ELM1] == ans[3])
{
flag++;
}
if (flag != 2)
goto onefivesix;
if (D1[ELM1] == ans[4])
{
return 1;
}
if (D2[ELM1] == ans[4])
{
return 1;
}
if (D3[ELM1] == ans[4])
{
return 1;
}
if (D4[ELM1] == ans[4])
{
return 1;
}
if (D5[ELM1] == ans[4])
{
return 1;
}
if (D6[ELM1] == ans[4])
{
return 1;
}
if (D1[ELM1] == ans[5])
{
return 1;
}
if (D2[ELM1] == ans[5])
{
return 1;
}
if (D3[ELM1] == ans[5])
{
return 1;
}
if (D4[ELM1] == ans[5])
{
return 1;
}
if (D5[ELM1] == ans[5])
{
return 1;
}
if (D6[ELM1] == ans[5])
{
return 1;
}
onefivesix:
flag = 0;
if (D1[ELM1] == ans[0])
{
flag++;
}
if (D2[ELM1] == ans[0])
{
flag++;
}
if (D3[ELM1] == ans[0])
{
flag++;
}
if (D4[ELM1] == ans[0])
{
flag++;
}
if (D5[ELM1] == ans[0])
{
flag++;
}
if (D6[ELM1] == ans[0])
{
flag++;
}
if (flag != 1)
goto twothreefour;
if (D1[ELM1] == ans[4])
{
flag++;
}
if (D2[ELM1] == ans[4])
{
flag++;
}
if (D3[ELM1] == ans[4])
{
flag++;
}
if (D4[ELM1] == ans[4])
{
flag++;
}
if (D5[ELM1] == ans[4])
{
flag++;
}
if (D6[ELM1] == ans[4])
{
flag++;
}
if (flag != 2)
goto twothreefour;
if (D1[ELM1] == ans[5])
{
return 1;
}
if (D2[ELM1] == ans[5])
{
return 1;
}
if (D3[ELM1] == ans[5])
{
return 1;
}
if (D4[ELM1] == ans[5])
{
return 1;
}
if (D5[ELM1] == ans[5])
{
return 1;
}
if (D6[ELM1] == ans[5])
{
return 1;
}
twothreefour:
flag = 0;
if (D1[ELM1] == ans[1])
{
flag++;
}
if (D2[ELM1] == ans[1])
{
flag++;
}
if (D3[ELM1] == ans[1])
{
flag++;
}
if (D4[ELM1] == ans[1])
{
flag++;
}
if (D5[ELM1] == ans[1])
{
flag++;
}
if (D6[ELM1] == ans[1])
{
flag++;
}
if (flag != 1)
goto twofourfive;
if (D1[ELM1] == ans[2])
{
flag++;
}
if (D2[ELM1] == ans[2])
{
flag++;
}
if (D3[ELM1] == ans[2])
{
flag++;
}
if (D4[ELM1] == ans[2])
{
flag++;
}
if (D5[ELM1] == ans[2])
{
flag++;
}
if (D6[ELM1] == ans[2])
{
flag++;
}
if (flag != 2)
goto twofourfive;
if (D1[ELM1] == ans[3])
{
return 1;
}
if (D2[ELM1] == ans[3])
{
return 1;
}
if (D3[ELM1] == ans[3])
{
return 1;
}
if (D4[ELM1] == ans[3])
{
return 1;
}
if (D5[ELM1] == ans[3])
{
return 1;
}
if (D6[ELM1] == ans[3])
{
return 1;
}
if (D1[ELM1] == ans[4])
{
return 1;
}
if (D2[ELM1] == ans[4])
{
return 1;
}
if (D3[ELM1] == ans[4])
{
return 1;
}
if (D4[ELM1] == ans[4])
{
return 1;
}
if (D5[ELM1] == ans[4])
{
return 1;
}
if (D6[ELM1] == ans[4])
{
return 1;
}
if (D1[ELM1] == ans[5])
{
return 1;
}
if (D2[ELM1] == ans[5])
{
return 1;
}
if (D3[ELM1] == ans[5])
{
return 1;
}
if (D4[ELM1] == ans[5])
{
return 1;
}
if (D5[ELM1] == ans[5])
{
return 1;
}
if (D6[ELM1] == ans[5])
{
return 1;
}
twofourfive:
flag = 0;
if (D1[ELM1] == ans[1])
{
flag++;
}
if (D2[ELM1] == ans[1])
{
flag++;
}
if (D3[ELM1] == ans[1])
{
flag++;
}
if (D4[ELM1] == ans[1])
{
flag++;
}
if (D5[ELM1] == ans[1])
{
flag++;
}
if (D6[ELM1] == ans[1])
{
flag++;
}
if (flag != 1)
goto twofivesix;
if (D1[ELM1] == ans[3])
{
flag++;
}
if (D2[ELM1] == ans[3])
{
flag++;
}
if (D3[ELM1] == ans[3])
{
flag++;
}
if (D4[ELM1] == ans[3])
{
flag++;
}
if (D5[ELM1] == ans[3])
{
flag++;
}
if (D6[ELM1] == ans[3])
{
flag++;
}
if (flag != 2)
goto twofivesix;
if (D1[ELM1] == ans[4])
{
return 1;
}
if (D2[ELM1] == ans[4])
{
return 1;
}
if (D3[ELM1] == ans[4])
{
return 1;
}
if (D4[ELM1] == ans[4])
{
return 1;
}
if (D5[ELM1] == ans[4])
{
return 1;
}
if (D6[ELM1] == ans[4])
{
return 1;
}
if (D1[ELM1] == ans[5])
{
return 1;
}
if (D2[ELM1] == ans[5])
{
return 1;
}
if (D3[ELM1] == ans[5])
{
return 1;
}
if (D4[ELM1] == ans[5])
{
return 1;
}
if (D5[ELM1] == ans[5])
{
return 1;
}
if (D6[ELM1] == ans[5])
{
return 1;
}
twofivesix:
flag = 0;
if (D1[ELM1] == ans[1])
{
flag++;
}
if (D2[ELM1] == ans[1])
{
flag++;
}
if (D3[ELM1] == ans[1])
{
flag++;
}
if (D4[ELM1] == ans[1])
{
flag++;
}
if (D5[ELM1] == ans[1])
{
flag++;
}
if (D6[ELM1] == ans[1])
{
flag++;
}
if (flag != 1)
goto threefourfive;
if (D1[ELM1] == ans[4])
{
flag++;
}
if (D2[ELM1] == ans[4])
{
flag++;
}
if (D3[ELM1] == ans[4])
{
flag++;
}
if (D4[ELM1] == ans[4])
{
flag++;
}
if (D5[ELM1] == ans[4])
{
flag++;
}
if (D6[ELM1] == ans[4])
{
flag++;
}
if (flag != 2)
goto threefourfive;
if (D1[ELM1] == ans[5])
{
return 1;
}
if (D2[ELM1] == ans[5])
{
return 1;
}
if (D3[ELM1] == ans[5])
{
return 1;
}
if (D4[ELM1] == ans[5])
{
return 1;
}
if (D5[ELM1] == ans[5])
{
return 1;
}
if (D6[ELM1] == ans[5])
{
return 1;
}
threefourfive:
flag = 0;
if (D1[ELM1] == ans[2])
{
flag++;
}
if (D2[ELM1] == ans[2])
{
flag++;
}
if (D3[ELM1] == ans[2])
{
flag++;
}
if (D4[ELM1] == ans[2])
{
flag++;
}
if (D5[ELM1] == ans[2])
{
flag++;
}
if (D6[ELM1] == ans[2])
{
flag++;
}
if (flag != 1)
goto threefivesix;
if (D1[ELM1] == ans[3])
{
flag++;
}
if (D2[ELM1] == ans[3])
{
flag++;
}
if (D3[ELM1] == ans[3])
{
flag++;
}
if (D4[ELM1] == ans[3])
{
flag++;
}
if (D5[ELM1] == ans[3])
{
flag++;
}
if (D6[ELM1] == ans[3])
{
flag++;
}
if (flag != 2)
goto threefivesix;
if (D1[ELM1] == ans[4])
{
return 1;
}
if (D2[ELM1] == ans[4])
{
return 1;
}
if (D3[ELM1] == ans[4])
{
return 1;
}
if (D4[ELM1] == ans[4])
{
return 1;
}
if (D5[ELM1] == ans[4])
{
return 1;
}
if (D6[ELM1] == ans[4])
{
return 1;
}
if (D1[ELM1] == ans[5])
{
return 1;
}
if (D2[ELM1] == ans[5])
{
return 1;
}
if (D3[ELM1] == ans[5])
{
return 1;
}
if (D4[ELM1] == ans[5])
{
return 1;
}
if (D5[ELM1] == ans[5])
{
return 1;
}
if (D6[ELM1] == ans[5])
{
return 1;
}
threefivesix:
flag = 0;
if (D1[ELM1] == ans[2])
{
flag++;
}
if (D2[ELM1] == ans[2])
{
flag++;
}
if (D3[ELM1] == ans[2])
{
flag++;
}
if (D4[ELM1] == ans[2])
{
flag++;
}
if (D5[ELM1] == ans[2])
{
flag++;
}
if (D6[ELM1] == ans[2])
{
flag++;
}
if (flag != 1)
goto fourfivesix;
if (D1[ELM1] == ans[4])
{
flag++;
}
if (D2[ELM1] == ans[4])
{
flag++;
}
if (D3[ELM1] == ans[4])
{
flag++;
}
if (D4[ELM1] == ans[4])
{
flag++;
}
if (D5[ELM1] == ans[4])
{
flag++;
}
if (D6[ELM1] == ans[4])
{
flag++;
}
if (flag != 2)
goto fourfivesix;
if (D1[ELM1] == ans[5])
{
return 1;
}
if (D2[ELM1] == ans[5])
{
return 1;
}
if (D3[ELM1] == ans[5])
{
return 1;
}
if (D4[ELM1] == ans[5])
{
return 1;
}
if (D5[ELM1] == ans[5])
{
return 1;
}
if (D6[ELM1] == ans[5])
{
return 1;
}
fourfivesix:
flag = 0;
if (D1[ELM1] == ans[3])
{
flag++;
}
if (D2[ELM1] == ans[3])
{
flag++;
}
if (D3[ELM1] == ans[3])
{
flag++;
}
if (D4[ELM1] == ans[3])
{
flag++;
}
if (D5[ELM1] == ans[3])
{
flag++;
}
if (D6[ELM1] == ans[3])
{
flag++;
}
if (flag != 1)
goto increasecounter;
if (D1[ELM1] == ans[4])
{
flag++;
}
if (D2[ELM1] == ans[4])
{
flag++;
}
if (D3[ELM1] == ans[4])
{
flag++;
}
if (D4[ELM1] == ans[4])
{
flag++;
}
if (D5[ELM1] == ans[4])
{
flag++;
}
if (D6[ELM1] == ans[4])
{
flag++;
}
if (flag != 2)
goto increasecounter;
if (D1[ELM1] == ans[5])
{
return 1;
}
if (D2[ELM1] == ans[5])
{
return 1;
}
if (D3[ELM1] == ans[5])
{
return 1;
}
if (D4[ELM1] == ans[5])
{
return 1;
}
if (D5[ELM1] == ans[5])
{
return 1;
}
if (D6[ELM1] == ans[5])
{
return 1;
}
increasecounter:
ELM1++;
}
//If it is Three min
return 0;
}
Can I improve the following function under CUDA
?
What the function does is,
Given a min
and max
, ELM1
and ELM
, check if any three numbers of array ans[6]
are found in any row, from min
to max
, in array D1
, D2
, D3
, D4
, D5
, D6
, if found return 1.
I tried using loops
, OR
-ing, AND
-ing, replacing goto
with flag etc. etc. But this seems to be the fastest way.
__device__ bool THREEA(unsigned int n0, unsigned int n,unsigned int* ST1,unsigned int* D1, unsigned int* D2,unsigned int* D3,unsigned int* D4,unsigned int* D5,unsigned int* D6,unsigned int* ans)
{
unsigned int ELM, ELM1,flag;
ELM = ST1[n0]+n; //local.37
ELM1 = n; //local.33
while (ELM1 < ELM)
{
flag = 0;
if (D1[ELM1] == ans[0])
{
flag++;
}
if (D2[ELM1] == ans[0])
{
flag++;
}
if (D3[ELM1] == ans[0])
{
flag++;
}
if (D4[ELM1] == ans[0])
{
flag++;
}
if (D5[ELM1] == ans[0])
{
flag++;
}
if (D6[ELM1] == ans[0])
{
flag++;
}
if (flag != 1)
goto onethreefour;
if (D1[ELM1] == ans[1])
{
flag++;
}
if (D2[ELM1] == ans[1])
{
flag++;
}
if (D3[ELM1] == ans[1])
{
flag++;
}
if (D4[ELM1] == ans[1])
{
flag++;
}
if (D5[ELM1] == ans[1])
{
flag++;
}
if (D6[ELM1] == ans[1])
{
flag++;
}
if (flag != 2)
goto onethreefour;
if (D1[ELM1] == ans[2])
{
return 1;
}
if (D2[ELM1] == ans[2])
{
return 1;
}
if (D3[ELM1] == ans[2])
{
return 1;
}
if (D4[ELM1] == ans[2])
{
return 1;
}
if (D5[ELM1] == ans[2])
{
return 1;
}
if (D6[ELM1] == ans[2])
{
return 1;
}
if (D1[ELM1] == ans[3])
{
return 1;
}
if (D2[ELM1] == ans[3])
{
return 1;
}
if (D3[ELM1] == ans[3])
{
return 1;
}
if (D4[ELM1] == ans[3])
{
return 1;
}
if (D5[ELM1] == ans[3])
{
return 1;
}
if (D6[ELM1] == ans[3])
{
return 1;
}
if (D1[ELM1] == ans[4])
{
return 1;
}
if (D2[ELM1] == ans[4])
{
return 1;
}
if (D3[ELM1] == ans[4])
{
return 1;
}
if (D4[ELM1] == ans[4])
{
return 1;
}
if (D5[ELM1] == ans[4])
{
return 1;
}
if (D6[ELM1] == ans[4])
{
return 1;
}
if (D1[ELM1] == ans[5])
{
return 1;
}
if (D2[ELM1] == ans[5])
{
return 1;
}
if (D3[ELM1] == ans[5])
{
return 1;
}
if (D4[ELM1] == ans[5])
{
return 1;
}
if (D5[ELM1] == ans[5])
{
return 1;
}
if (D6[ELM1] == ans[5])
{
return 1;
}
onethreefour:
flag = 0;
if (D1[ELM1] == ans[0])
{
flag++;
}
if (D2[ELM1] == ans[0])
{
flag++;
}
if (D3[ELM1] == ans[0])
{
flag++;
}
if (D4[ELM1] == ans[0])
{
flag++;
}
if (D5[ELM1] == ans[0])
{
flag++;
}
if (D6[ELM1] == ans[0])
{
flag++;
}
if (flag != 1)
goto onefourfive;
if (D1[ELM1] == ans[2])
{
flag++;
}
if (D2[ELM1] == ans[2])
{
flag++;
}
if (D3[ELM1] == ans[2])
{
flag++;
}
if (D4[ELM1] == ans[2])
{
flag++;
}
if (D5[ELM1] == ans[2])
{
flag++;
}
if (D6[ELM1] == ans[2])
{
flag++;
}
if (flag != 2)
goto onefourfive;
if (D1[ELM1] == ans[3])
{
return 1;
}
if (D2[ELM1] == ans[3])
{
return 1;
}
if (D3[ELM1] == ans[3])
{
return 1;
}
if (D4[ELM1] == ans[3])
{
return 1;
}
if (D5[ELM1] == ans[3])
{
return 1;
}
if (D6[ELM1] == ans[3])
{
return 1;
}
if (D1[ELM1] == ans[4])
{
return 1;
}
if (D2[ELM1] == ans[4])
{
return 1;
}
if (D3[ELM1] == ans[4])
{
return 1;
}
if (D4[ELM1] == ans[4])
{
return 1;
}
if (D5[ELM1] == ans[4])
{
return 1;
}
if (D6[ELM1] == ans[4])
{
return 1;
}
if (D1[ELM1] == ans[5])
{
return 1;
}
if (D2[ELM1] == ans[5])
{
return 1;
}
if (D3[ELM1] == ans[5])
{
return 1;
}
if (D4[ELM1] == ans[5])
{
return 1;
}
if (D5[ELM1] == ans[5])
{
return 1;
}
if (D6[ELM1] == ans[5])
{
return 1;
}
onefourfive:
flag = 0;
if (D1[ELM1] == ans[0])
{
flag++;
}
if (D2[ELM1] == ans[0])
{
flag++;
}
if (D3[ELM1] == ans[0])
{
flag++;
}
if (D4[ELM1] == ans[0])
{
flag++;
}
if (D5[ELM1] == ans[0])
{
flag++;
}
if (D6[ELM1] == ans[0])
{
flag++;
}
if (flag != 1)
goto onefivesix;
if (D1[ELM1] == ans[3])
{
flag++;
}
if (D2[ELM1] == ans[3])
{
flag++;
}
if (D3[ELM1] == ans[3])
{
flag++;
}
if (D4[ELM1] == ans[3])
{
flag++;
}
if (D5[ELM1] == ans[3])
{
flag++;
}
if (D6[ELM1] == ans[3])
{
flag++;
}
if (flag != 2)
goto onefivesix;
if (D1[ELM1] == ans[4])
{
return 1;
}
if (D2[ELM1] == ans[4])
{
return 1;
}
if (D3[ELM1] == ans[4])
{
return 1;
}
if (D4[ELM1] == ans[4])
{
return 1;
}
if (D5[ELM1] == ans[4])
{
return 1;
}
if (D6[ELM1] == ans[4])
{
return 1;
}
if (D1[ELM1] == ans[5])
{
return 1;
}
if (D2[ELM1] == ans[5])
{
return 1;
}
if (D3[ELM1] == ans[5])
{
return 1;
}
if (D4[ELM1] == ans[5])
{
return 1;
}
if (D5[ELM1] == ans[5])
{
return 1;
}
if (D6[ELM1] == ans[5])
{
return 1;
}
onefivesix:
flag = 0;
if (D1[ELM1] == ans[0])
{
flag++;
}
if (D2[ELM1] == ans[0])
{
flag++;
}
if (D3[ELM1] == ans[0])
{
flag++;
}
if (D4[ELM1] == ans[0])
{
flag++;
}
if (D5[ELM1] == ans[0])
{
flag++;
}
if (D6[ELM1] == ans[0])
{
flag++;
}
if (flag != 1)
goto twothreefour;
if (D1[ELM1] == ans[4])
{
flag++;
}
if (D2[ELM1] == ans[4])
{
flag++;
}
if (D3[ELM1] == ans[4])
{
flag++;
}
if (D4[ELM1] == ans[4])
{
flag++;
}
if (D5[ELM1] == ans[4])
{
flag++;
}
if (D6[ELM1] == ans[4])
{
flag++;
}
if (flag != 2)
goto twothreefour;
if (D1[ELM1] == ans[5])
{
return 1;
}
if (D2[ELM1] == ans[5])
{
return 1;
}
if (D3[ELM1] == ans[5])
{
return 1;
}
if (D4[ELM1] == ans[5])
{
return 1;
}
if (D5[ELM1] == ans[5])
{
return 1;
}
if (D6[ELM1] == ans[5])
{
return 1;
}
twothreefour:
flag = 0;
if (D1[ELM1] == ans[1])
{
flag++;
}
if (D2[ELM1] == ans[1])
{
flag++;
}
if (D3[ELM1] == ans[1])
{
flag++;
}
if (D4[ELM1] == ans[1])
{
flag++;
}
if (D5[ELM1] == ans[1])
{
flag++;
}
if (D6[ELM1] == ans[1])
{
flag++;
}
if (flag != 1)
goto twofourfive;
if (D1[ELM1] == ans[2])
{
flag++;
}
if (D2[ELM1] == ans[2])
{
flag++;
}
if (D3[ELM1] == ans[2])
{
flag++;
}
if (D4[ELM1] == ans[2])
{
flag++;
}
if (D5[ELM1] == ans[2])
{
flag++;
}
if (D6[ELM1] == ans[2])
{
flag++;
}
if (flag != 2)
goto twofourfive;
if (D1[ELM1] == ans[3])
{
return 1;
}
if (D2[ELM1] == ans[3])
{
return 1;
}
if (D3[ELM1] == ans[3])
{
return 1;
}
if (D4[ELM1] == ans[3])
{
return 1;
}
if (D5[ELM1] == ans[3])
{
return 1;
}
if (D6[ELM1] == ans[3])
{
return 1;
}
if (D1[ELM1] == ans[4])
{
return 1;
}
if (D2[ELM1] == ans[4])
{
return 1;
}
if (D3[ELM1] == ans[4])
{
return 1;
}
if (D4[ELM1] == ans[4])
{
return 1;
}
if (D5[ELM1] == ans[4])
{
return 1;
}
if (D6[ELM1] == ans[4])
{
return 1;
}
if (D1[ELM1] == ans[5])
{
return 1;
}
if (D2[ELM1] == ans[5])
{
return 1;
}
if (D3[ELM1] == ans[5])
{
return 1;
}
if (D4[ELM1] == ans[5])
{
return 1;
}
if (D5[ELM1] == ans[5])
{
return 1;
}
if (D6[ELM1] == ans[5])
{
return 1;
}
twofourfive:
flag = 0;
if (D1[ELM1] == ans[1])
{
flag++;
}
if (D2[ELM1] == ans[1])
{
flag++;
}
if (D3[ELM1] == ans[1])
{
flag++;
}
if (D4[ELM1] == ans[1])
{
flag++;
}
if (D5[ELM1] == ans[1])
{
flag++;
}
if (D6[ELM1] == ans[1])
{
flag++;
}
if (flag != 1)
goto twofivesix;
if (D1[ELM1] == ans[3])
{
flag++;
}
if (D2[ELM1] == ans[3])
{
flag++;
}
if (D3[ELM1] == ans[3])
{
flag++;
}
if (D4[ELM1] == ans[3])
{
flag++;
}
if (D5[ELM1] == ans[3])
{
flag++;
}
if (D6[ELM1] == ans[3])
{
flag++;
}
if (flag != 2)
goto twofivesix;
if (D1[ELM1] == ans[4])
{
return 1;
}
if (D2[ELM1] == ans[4])
{
return 1;
}
if (D3[ELM1] == ans[4])
{
return 1;
}
if (D4[ELM1] == ans[4])
{
return 1;
}
if (D5[ELM1] == ans[4])
{
return 1;
}
if (D6[ELM1] == ans[4])
{
return 1;
}
if (D1[ELM1] == ans[5])
{
return 1;
}
if (D2[ELM1] == ans[5])
{
return 1;
}
if (D3[ELM1] == ans[5])
{
return 1;
}
if (D4[ELM1] == ans[5])
{
return 1;
}
if (D5[ELM1] == ans[5])
{
return 1;
}
if (D6[ELM1] == ans[5])
{
return 1;
}
twofivesix:
flag = 0;
if (D1[ELM1] == ans[1])
{
flag++;
}
if (D2[ELM1] == ans[1])
{
flag++;
}
if (D3[ELM1] == ans[1])
{
flag++;
}
if (D4[ELM1] == ans[1])
{
flag++;
}
if (D5[ELM1] == ans[1])
{
flag++;
}
if (D6[ELM1] == ans[1])
{
flag++;
}
if (flag != 1)
goto threefourfive;
if (D1[ELM1] == ans[4])
{
flag++;
}
if (D2[ELM1] == ans[4])
{
flag++;
}
if (D3[ELM1] == ans[4])
{
flag++;
}
if (D4[ELM1] == ans[4])
{
flag++;
}
if (D5[ELM1] == ans[4])
{
flag++;
}
if (D6[ELM1] == ans[4])
{
flag++;
}
if (flag != 2)
goto threefourfive;
if (D1[ELM1] == ans[5])
{
return 1;
}
if (D2[ELM1] == ans[5])
{
return 1;
}
if (D3[ELM1] == ans[5])
{
return 1;
}
if (D4[ELM1] == ans[5])
{
return 1;
}
if (D5[ELM1] == ans[5])
{
return 1;
}
if (D6[ELM1] == ans[5])
{
return 1;
}
threefourfive:
flag = 0;
if (D1[ELM1] == ans[2])
{
flag++;
}
if (D2[ELM1] == ans[2])
{
flag++;
}
if (D3[ELM1] == ans[2])
{
flag++;
}
if (D4[ELM1] == ans[2])
{
flag++;
}
if (D5[ELM1] == ans[2])
{
flag++;
}
if (D6[ELM1] == ans[2])
{
flag++;
}
if (flag != 1)
goto threefivesix;
if (D1[ELM1] == ans[3])
{
flag++;
}
if (D2[ELM1] == ans[3])
{
flag++;
}
if (D3[ELM1] == ans[3])
{
flag++;
}
if (D4[ELM1] == ans[3])
{
flag++;
}
if (D5[ELM1] == ans[3])
{
flag++;
}
if (D6[ELM1] == ans[3])
{
flag++;
}
if (flag != 2)
goto threefivesix;
if (D1[ELM1] == ans[4])
{
return 1;
}
if (D2[ELM1] == ans[4])
{
return 1;
}
if (D3[ELM1] == ans[4])
{
return 1;
}
if (D4[ELM1] == ans[4])
{
return 1;
}
if (D5[ELM1] == ans[4])
{
return 1;
}
if (D6[ELM1] == ans[4])
{
return 1;
}
if (D1[ELM1] == ans[5])
{
return 1;
}
if (D2[ELM1] == ans[5])
{
return 1;
}
if (D3[ELM1] == ans[5])
{
return 1;
}
if (D4[ELM1] == ans[5])
{
return 1;
}
if (D5[ELM1] == ans[5])
{
return 1;
}
if (D6[ELM1] == ans[5])
{
return 1;
}
threefivesix:
flag = 0;
if (D1[ELM1] == ans[2])
{
flag++;
}
if (D2[ELM1] == ans[2])
{
flag++;
}
if (D3[ELM1] == ans[2])
{
flag++;
}
if (D4[ELM1] == ans[2])
{
flag++;
}
if (D5[ELM1] == ans[2])
{
flag++;
}
if (D6[ELM1] == ans[2])
{
flag++;
}
if (flag != 1)
goto fourfivesix;
if (D1[ELM1] == ans[4])
{
flag++;
}
if (D2[ELM1] == ans[4])
{
flag++;
}
if (D3[ELM1] == ans[4])
{
flag++;
}
if (D4[ELM1] == ans[4])
{
flag++;
}
if (D5[ELM1] == ans[4])
{
flag++;
}
if (D6[ELM1] == ans[4])
{
flag++;
}
if (flag != 2)
goto fourfivesix;
if (D1[ELM1] == ans[5])
{
return 1;
}
if (D2[ELM1] == ans[5])
{
return 1;
}
if (D3[ELM1] == ans[5])
{
return 1;
}
if (D4[ELM1] == ans[5])
{
return 1;
}
if (D5[ELM1] == ans[5])
{
return 1;
}
if (D6[ELM1] == ans[5])
{
return 1;
}
fourfivesix:
flag = 0;
if (D1[ELM1] == ans[3])
{
flag++;
}
if (D2[ELM1] == ans[3])
{
flag++;
}
if (D3[ELM1] == ans[3])
{
flag++;
}
if (D4[ELM1] == ans[3])
{
flag++;
}
if (D5[ELM1] == ans[3])
{
flag++;
}
if (D6[ELM1] == ans[3])
{
flag++;
}
if (flag != 1)
goto increasecounter;
if (D1[ELM1] == ans[4])
{
flag++;
}
if (D2[ELM1] == ans[4])
{
flag++;
}
if (D3[ELM1] == ans[4])
{
flag++;
}
if (D4[ELM1] == ans[4])
{
flag++;
}
if (D5[ELM1] == ans[4])
{
flag++;
}
if (D6[ELM1] == ans[4])
{
flag++;
}
if (flag != 2)
goto increasecounter;
if (D1[ELM1] == ans[5])
{
return 1;
}
if (D2[ELM1] == ans[5])
{
return 1;
}
if (D3[ELM1] == ans[5])
{
return 1;
}
if (D4[ELM1] == ans[5])
{
return 1;
}
if (D5[ELM1] == ans[5])
{
return 1;
}
if (D6[ELM1] == ans[5])
{
return 1;
}
increasecounter:
ELM1++;
}
//If it is Three min
return 0;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
通过将 if 语句转换为布尔表达式来删除它们。
确保您的数组位于寄存器或共享内存中,而不是全局数组
中,在这种简单的算法上,您的逻辑太复杂了。将 D 数组的布局更改为 D[N][6],因为它会简化很多事情
,您可能需要稍微裁剪一下您的帖子,太多的内容无法阅读
3 x3 的示例
,基本上您将矩阵单元设置为如果匹配 A 在数组 D 中则为 true。
在每次迭代中,如果整个列都为 true,则将列减少为 true。
然后你数一下真实的数量。
remove if statements by converting them to Boolean expressions.
make sure your arrays are in registers or shared memory rather than global
also, on such simple algorithm you got way too complicated logic. change layout of D arrays to be D[N][6] as it will simplify many things
by the way, you may want to crop your post a little bit, way too much to read
3 x3 example
basically you are setting matrix cells to true if match A is in array D.
on each iteration you reduce columns to true if entire column is true.
then you count number of true.