KR102040160B1 - 대칭 멀티스레딩 환경의 공유 데이터 동기화를 위한 결합 락 할당 및 참조 - Google Patents

대칭 멀티스레딩 환경의 공유 데이터 동기화를 위한 결합 락 할당 및 참조 Download PDF

Info

Publication number
KR102040160B1
KR102040160B1 KR1020130017603A KR20130017603A KR102040160B1 KR 102040160 B1 KR102040160 B1 KR 102040160B1 KR 1020130017603 A KR1020130017603 A KR 1020130017603A KR 20130017603 A KR20130017603 A KR 20130017603A KR 102040160 B1 KR102040160 B1 KR 102040160B1
Authority
KR
South Korea
Prior art keywords
lock
shared memory
instance
stored
offset
Prior art date
Application number
KR1020130017603A
Other languages
English (en)
Other versions
KR20130099837A (ko
Inventor
웨딩톤 다니엘
티엔 첸
루 통핑
Original Assignee
삼성전자주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US13/408,263 external-priority patent/US8868849B2/en
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Publication of KR20130099837A publication Critical patent/KR20130099837A/ko
Application granted granted Critical
Publication of KR102040160B1 publication Critical patent/KR102040160B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/167Interprocessor communication using a common memory, e.g. mailbox

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

공유 메모리 프로세스에서 서로 다른 스레드가 공유 데이터 변수를 공유 메모리 내에서 액세스하는 시도를 할 수 있다. 공유 데이터 변수에 대한 액세스를 동기화하는 락이 제공된다. 각각의 락은 공유 메모리 내에서 락이 보호하는 공유 데이터의 인스턴스에 관한 위치가 할당된다. 락은 보호 대상 데이터에 인접하여 할당될 수 있다. 락 조정이 제공됨으로써 락의 메모리 위치가 락으로 보호되는 데이터 변수에 관한 오프셋으로부터 판단될 수 있도록 한다.

Description

대칭 멀티스레딩 환경의 공유 데이터 동기화를 위한 결합 락 할당 및 참조{COUPLED LOCK ALLOCATION AND LOOKUP FOR SHARED DATA SYNCHRONIZATION IN SYMMETRIC MULTITHREADING ENVIRONMENTS}
공유 메모리 프로세스의 공유 데이터 동기화에 사용되는 락(lock)의 개선에 관한 것이다. 보다 상세하게는 락 할당 기법의 개선 및 락 조정의 개선에 관한 것이다.
멀티코어 및 매니코어 프로세서(칩 멀티프로세서(CMP: Chip Multiprocessor)라고도 한다) 상에서 실행되도록 설계되는 소프트웨어는 동시 처리되는 실행들의 존재에 적절하도록 명시적으로 구조화되어야 한다. 오늘날의 대부분의 멀티코어 프로세서는 일관된 공유 메모리의 프로그래밍 모델을 지원함으로써 동일 프로세스에 속하는 복수의 스레드가 동일한 어드레스 공간 및 데이터 변수에 액세스할 수 있도록 한다. 그 기반이 되는 하드웨어는 프로세스 내의 각각의 스레드에 대하여 일관성 있는 관점의 메모리를 보장하여야 한다. 이러한 하드웨어 모델은 대칭 멀티 프로세싱(SMP: Symmetric Multi-Processing)으로 알려져 있으며, 오늘날의 멀티코어 기기에서는 흔하다.
도 1은 서로 다른 스레드로부터 동일한 데이터 위치로의 액세스를 조정하여 일관되고 적절한 결과를 도출하도록 하는 동기화 메커니즘을 포함하는 종래의 멀티코어 프로세서 시스템을 나타낸 도면이다. 종래 기술에서, 프로그래머는 수동으로 각각의 변수에 대한 락(lock)을 선언하고 연결하여야 하는데, 이는 잠재적인 오류의 원인이 된다. 또한, 해시 테이블이나 그 밖의 참조 테이블 구조에서는 전형적으로 락과 변수 사이의 관계를 조절할 수 있어야 했다. 락을 사용하는 종래의 방법에서는, 락이 사전에 정의되므로 락과 변수 간의 관계를 추적하는 것이 곤란하여 "적절한" 락을 사용하기가 쉽지 않았다. 더욱이, 락을 사용하는 종래의 방법은 (부적절한 락 선택이나 적시에 락을 선택 또는 해제하지 못함으로써) 오류가 발생하기 쉬워서, 원자성 위반(atomicity violation)이나 데드락(deadlock) 등의 다양한 오류를 유발하게 된다.
공유 메모리 환경에서 적절성(correctness)을 위한 중요한 요소는, 데이터에 대한 액세스의 일렬화(serialize)를 보장하여 데이터 기록의 원자성을 보장하는 것이다. 예컨대, (코어 0에서 실행 중인) 스레드 A가 (32비트 기기의) 메모리에 64비트의 정렬된 정수(aligned integer)(예컨대, 변수 'v')를 기록하고 있고, 스레드 A가 기록을 완료하기 위하여 2개의 메모리 동작/처리가 메모리 컨트롤러 상에서 요구된다고 가정한다. 적절한 동기화가 없다면, 스레드 A가 메모리 영역의 나머지 반에 기록을 마치기 전에 스레드 B가 메모리 위치의 처음 절반을 읽을 수도 있으며, 이는 일관성 없고 부적절한 결과를 낳을 수 있다. 이러한 문제를 피하기 위하여, 변수 'v'에 대한 판독 및 기록 액세스는 특정 프로세서 상에서 구현될 수 있는 일정한 형식의 일관성 메커니즘(예컨대, 스핀락(spinlock), 뮤텍스(mutex) 또는 세마포어(semaphore))을 통하여 동기화되어야 한다.
동기화 메커니즘은 프로그램 언어 레벨의 구성(예컨대, 자바(Java)의 동기화 키워드)이나 라이브러리(예컨대 POSIX pthread 라이브러리) 호출로서 구현될 수 있다. 어떤 경우에도 프로그래머는 명시적으로 락의 할당을 식별하여야 한다. 락의 할당에 더하여, 프로그래머는 일반적으로 컴파일 시의 심볼을 통하여 락을 참조하여야만 한다.
다음은 C 언어에서의 전형적인 락 보호의 예시이다.
#include <pthread.h>
int shared_data;
pthread_mutex_t shared_data_lock = PTHREAD_MUTEX_INITIALIZER; /* static lock initialization */
void func()
{
/* take lock */
pthread_mutex_lock(&shared_data_lock);
/* safe access data */
shared_data ++;
/* release lock */
pthread_mutex_unlock(&shared_data_lock);
}
락 보호에 관한 이 예시에서는, 락과 보호되는 공유 데이터의 대응하는 부분 간의 알려진 관계(즉, "shared_data_lock이 shared_data를 보호한다"라고 하는 관계)가 존재하여야 한다. 적절한 락이 주어진 공유 데이터 변수에 대한 액세스에 제공됨을 보장하는 것은 프로그래머의 성실성뿐이다.
락-변수 관계를 프로그래머가 추적하는 것이 특히 곤란한 때는 락이 변수 액세스의 포인트와 별개로 선언된 때이다. 일부 상업용 제품들은 코드에 주석을 포함하여 관계의 내용에 관한 설명을 제공함으로써 기기에서 이루어지는 락 사용의 적절성을 정적인 분석을 통하여 검증할 수 있도록 한다. 그럼에도 불구하고, 이러한 시도는 GNU C/C++과 같이 맞춤형이 아닌 컴파일러의 맥락에서는 쉽게 구현될 수 없다.
위와 같은 종래 기술의 문제점에 착안하여 락, 할당 및 락 조정에 관한 발명이 이루어졌다.
공유 메모리 프로세스의 공유 데이터 동기화에 사용되는 락(lock)의 할당 기법 및 락 조정 방법을 개선하는 것을 목적으로 한다.
보호하고자 하는 공유 자원에 인접하도록 락을 할당함으로써 공유 메모리 내의 공유 자원의 각각의 인스턴스에 락을 할당하는 공유 메모리 프로세스에서의 기법에 관한 장치, 시스템, 방법 및 컴퓨터 프로그램 제품을 포함한다. 컴퓨팅 환경은 공유 메모리에 액세스를 시도하는 2 또는 그 이상의 프로세서를 포함한다. 공유 자원은 프로그램 데이터 변수의 인스턴스를 포함할 수 있으나 보다 일반적으로는 공유 재입불가능 기능(shared on-reentrant function)(예컨대 프로그램 코드)과 같은 기타 공유 자원도 포함할 수 있다.
발명은 락의 위치의 메모리 어드레스를 락이 보호하는 공유 자원의 메모리 어드레스로부터 추론할 수 있기 때문에 효율적인 락 조정(공유 자원에 대응하는 락의 발견)을 가능케 한다. 일 실시예에서 락은 공유 자원에 인접하게 배치된다. 데이터 변수의 메모리 위치로부터의 오프셋이 대응하는 락을 배치하는 데에 사용될 수 있다. 일 구현에서, 락 구조는 보호하는 데이터에 인접하도록 직접 할당될 수 있다. 액세스되는 데이터 변수의 어드레스는 해시 테이블이나 이와 유사한 락 조정 수단을 사용할 필요가 없이 적절한 락을 배치(및 활용)할 수 있는 모든 것이 될 수 있다.
데이터 변수의 특정 인스턴스에 대응하여 락을 배치하는 효율적인 락 조정을 컴파일러 기반 락 배치 또는 그 밖의 기기 기반 접근법에서 요구되는 해시 테이블, 참조 테이블 또는 이와 유사한 수단 없이도 제공할 수 있는 효과가 있다.
또한, 컴파일러/자동화 방법론에 용이하게 통합됨으로써 잠재적인 프로그래밍 오류를 제거할 수 있는 효과가 있다.
도 1은 종래의 공유 메모리 프로세스 및 락을 조정하는 데에 사용되는 해시 테이블을 나타낸 도면,
도 2는 일 실시예에 따른 락 할당 및 조정을 채용한 시스템의 블록도,
도 3은 32비트 OS 상에서 락이 보호하는 공유 데이터의 인스턴스에 인접한 락을 할당하는 것을 나타낸 도면,
도 4는 실시예들에 따른 락 할당 및 조정 방법의 흐름도,
도 5A,5B 및 5C는 공유 메모리 프로세스 환경의 추가적인 예시를 나타낸 도면이다.
이하, 첨부된 도면을 참조하여 실시를 위한 구체적인 예를 상세히 설명한다.
도 2는 일 실시예에 따른 락 할당 및 조정을 채용한 시스템의 블록도이다. 이 실시예에서, 복수의 개별 코어들(200)로부터의 스레드는 대칭 멀티스레딩 환경에서 공유 메모리(250)에 대한 액세스를 시도한다. 시스템은 보호하고자 하는 공유 자원(예컨대 공유 프로그램 데이터 변수)에 대한 알려진 위치에 락을 할당하는 동기화 메커니즘(260)을 포함하도록 이루어진다. 예컨대, 공유 메모리 내에서 공유 데이터의 개별 인스턴스는 공유 데이터에 인접하도록 할당된 락을 가질 수 있다. 따라서 공유 데이터의 특정 인스턴스에 대응하는 락은 대응하는 변수의 어드레스로부터의 오프셋을 결정함으로써 배치될 수 있다.
락은 락을 배치하고, 락을 취하고, 데이터를 액세스한 후 해제하는 순서의 관점에서 종래 기술에 따른 락과 마찬가지의 방식으로 사용될 수 있다. 그러나, 액세스되는 변수의 어드레스는 적절한 락을 배치하(고 또한 취하)는 데에 필요한 모든 것이 되도록 함으로써, 프로그래머로 하여금 프로그램 코드를 작성할 때에 테이블을 참조하거나 수작업으로 식별을 할 필요가 없게 된다.
따라서, 이러한 접근은 효율적인 "락 조정(lock resolution)"(즉, 데이터 변수의 특정 인스턴스에 대응하는 락의 배치)를 컴파일러 기반 락 배치 또는 그 밖의 기기 기반 접근법에서 요구되는 해시 테이블, 참조 테이블 또는 이와 유사한 수단 없이도 제공할 수 있게 된다. 나아가, 이 접근법은 컴파일러/자동화 방법론에 용이하게 통합될 수 있으며 잠재적인 프로그래밍 오류를 제거할 수 있다는 점에서 종래의 수동 락 할당 방법론과 다르다는 것이 중요하다.
일 측면에 따르면 락 데이터 구조는 락이 보호하는 데이터 변수의 메모리 위치에 관한 상대적인 오프셋으로써 참조되는 메모리 위치에 할당된다. 일례로서, 락 데이터 구조는 데이터 변수에 인접하도록, 가령 락이 보호하는 데이터 변수의 바로 다음에 오도록, 배치될 수 있다. 특히, 바람직한 실시예에서 락 데이터 구조는 락이 보호하는 데이터의 바로 다음 메모리 위치에 할당될 수 있다. 따라서, 데이터 변수에 액세스하는 시도가 있는 때에 그 데이터 변수에 대한 락의 오프셋이 용이하게 판단될 수 있다.
도 3을 참조하면, 데이터(4 바이트 롱 인티저(long integer))는 공유 메모리 어드레스 0xF0000000에 할당되는 반면 락 구조(pthread_mutex_t)는 공유 메모리 어드레스 0xF0000004-0xF0000032에 할당된다. 도 3의 예에서, 락 위치는 락 위치와 락이 보호하는 데이터 변수 사이의 오프셋에 기초하여 조정 가능하다. 특히, 도 3의 예에서 임의의 변수 'v'에 대하여 'v'의 형식 및 길이와 무관하게 대응하는 락의 어드레스는 데이터 변수의 위치 및 크기로부터 다음과 같이 추론될 수 있다.
pthread_mutex_t = (pthread_mutex_t*)(((unsigned long)&v) + sizeof(v)).
도 4는 락 할당 및 조정 방법을 예시한 흐름도이다. 락들은 단계 405에서 락이 보호하는 데이터 변수의 위치에 인접하도록 배치된다. 단계 410의 메모리 액세스에서 락은 데이터 변수의 메모리 위치에 관한 오프셋을 계산함으로써 조정된다.
락 할당 및 참조(lookup)는 다양한 서로 다른 공유 메모리 프로세스 구성에 적용될 수 있다. 실시예들은 도 5A-5C에 나타낸 멀티코어 프로세서, NUMA 아키텍처 또는 스트립트 멀티프로세서(stripped multi-processors)를 포함한다. 도 5에서 나타낸 바와 같이, 발명은 링크(L)로 서로 연결된 복수의 코어들(500)과 공유 메모리에 액세스하기 위한 메모리 컨트롤러(505)를 갖는 멀티코어 프로세서에서 구현될 수 있다. 도 5B는 복수의 프로세서들(500)이 서로 연결되고 메모리 컨트롤러(505)를 통하여 공유 메모리에 액세스하는 비정형 메모리 액세스 환경을 나타낸 도면이다. 도 5C는 스트립트 멀티프로세서 구현을 나타낸 도면이다. 이와 다른 프로세서의 개수와 배열의 변경 및/또는 공유 메모리 프로세스 기술 분야에서 알려진 타 프로세서 코어 또한 사용 가능하다. 락 조정을 위한 컴퓨터 소프트웨어가 메모리 액세스를 시도하는 프로세서들 중 하나에 액세스할 수 있는 적절한 메모리 상에 저장될 수 있다.
동기화 기능이 메모리에 저장되어 1 또는 그 이상의 프로세서로 실행되는 컴퓨터 프로그램 코드 상에 구현될 수도 있다. 락 할당 및 참조가 공유 프로그램 데이터 변수에 적합하지만, 더욱 일반적으로 공유 재입불가능 기능에 적용될 수도 있다.
바람직한 실시예는 C/C++/C++11 프로그래밍 언어를 기초로 한다. C++ 프로그래밍 언어에서 이 락 조정 기법은 "변수 참조(variable reference)" 특성을 이용하여 구현될 수 있다. 다음의 발췌 코드는 전역 변수 무부호 롱 i를 보호하는 pthread_mutex_t 락의 할당 및 액세스를 나타낸 것이다. C 매크로를 이용하여 락 조정을 다음과 같이 단순화할 수 있다.
/* helper macros */
#define lock(X) pthread_mutex_lock((pthread_mutex_t *)((unsigned long)& X)+sizeof(X))
#define unlock(X) pthread_mutex_unlock((pthread_mutex_t *)((unsigned long)& X)+sizeof(X))
struct shared_long
{
unsigned long __data;
pthread_mutex_t __lock;
__data;
}
__attribute__((packed)); /* e.g., structure must be declared packed */
struct shared_long __safe_x;
unsigned long& x = __safe_x;
void myfunction()
{
lock(x);
x++; /* access 'x' in the same way as we would access any other integer variable */
unlock(x);
}
변수들은 락이 없는 경우에서와 동일한 방식으로 액세스되고 다루어진다는 점에 주목한다. 따라서 락 조정은 해시 테이블이나 그 밖의 참조 수단을 이용하여 종래 기술의 접근법에 비하여 상대적으로 용이하게 구현될 수 있을 뿐만 아니라 효율적인 연산도 가능하다.
락과 변수의 선언(즉, 위의 실시예에서는 shared_int의 선언 및 인스턴세이션(instantiation))도 용이한 사용을 위하여 C/C++ 매크로로 간략화될 수 있다. 또는 소스 대 소스의 하이 레벨 컴파일러의 일부로서 사용될 수도 있다.
C 프로그래밍 언어에서, 레퍼런스 타입을 갖지 않는 것은 다음의 익명 유니온(anonymous union)을 사용하는 것이 적용될 수 있다.
/* helper macros */
#define lock(X) pthread_mutex_lock((pthread_mutex_t *)((unsigned long)& X)+sizeof(X))
#define unlock(X) pthread_mutex_unlock((pthread_mutex_t *)((unsigned long)& X)+sizeof(X))
static union
{
struct __dummy
{
unsigned long __data;
pthread_mutex_t __lock;
} __attribute__((packed)); /* e.g., structure must be declared packed */
unsigned long y;
};
void myfunction()
{
lock(y);
y++; /* access 'y' in the same way as we would access any other integer variable */
unlock(y);
}
그러나, C 컴파일러들(예컨대, GNU C)이 비 정적 전역 익명 유니온(non-static anonymous union)을 지원하지 않으므로, 이 방법에서는 전역 변수가 정적 (static)으로 지정되어야 하는 점을 주의하여야 한다.
프로그램 가능성(programmability) 또한 프로그래머가 변수 'x'에 액세스하면서도 대응하는 특정 관련 락의 심볼 명칭을 몰라도 된다는 점에서 장점이 된다. 프로그래머가 오류를 범할 여지가 없다. 프로그래머는 명시적으로 보호 데이터에 관한 락을 정의할 필요가 없는데, 이는 프로그래머가 레퍼런스 타입(reference type)과 같은 타입 시스템(type system)을 사용할 수 있기 때문이다. 나아가, 실시예에 따르면 보호되는 데이터 유형이 코드 내에서 사용되는 방식에 관한 어떠한 변화도 필요치 않다.
일 측면에 따르면, 락 할당 및 락 조정은 확장성이 있다. 특정 변수 인스턴스에 대응되는 락을 발견하기 위하여 요구되는 테이블이나 명시적인 참조가 없기 때문이다. 따라서, 락 할당 및 락 조정 접근방법의 확장 가능성은 멀티코어 및 매니코어 컴퓨팅 시스템에 매력적이다. 나아가, 이러한 측면이 특히 가치가 있는 때는, 개발자가 프로그램 작성시에 용이하게 연관지을 수 없는 다수의 락이 존재하는 때이다.
또한, 발명에 힘입어 변수 어레이에 대한 락 어레이의 경우에 락 할당 및 락 조정이 용이해진다. 종래 기술에서, 연관 오프셋은 대응하는 락에 연관될 수 있다(예컨대, v[a]에 대한 락은 lock[a]가 된다). 이는 신속하고 효율적이지만, 인덱스 'a'를 갖는 변수 'v'에 의존적이다. 그러나, 종래 기술의 기법은 변수들이 심볼로 명명되는 때, 예컨대 변수 v0 내지 v1000으로 명명되는 때에는 적용할 수 없게 된다. 반면, 발명에 따른 락 할당 및 락 조정은 변수 어레이에 대한 락 어레이로 존재하는 경우에도 여전히 효과적이다.
발명은 효율적인 락 조정을 가능케 한다.
발명은 효율적인 락 조정(예컨대 데이터의 특정 인스턴스에 대응하는 락의 배치)을 참조 테이블을 사용하지 않고 할 수 있도록 한다. 이러한 접근법은 기존의 코드를 변환하여 락 할당 및 락 획득을 공유 데이터에 대한 직렬화 액세스 강화의 목적으로 통합하고자 하는 컴파일러 기반(자동화) 락 장치의 측면에서 특히 중요하다. 연산 결과에 따르면, 락을 멀티코너 환경에서 배치하는 시간이 (해시 테이블과 비교할 때) 70분의 1로 감소하였음을 볼 수 있다. 나아가, 수동적인 방법은 오류가 발생하기 쉽고 컴파일러/자동화 방법론에 통합될 수 없다. 발명은 확장성 있는 방법으로 락 획득의 성능을 극대화하므로 락 조정에 있어서 중요한 의미를 갖는다.
발명은 락을 관리하는 중앙집중화된 방법이라는 혜택을 제공한다. 발명의 커플링 메커니즘은 또한 다양한 이유로 성능 개선에 기여할 수 있다. 첫 번째 측면은, 몇몇 경우에서 락과 공유 변수가 동일 캐시를 공유할 수 있다는 점으로서, 이 경우 성능이 개선된다. 반면, 종래 기술에서는 락이 실제 데이터와 멀리 떨어져 있기 때문에, 공유 데이터에 액세스를 시도할 때에는 두 개의 상이한 캐시 라인을 캐시에 로드하여야 한다.
C/C++ 프로그래밍 언어로 구현된 실시예를 설명하였지만, 공유 메모리에서 변수의 위치와 락의 위치를 관리할 수 있는 타 프로그래밍 언어도 적용 가능하다. 나아가, 락 및 데이터 변수를 메모리에서 인접하게 배치하는 사상은 하드웨어로 구현하는 것으로도 확장될 수 있다.
실시예가 멀티코어 프로세서 환경에서의 공유 메모리 프로세스에 관하여 설명되었으나, 타 프로세서 아키텍처에도 사용될 수 있음을 이해하여야 한다. 예컨대, 유니프로세서 상에서 타임-멀티플렉싱을 활용하는 공유 메모리 프로세스에도 사용될 수 있다.
발명을 특정 실시예와 연관지어 설명하였으나, 이를 실시예의 내용으로 발명을 한정하고자 하는 의도로 해석하여서는 안된다. 오히려 변형예, 변경 및 균등물까지를 포괄하고자 하는 의도이며 이들은 첨부한 특허청구범위에 정의된 발명의 사상과 범위에 포함된다. 발명은 이들의 구체적인 내용의 일부 또는 전부를 포함하지 않고도 실시될 수 있다. 또한, 널리 알려진 내용들은 불필요하게 발명을 모호하게 하는 일이 없도록 설명을 생략할 수도 있다.
발명의 구성요소, 절차 단계 및/또는 데이터 구조는 다양한 유형의 윤영체제나 프로그래밍 언어, 컴퓨팅 플랫폼, 컴퓨터 프로그램 및/또는 범용 기기를 이용하여 구현될 수 있다. 또한, 이 기술분야의 보통의 기술자라면 덜 범용적인 기기인 배선된 기기, FPGA(Field Programmable Gate Array), 주문형 반도체(ASIC) 등의 기기를 이용하더라도 여기에 개시된 발명의 사상 및 범위를 벗어나지 않음을 알 수 있을 것이다. 발명은 또한 메모리 장치 등의 컴퓨터로 판독 가능한 메체에 저장된 컴퓨터 명령어들의 집합으로서 유형적으로 구현될 수도 있다. 예컨대, 락을 조정하는 개별 컴퓨터 코드는 메모리와 같은 비일시적인 저장 매체에 탑재되어 공유 메모리 프로세스에서 개별 프로세서에 의하여 실행될 수 있다. 락 할당의 자동화를(컴파일러/자동화 장치에서) 지원하는 컴퓨터 코드는 비일시적인 저장 매체에 탑재될 수 있다.
다양한 양상, 특징, 실시예 또는 구현이 단독으로 또는 다양한 결합을 통하여 사용될 수 있다. 많은 특징과 장점들은 발명의 상세한 설명을 통하여 명백하게 기술되었으며, 첨부한 특허청구범위는 그러한 특징과 장점을 모두 포괄하고자 하는 의도를 가진다. 또한, 다양한 변형과 변경이 이 기술분야의 보통의 기술자에 의하여 이루어질 수 있으므로, 발명은 서술되고 묘사된 그대로의 구성과 작동만으로 한정되어서는 안된다. 모든 적절한 변형물과 균등물은 발명의 범위에 속한다.

Claims (19)

  1. 적어도 2개의 프로세서 또는 코어 및 공유 메모리 프로세서 구성을 갖는 멀티스레디드 컴퓨팅 시스템의 락 사용 방법으로서,
    공유 메모리에 저장된 인스턴스를 보호하기 위해, 락에 대한 오프셋을 기초로 상기 공유 메모리에 락을 할당하는 단계;를 포함하고,
    상기 할당하는 단계는,
    상기 공유 메모리에서 상기 인스턴스가 저장된 어드레스에서 상기 오프셋만큼 떨어진 어드레스에 상기 락을 할당하며,
    상기 오프셋은, 상기 인스턴스의 크기에 대응하는 멀티스레디드 컴퓨팅 시스템의 락 사용 방법.
  2. 제1항에 있어서,
    상기 락은 상기 공유 메모리 내에 저장된 인스턴스에 인접하도록 할당되는 멀티스레디드 컴퓨팅 시스템의 락 사용 방법.
  3. 삭제
  4. 제1항에 있어서,
    상기 인스턴스는 상기 락과 함께 할당되는 멀티스레디드 컴퓨팅 시스템의 락 사용 방법.
  5. 제1항에 있어서,
    상기 락은 컴파일러에 의하여 자동으로 할당되는 멀티스레디드 컴퓨팅 시스템의 락 사용 방법.
  6. 제1항에 있어서,
    상기 락은 타입 시스템을 통하여 보호하는 인스턴스에 관하여 암시적으로 정의됨으로써 프로그래머가 명시적으로 락을 정의할 필요가 없도록 하는 멀티스레디드 컴퓨팅 시스템의 락 사용 방법.
  7. 공유 메모리에 접근 가능한 적어도 2개의 프로세서;를 포함하고,
    상기 적어도 2개의 프로세서 중 하나의 프로세서는,
    공유 메모리에 저장된 인스턴스를 보호하기 위해 락에 대한 오프셋을 기초로 공유메모리에 락을 할당하며,
    상기 락의 어드레스는 상기 락에 의하여 보호되는 인스턴스가 저장된 어드레스에서 상기 오프셋만큼 떨어진 어드레스이며,
    상기 오프셋은, 상기 인스턴스의 크기에 대응하는 멀티스레디드 컴퓨팅 시스템.
  8. 제7항에 있어서,
    상기 락은 상기 공유 메모리 내에 저장된 인스턴스에 인접하도록 할당되는 멀티스레디드 컴퓨팅 시스템.
  9. 삭제
  10. 제7항에 있어서,
    상기 인스턴스는 상기 락과 함께 할당되는 멀티스레디드 컴퓨팅 시스템.
  11. 제7항에 있어서,
    상기 락은 컴파일러에 의하여 자동으로 할당되는 멀티스레디드 컴퓨팅 시스템.
  12. 제7항에 있어서,
    상기 락은 타입 시스템을 통하여 보호하는 인스턴스에 관하여 암시적으로 정의됨으로써 프로그래머가 명시적으로 락을 정의할 필요가 없도록 하는 멀티스레디드 컴퓨팅 시스템.
  13. 적어도 2개의 프로세서 또는 코어 및 공유 메모리 프로세서 구성을 갖는 멀티스레디드 컴퓨팅 시스템의 락 조정방법으로서,
    공유 메모리에 저장된 인스턴스를 보호하기 위해 상기 공유 메모리에 저장된 락의 위치를 상기 락에 대한 오프셋을 기초로 판단하는 단계;를 포함하고,
    상기 락의 위치는, 상기 공유 메모리에서 상기 인스턴스가 저장된 어드레스에서 상기 오프셋만큼 떨어진 어드레스이고,
    상기 오프셋은, 상기 인스턴스의 크기에 대응하는
    멀티스레디드 컴퓨팅 시스템의 락 조정 방법.
  14. 제13항에 있어서,
    상기 락은 상기 공유 메모리 내에 저장된 인스턴스에 인접하도록 할당되는 멀티스레디드 컴퓨팅 시스템의 락 조정 방법.
  15. 삭제
  16. 공유 메모리에 접근 가능한 적어도 2개의 프로세서;를 포함하고, 상기 적어도 2개의 프로세서 중 하나의 프로세서는,
    공유 메모리에 저장된 인스턴스를 보호하기 위해 상기 공유 메모리에 저장된 락의 위치를 상기 락에 대한 오프셋을 기초로 결정하고,
    상기 락의 위치는, 상기 공유 메모리에서 상기 인스턴스가 저장된 어드레스에서 상기 오프셋만큼 떨어진 어드레스이고,
    상기 오프셋은, 상기 인스턴스의 크기에 대응하는 멀티스레디드 컴퓨팅 시스템.
  17. 제16항에 있어서,
    상기 락은 상기 공유 메모리 내에 저장된 인스턴스에 인접하도록 할당되는 멀티스레디드 컴퓨팅 시스템.
  18. 삭제
  19. 공유 메모리에 저장된 인스턴스를 보호하기 위해 락에 대한 오프셋을 기초로 상기 공유 메모리에 락을 할당하는 단계; 를 포함하고,
    상기 할당하는 단계는,
    상기 공유 메모리에서 상기 인스턴스가 저장된 어드레스에서 상기 오프셋만큼 떨어진 어드레스에 상기 락을 할당하며,
    상기 오프셋은, 상기 인스턴스의 크기에 대응하는 방법을 구현하는 프로세서에 의하여 수행되는 컴퓨터로 판독 가능한 인스트럭션을 포함하는 비일시적 컴퓨터 판독 가능 매체.
KR1020130017603A 2012-02-29 2013-02-19 대칭 멀티스레딩 환경의 공유 데이터 동기화를 위한 결합 락 할당 및 참조 KR102040160B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/408,263 2012-02-29
US13/408,263 US8868849B2 (en) 2011-08-17 2012-02-29 Coupled lock allocation and lookup for shared data synchronization in symmetric multithreading environments

Publications (2)

Publication Number Publication Date
KR20130099837A KR20130099837A (ko) 2013-09-06
KR102040160B1 true KR102040160B1 (ko) 2019-11-04

Family

ID=49485454

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020130017603A KR102040160B1 (ko) 2012-02-29 2013-02-19 대칭 멀티스레딩 환경의 공유 데이터 동기화를 위한 결합 락 할당 및 참조

Country Status (1)

Country Link
KR (1) KR102040160B1 (ko)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100292643B1 (ko) 1997-07-11 2001-06-15 포만 제프리 엘 바이트 범위 api 로킹(byte rangeati locking)을 갖춘병렬 파일 시스템 및 방법
JP2010517163A (ja) * 2007-01-24 2010-05-20 エヌイーシー ラボラトリーズ アメリカ インク 並列プログラム用の高速で正確な静的データの競合検出方法
US7809916B1 (en) 2007-09-28 2010-10-05 Oracle America, Inc. Method for dynamically refining locks in resizable concurrent hashing

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB0623276D0 (en) * 2006-11-22 2007-01-03 Transitive Ltd Memory consistency protection in a multiprocessor computing system
KR101664108B1 (ko) * 2010-04-13 2016-10-11 삼성전자주식회사 멀티 코어의 동기화를 효율적으로 처리하기 위한 하드웨어 가속 장치 및 방법

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100292643B1 (ko) 1997-07-11 2001-06-15 포만 제프리 엘 바이트 범위 api 로킹(byte rangeati locking)을 갖춘병렬 파일 시스템 및 방법
JP2010517163A (ja) * 2007-01-24 2010-05-20 エヌイーシー ラボラトリーズ アメリカ インク 並列プログラム用の高速で正確な静的データの競合検出方法
US7809916B1 (en) 2007-09-28 2010-10-05 Oracle America, Inc. Method for dynamically refining locks in resizable concurrent hashing

Also Published As

Publication number Publication date
KR20130099837A (ko) 2013-09-06

Similar Documents

Publication Publication Date Title
Boyer et al. Automated dynamic analysis of CUDA programs
Lee et al. An OpenCL framework for heterogeneous multicores with local memory
US8868849B2 (en) Coupled lock allocation and lookup for shared data synchronization in symmetric multithreading environments
Xu et al. Lock-based synchronization for GPU architectures
Allen et al. Serialization sets: a dynamic dependence-based parallel execution model
US10031697B2 (en) Random-access disjoint concurrent sparse writes to heterogeneous buffers
Dice et al. {BRAVO—Biased} Locking for {Reader-Writer} Locks
Heumann et al. The tasks with effects model for safe concurrency
Ramashekar et al. Automatic data allocation and buffer management for multi-GPU machines
Pratikakis et al. A programming model for deterministic task parallelism
Zhang et al. Mocl: an efficient OpenCL implementation for the matrix-2000 architecture
DeLozier et al. SOFRITAS: Serializable ordering-free regions for increasing thread atomicity scalably
Majo et al. A library for portable and composable data locality optimizations for numa systems
KR20130018108A (ko) 메모리 페이지-폴트 핸들링 메카니즘을 통한, 라이브러리 코드에서의 레이스 콘디션의 방지 방법 및 시스템
Ros et al. Fast&furious: A tool for detecting covert racing
KR102040160B1 (ko) 대칭 멀티스레딩 환경의 공유 데이터 동기화를 위한 결합 락 할당 및 참조
Aviram et al. Workspace Consistency: A programming model for shared memory parallelism
Westbrook et al. Permission regions for race-free parallelism
Westbrook et al. Dynamic determinism checking for structured parallelism
Das et al. Section-based program analysis to reduce overhead of detecting unsynchronized thread communication
EP4094158B1 (en) Data race detection with per-thread memory protection
Jenke et al. Mapping High-Level Concurrency from OpenMP and MPI to ThreadSanitizer Fibers
Süsskraut et al. Speculation for parallelizing runtime checks
Chandramohan et al. A compiler framework for automatically mapping data parallel programs to heterogeneous MPSoCs
Papakonstantinou et al. Hierarchical parallel dynamic dependence analysis for recursively task-parallel programs

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant