OpenCl을 사용하는 미니 분자 동역학 응용 프로그램에 대한이 문서 http://eprints.dcs.warwick.ac.uk/1694/1/miniMD_opencl.pdf을 읽는 중입니다. 코드는 여기에 있습니다.
커널을 구현하는 방법에 익숙해졌습니다. 내가 이해하지 못하는 것은이OpenCl의 스칼라 및 벡터 커널
#if defined(SCALAR_KERNELS)
__kernel void f_clear(
__global float* f,
__const int nall) {
for (unsigned i = get_global_id(0)+1; i <= nall; i += get_global_size(0)) {
const int i4 = i << 2;
f[i4+0] = 0.0f;
f[i4+1] = 0.0f;
f[i4+2] = 0.0f;
f[i4+3] = 0.0f;
}
}
#elif defined(VECTOR_KERNELS)
__kernel __attribute__((vec_type_hint(float4)))
void f_clear(
__global float4* f,
__const int nall) {
const float4 zeroes = (float4) (0.0f, 0.0f, 0.0f, 0.0f);
for (unsigned i = get_global_id(0)+1; i <= nall; i += get_global_size(0)) {
f[i] = zeroes;
}
}
#endif
가 VECTOR_KERNELS
을 가정하고, SCALAR_KERNELS
는 GPU와 MIC 장치 있지만 확실하지에 해당합니다.
MIMD SIMD 명령어 또는 멀티 코어 및 벡터 프로그래밍과 관련이 있습니까?
또한 현재 벡터 형식을 사용하는 것이 큰 이점이 있습니까?
마지막으로 루프에 대한 두 가지와 그 목적을 실제로 파악할 수 없습니다.
왜 f[get_global_id(0)]
을 보내지 않으십니까?
감사합니다.
Éric.