Tôi mới bắt đầu học OpenCL. Tôi đang cố gắng để có được một cảm giác về những gì hiệu suất đạt được mong đợi khi di chuyển các chức năng/thuật toán cho GPU.Chức năng tầm thường nhất nào có thể được tính toán trên GPU?
Hạt nhân cơ bản nhất được đưa ra trong hầu hết các hướng dẫn là một hạt nhân mà phải mất hai mảng các con số và tính tổng giá trị tại các chỉ số tương ứng và thêm chúng vào một mảng thứ ba, như vậy:
__kernel void
add(__global float *a,
__global float *b,
__global float *answer)
{
int gid = get_global_id(0);
answer[gid] = a[gid] + b[gid];
}
__kernel void
sub(__global float* n,
__global float* answer)
{
int gid = get_global_id(0);
answer[gid] = n[gid] - 2;
}
__kernel void
ranksort(__global const float *a,
__global float *answer)
{
int gid = get_global_id(0);
int gSize = get_global_size(0);
int x = 0;
for(int i = 0; i < gSize; i++){
if(a[gid] > a[i]) x++;
}
answer[x] = a[gid];
}
Tôi giả định mà bạn không bao giờ có thể biện minh cho tính toán này trên GPU, việc chuyển giao bộ nhớ sẽ ra trọng lượng thời gian nó sẽ mất tính này trên CPU bằng độ lớn (tôi có thể sai về việc này, vì thế câu hỏi này).
Những gì tôi đang tự hỏi là những gì sẽ là ví dụ tầm thường nhất nơi bạn mong chờ tăng tốc đáng kể khi sử dụng một hạt nhân OpenCL thay cho CPU?
Liên kết bị hỏng. – user