다중 스레드에 의해 희소 행렬에 값을 할당 할 때 Segfault

YinLL

더 효율적으로 만들기 위해 일련의 단계에서 파생 된 값으로 희소 행렬을 채우려 고합니다. OpenMP는 해당 프로세스의 속도를 높이는 데 사용됩니다. 1 스레드를 사용할 때 제대로 작동하지만 다중 스레드의 경우 segfault를 잡았습니다. 나는 오류를 재현하기 위해 간단한 데모 코드를 준비했고, 누군가가 나에게 호의를 베풀 수 있기를 진심으로 바랍니다.

#include <RcppArmadillo.h>
#include <omp.h>

// [[Rcpp::plugins(cpp11)]]
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::depends(bigmemory, BH)]]

using namespace std;
using namespace Rcpp;
using namespace arma;

// [[Rcpp::export]]
arma::sp_mat test(arma::vec x, int n, int threads = 1){
    omp_set_num_threads(threads);
    arma::sp_mat m(n, n);
    #pragma omp parallel for schedule(dynamic) 
    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
            m(i, j) = x[i * n + j];
        }
    }
    return m;
}

# run 
a<-test(sample(c(0,1,2),100*100,rep=T), n=100, threads=1)
a<-test(sample(c(0,1,2),100*100,rep=T), n=100, threads=10)
더크 에델 뷔텔

tl; dr : 할 수 없습니다.

더 긴 이야기 : (Rcpp) Armadillo의 주요 이점 중 하나는 혼란스럽고 사용하기 어려운 기본 작업 위에있는 매우 훌륭하고 일관된 API입니다. 단점 중 하나는 기본 데이터 구조를 쉽게 볼 수 없다는 것입니다.

고밀도 행렬은 (본질적으로 항상) 고정 된 메모리 청크입니다. 본질적으로 크기가 행 x 열인 벡터입니다. 이것이 우리에게 R과 (Rcpp) Armadillo 간의 효율적인 '제로 복사'전송을 가능하게합니다. 또한 겹치지 않는 청크에서 동시에 작업 할 수 있습니다. 그것은 큰 문제이며, 예를 들어 RcppParallel은 그것을 최대한 활용합니다. OpenMP는 여기서 작동합니다.

희소 행렬은 상호 의존성이있는 동적 목록 / 벡터 유형입니다. 따라서 동시 작업은 단순히 작동 할 수 없습니다. 슬퍼. 그러나 그것이 바로 그것입니다. 희소 행렬에 대한 일반적인 데이터 구조를 더 자세히 살펴보면 명확 해집니다 ( 예 : R의 Matrix 패키지가 그렇듯이). 예를 들어, 이 위키피디아 는 꽤 괜찮고 철저한 소개입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Matlab : 희소 행렬에서 값의 효율적인 할당

분류에서Dev

희소 행렬에서 값을 정의 할 때 병렬 처리를 어떻게 활용할 수 있습니까?

분류에서Dev

Python에서 루프없이 다른 행렬의 값에서 희소 행렬의 값을 할당하는 방법은 무엇입니까?

분류에서Dev

Python에서 루프없이 다른 행렬의 값에서 희소 행렬의 값을 할당하는 방법은 무엇입니까?

분류에서Dev

함수 호출을 통해 2D 배열 내의 구조체에 할당 할 때 Segfault

분류에서Dev

여러 희소 행렬을 cbind 할 때 "노드 스택 오버플로"발생

분류에서Dev

희소 행렬의 분할

분류에서Dev

루프에서 행렬의 모든 요소에 값을 할당하는 방법

분류에서Dev

Pandas에서 열 값을 할당 할 때 중복 계산

분류에서Dev

표에서 다음 행을 선택할 때 스프레드 시트 사이드 바의 값 업데이트

분류에서Dev

팬더의 다른 열에 값을 할당하기 위해 열 필터를 수행 할 때 "조각 복사"경고의 원인을 이해하지 못함

분류에서Dev

행렬에 값 할당

분류에서Dev

iml 프로 시저에서 행렬 값을 할당 할 때 오류 발생

분류에서Dev

벡터에 std :: thread를 할당 할 때 segfault <std :: thread>

분류에서Dev

빈 행렬의 7 번째 열과 행에 값을 할당 할 수 없습니다.

분류에서Dev

다항식에서 행렬을 대체 할 때의 문제

분류에서Dev

R에서 병렬 컴퓨팅을 수행 할 때 foreach ()의 클러스터에 요소가 어떻게 할당됩니까?

분류에서Dev

Bash의 변수에 행렬 값을 할당하는 방법

분류에서Dev

"solve"구조의 많은 값을 행렬에 할당 : MATLAB

분류에서Dev

작은 행렬의 값을 큰 행렬의 지정된 위치에 할당

분류에서Dev

빌드 메소드 중에 Java 클래스의 ArrayList 멤버 변수에 값을 어떻게 할당합니까?

분류에서Dev

다중 인덱스 데이터 프레임의 셀에 값을 할당 할 수 없습니다 (df의 사본 / 조각에 할당?).

분류에서Dev

목록을 순회 할 때 다른 목록의 특정 값 개수에 해당하는 요소가있는 목록 생성

분류에서Dev

jsp의 값을 중첩 ArrayList 변수에 할당 할 수 없습니다.

분류에서Dev

해당 Descendant에서 다른 요소 값을 전달할 때 Descendant에서 XML 요소 값을 반환하는 방법

분류에서Dev

행렬의 행별로 최소값에 0을 할당하는 방법 (빠르고 효율적인 방법)?

분류에서Dev

다중 스레드를 사용할 때 큐를 어디에서 정의 해제해야합니까?

분류에서Dev

WPF의 다른 스레드에서 UI 컨트롤을 업데이트 할 때 "다른 스레드가이 개체를 소유하고 있기 때문에 호출 스레드가이 개체에 액세스 할 수 없습니다."오류

분류에서Dev

희소 행렬을 다른 행렬에 빠르게 삽입

Related 관련 기사

  1. 1

    Matlab : 희소 행렬에서 값의 효율적인 할당

  2. 2

    희소 행렬에서 값을 정의 할 때 병렬 처리를 어떻게 활용할 수 있습니까?

  3. 3

    Python에서 루프없이 다른 행렬의 값에서 희소 행렬의 값을 할당하는 방법은 무엇입니까?

  4. 4

    Python에서 루프없이 다른 행렬의 값에서 희소 행렬의 값을 할당하는 방법은 무엇입니까?

  5. 5

    함수 호출을 통해 2D 배열 내의 구조체에 할당 할 때 Segfault

  6. 6

    여러 희소 행렬을 cbind 할 때 "노드 스택 오버플로"발생

  7. 7

    희소 행렬의 분할

  8. 8

    루프에서 행렬의 모든 요소에 값을 할당하는 방법

  9. 9

    Pandas에서 열 값을 할당 할 때 중복 계산

  10. 10

    표에서 다음 행을 선택할 때 스프레드 시트 사이드 바의 값 업데이트

  11. 11

    팬더의 다른 열에 값을 할당하기 위해 열 필터를 수행 할 때 "조각 복사"경고의 원인을 이해하지 못함

  12. 12

    행렬에 값 할당

  13. 13

    iml 프로 시저에서 행렬 값을 할당 할 때 오류 발생

  14. 14

    벡터에 std :: thread를 할당 할 때 segfault <std :: thread>

  15. 15

    빈 행렬의 7 번째 열과 행에 값을 할당 할 수 없습니다.

  16. 16

    다항식에서 행렬을 대체 할 때의 문제

  17. 17

    R에서 병렬 컴퓨팅을 수행 할 때 foreach ()의 클러스터에 요소가 어떻게 할당됩니까?

  18. 18

    Bash의 변수에 행렬 값을 할당하는 방법

  19. 19

    "solve"구조의 많은 값을 행렬에 할당 : MATLAB

  20. 20

    작은 행렬의 값을 큰 행렬의 지정된 위치에 할당

  21. 21

    빌드 메소드 중에 Java 클래스의 ArrayList 멤버 변수에 값을 어떻게 할당합니까?

  22. 22

    다중 인덱스 데이터 프레임의 셀에 값을 할당 할 수 없습니다 (df의 사본 / 조각에 할당?).

  23. 23

    목록을 순회 할 때 다른 목록의 특정 값 개수에 해당하는 요소가있는 목록 생성

  24. 24

    jsp의 값을 중첩 ArrayList 변수에 할당 할 수 없습니다.

  25. 25

    해당 Descendant에서 다른 요소 값을 전달할 때 Descendant에서 XML 요소 값을 반환하는 방법

  26. 26

    행렬의 행별로 최소값에 0을 할당하는 방법 (빠르고 효율적인 방법)?

  27. 27

    다중 스레드를 사용할 때 큐를 어디에서 정의 해제해야합니까?

  28. 28

    WPF의 다른 스레드에서 UI 컨트롤을 업데이트 할 때 "다른 스레드가이 개체를 소유하고 있기 때문에 호출 스레드가이 개체에 액세스 할 수 없습니다."오류

  29. 29

    희소 행렬을 다른 행렬에 빠르게 삽입

뜨겁다태그

보관