GPU 공유 메모리에 큰 배열을로드하고 싶습니다. 내가 벨로우즈처럼 사용할 때 :GPU 공유 메모리에 큰 배열을 효율적으로로드하는 방법은 무엇입니까?
1 : int index = threadidx.x;
2 : 공유 unsigned char x [1000];
3 : x [i] = array [i];
그런 다음 1000 개의 스레드와 하나의 블록으로 커널 코드를 호출하면 모든 스레드에 대해 메모리 액세스가 발생합니까? 이 배열을 하나의 메모리 액세스로로드하여 공유 메모리에로드 할 수 있습니까?
모든 의견을 크게 기뻐할 것입니다.
이렇게하면 공유 메모리에 배열 요소를 동시에로드 할 수 있습니까? – kiki
"평행" "한 번에"활동 만 워프 레벨에 있습니다. 각 워프 (32 스레드)는 전역 메모리 ('array [i]')에 대한 액세스를 단일 액세스/트랜잭션으로 결합하고 공유 메모리 ('x [i]')에 대한 액세스를 단일 액세스로 결합합니다. 다중 워프가 병렬로 실행될 수도 있지만, 해당 활동은 단일 메모리 트랜잭션으로 결합되지 않습니다. –
일반적으로 스레드 당 최소 4 바이트를로드하여로드/저장 효율성을 향상시킬 수 있습니다. 기본 데이터 구조가 바이트 지향적 일지라도 적절한 포인터 연산을 사용하여 기본 포인터 캐스팅 (예 :'char *'에서'int *')으로 수행 할 수 있습니다. –