Вот простая программа:
void multiply(const int* v_in, const int* w_in, int n_v, int n_w, int* w_out)
{
for(int i=0; i<n_w; i++)
{
int sum=0;
for(int j=0; j<n_v; j++)
sum += (w_in[i]*v_in[j])>>1;
w_out[i]=sum;
}
}
Предположим, что n_v, n_w ~ 10 ^ 6.Ясно, что в CUDA есть по крайней мере дюжина эквивалентных способов сделать это с различными способами подразделить (n_v * n_w) операции на потоки с общей памятью и без нее ... Какой путь, теоретически говоря, должен быть самым быстрым?