이 중첩 된 for 루프를 빠르게하려면 CUDA를 배우십시오. 어떻게 CUDA를 사용하여이 C++ 코드를 병렬 처리 할 수 있습니까?이 중첩 된 for 루프를 병렬 처리하는 CUDA를 사용할 수 있습니까?
#define PI 3.14159265
using namespace std;
int main()
{
int nbint = 2;
int hits = 20;
int nbinp = 2;
float _theta, _phi, _l, _m, _n, _k = 0, delta = 5;
float x[20],y[20],z[20],a[20],t[20];
for (int i = 0; i < hits; ++i)
{
x[i] = rand()/(float)(RAND_MAX/100);
}
for (int i = 0; i < hits; ++i)
{
y[i] = rand()/(float)(RAND_MAX/100);
}
for (int i = 0; i < hits; ++i)
{
z[i] = rand()/(float)(RAND_MAX/100);
}
for (int i = 0; i < hits; ++i)
{
a[i] = rand()/(float)(RAND_MAX/100);
}
float maxforall = 1e-6;
float theta0;
float phi0;
for (int i = 0; i < nbint; i++)
{
_theta = (0.5 + i)*delta;
for (int j = 0; j < nbinp; j++)
{
_phi = (0.5 + j)*delta/_theta;
_l = sin(_theta* PI/180.0)*cos(_phi* PI/180.0);
_m = sin(_theta* PI/180.0)*sin(_phi* PI/180.0);
_n = cos(_theta* PI/180.0);
for (int k = 0; k < hits; k++)
{
_k = -(_l*x[k] + _m*y[k] + _n*z[k]);
t[k] = a[k] - _k;
}
qsort(t, 0, hits - 1);
float max = t[0];
for (int k = 0; k < hits; k++)
{
if (max < t[k])
max = t[k];
}
if (max > maxforall)
{
maxforall = max;
}
}
}
return 0;
}
가장 안쪽의 for 루프와 정렬 부분 (전체 중첩 루프)을 병렬로 넣으 려합니다. 배열을 정렬 한 후 모든 배열의 최대 값을 찾았습니다. 나는 코드를 단순화하기 위해 최대 값을 사용한다. 필자가 정렬해야하는 이유는 최대 값이 을 나타내는 것은 연속적인 시간 정보입니다 (모든 배열에는 시간 정보가 포함되어 있습니다). 정렬 부분은 그 시간을 가장 낮은 것에서 가장 높은 것으로 만듭니다. 그런 다음 특정 시간 간격 (단일 값 아님)을 비교합니다. 비교 프로세스는 최대 값을 선택하는 것과 거의 같지만 연속 간격은 단일 값이 아닙니다.
여기서 계산할 사항은 무엇입니까? 'nbint','nbinp','hits'의 크기는 어느 정도입니까? 원하는 출력뿐 아니라 입력 데이터의 작은 숫자 샘플을 포함하여 [mcve]를 게시하십시오. –
먼저 배열 t [k]를 계산하고이 배열을 정렬하려고합니다. 원하는 출력은 nbint * nbinp 정렬 된 배열입니다. – Alex
'20 * 2 = 40' 배열이나'40' 요소를 가진 단일 배열을 원하십니까? 루프 내부에서 정렬 작업을 수행하는 이유는 무엇입니까? 알고리즘은 여전히 나에게 불분명하다 –