저는 현재 pycuda와 scikits.cuda를 사용하여 선형 방정식 A * x = b를 풀고 있습니다. 여기서 A는 상한/하한 행렬입니다. 그러나 cublasStbsv 루틴에는 특정 형식이 필요합니다. 예를 들어, 더 낮은 행렬 A = [[1, 0, 0], [2, 3, 0], [4,5,6]]이면 cublasStbsv에 필요한 입력은 [[1, 3, 6], [2, 5, 0], [4, 0, 0]]의 행을 포함하고, 여기서 행은 각각 대각선, subdiagonal1, subdiagonal2이다. numpy를 사용하는 경우 stride_tricks.as_strided에서 쉽게 수행 할 수 있지만 pycuda.gpuarray를 사용하여 비슷한 작업을 수행하는 방법을 알지 못합니다. 어떤 도움을 주시면 감사하겠습니다. pycuda.compyte.array.as_strided를 발견했지만 gpuarray에 적용 할 수 없습니다.상단/하단 gpuarray를 cublasStbsv에서 요구하는 특정 형식으로 변환하는 방법은 무엇입니까?
1
A
답변
1
나는 theano를 사용하여 작업을 완료했습니다. 먼저 그것을 cudandarray로 변환하고, 보폭을 바꾸고 gpuarray로 복사본을 만듭니다. Fortran과 C 사이의 변경 사항에주의하십시오. 업데이트 : 매트릭스가 너무 큰 경우 결국이 방법에 문제가있다 gpuarray.multi_take_put
def make_triangle(s_matrix, uplo = 'L'):
"""convert triangle matrix to the specific format
required by cublasStbsv, matrix should be in Fortran order,
s_matrix: gpuarray
"""
#make sure the dytpe is float32
if s_matrix.dtype != 'f':
s_matrix = s_matrix.astype('f')
dim = s_matrix.shape[0]
if uplo == 'L':
idx_tuple = np.tril_indices(dim)
gidx = gpuarray.to_gpu(idx_tuple[0] + idx_tuple[1] * dim)
gdst = gpuarray.to_gpu(idx_tuple[0] + idx_tuple[1] * (dim - 1))
return gpuarray.multi_take_put([s_matrix], gdst, gidx, (dim, dim))[0]
else:
idx_tuple = np.triu_indices(dim)
gidx = gpuarray.to_gpu(idx_tuple[0] + idx_tuple[1] * dim)
gdst = gpuarray.to_gpu(idx_tuple[0] + (idx_tuple[1] + 1) * (dim - 1))
return gpuarray.multi_take_put([s_matrix], gdst, gidx, (dim, dim))[0]
관련 문제
- 1. C++ 코드에서 특정 개념을 요구하는 방법은 무엇입니까?
- 2. 전화 번호 - 문자열을 특정 형식으로 변환하는 방법은 무엇입니까?
- 3. 9 자리 숫자를 특정 날짜 형식으로 변환하는 방법은 무엇입니까?
- 4. 보기의 내용을 이미지 형식으로 변환하는 방법은 무엇입니까?
- 5. 날짜를 문자열 형식으로 요구하는 함수에 시스템 날짜를 추가하는 방법은 무엇입니까?
- 6. serialClob을 String 형식으로 변환하는 방법은 무엇입니까?
- 7. 문자열을 숫자 형식으로 변환하는 일반적인 방법은 무엇입니까?
- 8. protobuf 그래프를 이진선 형식으로 변환하는 방법은 무엇입니까?
- 9. 문자열을 Json 형식으로 변환하는 방법은 무엇입니까?
- 10. 사람의 목소리를 디지털 형식으로 변환하는 방법은 무엇입니까?
- 11. JSON 개체를 날짜 형식으로 변환하는 방법은 무엇입니까?
- 12. BigDecimal을 지수 형식으로 변환하는 방법은 무엇입니까?
- 13. VARCHAR을 날짜 형식으로 변환하는 방법은 무엇입니까?
- 14. 스윙 프로그램을 MVC 형식으로 변환하는 방법은 무엇입니까?
- 15. 메쉬를 VTK 형식으로 변환하는 방법은 무엇입니까?
- 16. xls 파일을 mysql 형식으로 변환하는 방법은 무엇입니까?
- 17. XML을 STEP (p21) 형식으로 변환하는 방법은 무엇입니까?
- 18. 난수를 다른 기본 형식으로 변환하는 방법은 무엇입니까?
- 19. java.hprof.txt를 바이너리 hprof 형식으로 변환하는 방법은 무엇입니까?
- 20. JSONArray를 Android64에서 Base64 형식으로 변환하는 방법은 무엇입니까?
- 21. StringWriter의 값을 XML 형식으로 변환하는 방법은 무엇입니까?
- 22. Grails에서 Int를 날짜 형식으로 변환하는 방법은 무엇입니까?
- 23. xml 파일을 html 형식으로 변환하는 방법은 무엇입니까?
- 24. jsp 페이지를 pdf 형식으로 변환하는 방법은 무엇입니까?
- 25. ios5에서 NSString을 JSON 형식으로 변환하는 방법은 무엇입니까?
- 26. 문자열을 원하는 형식으로 변환하는 방법은 무엇입니까?
- 27. JavaScript에서 문자열을 ASCII 형식으로 변환하는 방법은 무엇입니까?
- 28. CSV 데이터를 LabelledPoint 형식으로 변환하는 방법은 무엇입니까?
- 29. 정수형 배열을 다른 형식으로 변환하는 방법은 무엇입니까?
- 30. PHP 배열을 특정 Javascript 형식으로 변환하는 방법
을 사용하여 수행되었다가, 다음, 다음 오류를 제공합니다 진보가 cudandarray가 점유 메모리에 액세스 할 수 있도록 변경 –