2011-09-05 3 views
6

성능을 위해 OpenCL을 사용하여 GPU에 물리 시뮬레이션 알고리즘을 포팅하고 싶습니다. 저는 OpenCL에 대한 경험이 없으며 주위를 둘러보고 있습니다. 계산은 대부분 작은 밀도의 행렬 (3x3) 및 벡터 곱, 교차 곱 등입니다.opencl 매트릭스 라이브러리

  1. 이러한 기본 작업을위한 "표준"/ 권장 라이브러리가 있습니까? 내가 예를 들어 mmul(a,mtrans(b)) 대신 a*b.transpose()를 작성해야 할, 나는 확실히 행렬 곱셈과 반전 자신을 코드 싶지 않아 (안 시간을, 그리고 inefficent 것) 인 OpenCL이 연산자 등 과부하, 클래스가 없기 때문에

  2. ?

  3. 표기법을 좀 더 수학적으로 만들기 위해 OpenCL (또는 전처리 기)의 확장/발전이 있습니까? 나는 포트란 시대로 돌아갈 것이라는 인상을 가지고있다. (나는 CUDA가 알고 있지만이 업체 바인딩입니다) 귀하의 질문에 대답하기 위해

답변

4

3 차원 개체로 제한된다는 사실을 알고 있다면 double3 유형 (또는 gpu가 배정도를 지원하지 않는 경우 float3)을 사용하는 것이 좋습니다.

지금까지는 벡터 만 지원되므로 행렬 곱셈 또는 역수 사용과 관련하여 직접 코딩해야합니다. 그러나 다음과 같은 기본 제공 geometric functions에 관심이있을 수 있습니다. 특히 dot 제품과 cross 제품이 정의됩니다.

또한 행렬의 선물 implentations에 대한 reserved data types을 있다는 것을 알고 관심을 가질만한 : mN X 두 예를 들어 참조하십시오. 귀하의 경우 미래에 가능하다면 행렬에 double3x3 유형을 사용할 수 있습니다.

5

: 나는 예, OpenCL을 엄격하게 C99 구문에 제한됩니다

  • 의 알고하지 않는 것이

    1. 을 , 클래스가 없으며 연산자 오버로딩이 필요하지 않으며 엄격하게 사용자가 염두에두고있는 작업 유형에 대한 절차 적 호출이 필요합니다. OpenCL은 네이티브 벡터 유형에 대한 요소 현명한 연산을 지원하지만 그 이상의 정교한 것은 아닙니다. 행렬 곱셈, 행렬식, 변환 등은 모두 구현해야합니다.
    2. 다시 알고 있습니다. [제쳐두고,이 컨텍스트에서 Fortran을 비판하지는 않겠지 만, F90 및 이후 버전에는 고유 한 행렬 및 벡터 연산이있어 사용자가 C99 또는 C++보다 훨씬 쉽게 작성하도록 요구하는 연산을 수행합니다.
  • +0

    죄송합니다. 전 Linpack을 염두에두고 Fortran을 염두에 뒀습니다. (프로그래밍 당시가 아니 었습니다.) 즉, 누군가가 스스로를 대신 작성하는 대신 좋은 구현을하기 전에 말입니다. 비유하자면 파이썬이 인기있는 언어 인 이유 중 하나가 "배터리 포함"이라고 생각합니다. – eudoxos