2016-07-13 2 views
2

짧은 배경 :OpenCL SubSlice는 CUDA Warp (SIMD)와 유사합니까?

CUDA에는 동기화가 보장되는 32 개의 스레드 인 warps 개념이 있습니다. 나는이 SIMD 동작에 의존하여 (일부 루프, 1 스레드가 끝나고 나머지 스레드가 계산에 사용하는 공유 메모리에 값을 쓰는) 동기화 호출 전체의 잠재적 오버 헤드를 피하기 위해 커널을 사용합니다.

예를 들어 OpenCL에서이 동작을 이미지화하는 방법이 있습니다. Sub_Slices? According to Intel 그들은 이런 식으로 작동하는 것 같지만 OpenCL에서 SIMD 동작을 보장하는 기능이 있습니까?

+1

"슬라이스"(또는 "서브 스크립스")가 OpenCL 표준 용어의 명시적인 부분임을 제안하는 것처럼 보입니다. 나는 틀릴 수도 있지만, 그렇지 않다고 생각합니다. 인텔 디자인과 관련이있을 수 있습니다. 최소한 여기에서 사용하는 컨텍스트와 관련이 있습니다. 물론 "슬라이스"라는 단어는 [OpenCL 명세] (https://www.khronos.org/registry/cl/specs/opencl-2.0.pdf)에 나타나지만 한 단어를 지칭하는 명명 규칙으로 만 사용됩니다. 다차원 데이터 구조의 특정 레이어. 내가 말할 수있는 한, "서브 클래 싱"은 OpenCL 표준 스펙에 전혀 나타나지 않습니다. –

+0

@RobertCrovella 그 점을 지적 해 주셔서 감사합니다. 나는 sublices에 관해서는 명시 적으로 질문을하지는 않겠지 만, 일반적으로는 SIMD를 명확하게하려고 노력했다. –

답변

3

OpenCL의 경우 NVIDIA의 경우 warps이라고도하며 일반적으로 32 개의 작업 항목이 있습니다. 에 AMDwavefront이고 64 개의 작업 항목이 있습니다. Intel에서 하드웨어 스레드에 맞춰 동시에 실행할 수있는 SIMD-8 또는 SIMD-16 또는 SIMD-32 (8/16/32 작업 항목) 일 수 있습니다. 그것이 SIMD-8 또는 SIMD-16 또는 SIMD-32 이건간에 컴파일러 선택에 달려 있습니다.

정보는 일반적으로 clGetKernelWorkGroupInfo()CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE 매개 변수에서 검색 할 수 있습니다.

+0

http://stackoverflow.com/questions/7093488/opencl-how-to-i-query-for-a-devices-simd-width?rq=1 동일한 말을했습니다. 하지만 실종 된 것은 CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE이 SIMD 너비가되고 이런 식으로 작동하는지 여부입니다. 그렇지 않으면 내 알고리즘이 잘못된 결과를 생성합니다. –

+0

[this] (https://software.intel.com/en-us/node/540486)를 참조하십시오. 그것은 명시 적으로 그것을 확인하지 않습니다. 그 가이드에서 더 많이 파고 싶을 수도 있습니다. – doqtor

+0

인텔에서는 이러한 서브 스크립 션을 호출하지 않습니다. 그들은 그것들을 "(SIMD) 쓰레드"라고 부릅니다. subslice는 7 개의 SIMD 쓰레드 중에서 선택할 수있는 EU (실행 단위) 모음입니다. – Tim

2

예, 이것은 유용한 관용구입니다. 내 생각에 당신이 찾고있는 것은 OpenCL subgroups 확장입니다. "하위 그룹"은 HW 스레드 (인텔의 "웨이브"단어)와 같습니다.

서브 그룹은 실제로 EU의 모음이며, 각 그룹에는 7 개의 "SIMD 스레드"(웨이브)가 있습니다. 그러나 이들은 모두 샘플러, 데이터 포트, 명령어 캐시 및 텍스처 캐시를 공유합니다.

관련 문제